1. Genel Bakış
Bu laboratuvarda, Cloud Deploy'u kullanarak Cloud Run'a bir .Net uygulaması dağıtacaksınız. Dockerfile kullanmadan Cloud Build ile container görüntüsü derleyeceksiniz. Cloud Deploy ile üç hedef ortamı olan bir ardışık düzen oluşturacak ve sürümü ortamlar aracılığıyla tanıtmak için gerekli adımları atacaksınız. Son olarak, sürümün üretim ortamına dağıtılmasını onaylayacaksınız.
Cloud Build nedir?
Cloud Build ile tüm programlama dillerinde hızlıca yazılım derleyebilirsiniz.
Cloud Deploy nedir?
Cloud Deploy, tümüyle yönetilen bir sürekli teslim hizmetidir. Cloud Deploy ile GKE, Anthos ve Cloud Run için dağıtım ardışık düzenleri oluşturabilirsiniz.
Cloud Run nedir?
Cloud Run sayesinde, herhangi bir dilde (Go, Python, Java, Node.js, .NET ve Ruby dahil) yazılmış ölçeklenebilir container mimarisine alınmış uygulamaları tümüyle yönetilen bir platformda dağıtabilirsiniz.
Skaffold nedir?
Skaffold, Kubernetes'te yerel uygulamalar için sürekli geliştirme sağlayan bir komut satırı aracıdır. Cloud Deploy, oluşturma ve dağıtım işlemleri için Skaffold'u kullanır.
Öğrenecekleriniz
Bu laboratuvarda aşağıdakileri nasıl yapacağınızı öğreneceksiniz:
- Cloud Deploy ardışık düzeni oluşturma
- Dockerfile kullanmadan Cloud Build ile .Net uygulaması için container görüntüsü oluşturma
- Cloud Deploy ile uygulamayı Cloud Run'a dağıtma
- Cloud Deploy sürümlerini tanıtma
Ön koşullar
- Bu laboratuvarda Cloud Console ve kabuk ortamları hakkında bilgi sahibi olmanız gerekir.
2. Kurulum ve Gereksinimler
Cloud projesi kurulumu
- Google Cloud Console'da oturum açıp yeni bir proje oluşturun veya mevcut bir projeyi yeniden kullanın. Gmail veya Google Workspace hesabınız yoksa hesap oluşturmanız gerekir.
- Proje adı, bu projenin katılımcıları için görünen addır. Google API'leri tarafından kullanılmayan bir karakter dizesidir. İstediğiniz zaman güncelleyebilirsiniz.
- Proje Kimliği, tüm Google Cloud projelerinde benzersizdir ve değiştirilemez (belirlendikten sonra değiştirilemez). Cloud Console, otomatik olarak benzersiz bir dize oluşturur. bunun ne olduğunu umursamıyorsunuz. Çoğu codelab'de proje kimliğini (genellikle
PROJECT_ID
olarak tanımlanır) referans almanız gerekir. Oluşturulan kimliği beğenmezseniz rastgele bir kimlik daha oluşturabilirsiniz. Alternatif olarak, kendi ölçümünüzü deneyip mevcut olup olmadığına bakabilirsiniz. Bu adımdan sonra değiştirilemez ve proje süresince kalır. - Bilginiz için bazı API'lerin kullandığı üçüncü bir değer, yani Proje Numarası daha vardır. Bu değerlerin üçü hakkında daha fazla bilgiyi belgelerde bulabilirsiniz.
- Sonraki adımda, Cloud kaynaklarını/API'lerini kullanmak için Cloud Console'da faturalandırmayı etkinleştirmeniz gerekir. Bu codelab'i çalıştırmanın maliyeti, yüksek değildir. Bu eğitim dışında faturalandırma yapılmaması için kaynakları kapatmak isterseniz oluşturduğunuz kaynakları silebilir veya projenin tamamını silebilirsiniz. Yeni Google Cloud kullanıcıları, 300 ABD doları değerindeki ücretsiz denemeden yararlanabilir.
Ortam Kurulumu
Arama çubuğunun sağındaki simgeyi tıklayarak Cloud Shell'i etkinleştirin.
Proje ortamı değişkenlerini ayarlamak için Cloud Shell'den aşağıdaki komutu çalıştırın:
export PROJECT_ID=$(gcloud config get-value project)
export PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID \
--format='value(projectNumber)')
export REGION=us-central1
API'leri etkinleştirin:
gcloud services enable \
run.googleapis.com \
cloudbuild.googleapis.com \
clouddeploy.googleapis.com \
artifactregistry.googleapis.com
Uygulama container görüntülerini depolamak için Artifact Registry deposu oluşturun:
gcloud artifacts repositories create containers-repo \
--repository-format=docker \
--location=${REGION} \
--description="Containers repository"
3. Yapılandırma dosyalarını inceleme
Uygulama kaynak kodunu klonlayın:
git clone https://github.com/gitrey/deploy-cloudrun-app-with-clouddeploy.git
cd deploy-cloudrun-app-with-clouddeploy
Cloud Deploy ardışık düzen yapılandırmasını inceleyin:
clouddeploy.yaml
apiVersion: deploy.cloud.google.com/v1
kind: DeliveryPipeline
metadata:
name: cloud-run-pipeline
description: application deployment pipeline
serialPipeline:
stages:
- targetId: dev-env
profiles: [dev]
- targetId: qa-env
profiles: [qa]
- targetId: prod-env
profiles: [prod]
---
apiVersion: deploy.cloud.google.com/v1
kind: Target
metadata:
name: dev-env
description: Cloud Run development service
run:
location: projects/_PROJECT_ID/locations/us-west1
---
apiVersion: deploy.cloud.google.com/v1
kind: Target
metadata:
name: qa-env
description: Cloud Run QA service
run:
location: projects/_PROJECT_ID/locations/us-central1
---
apiVersion: deploy.cloud.google.com/v1
kind: Target
metadata:
name: prod-env
description: Cloud Run PROD service
run:
location: projects/_PROJECT_ID/locations/us-south1
Üç ortamı tanımlayan ve hedef hizmet olarak Cloud Run'ı kullanan skaffold.yaml
dosyasını inceleyin.
skaffold.yaml
apiVersion: skaffold/v3alpha1
kind: Config
metadata:
name: cloud-run-app
profiles:
- name: dev
manifests:
rawYaml:
- deploy-dev.yaml
- name: qa
manifests:
rawYaml:
- deploy-qa.yaml
- name: prod
manifests:
rawYaml:
- deploy-prod.yaml
deploy:
cloudrun: {}
Hizmet yapılandırma dosyalarını inceleyin.
deploy-dev.yaml
kind: Service
metadata:
name: app-dev
spec:
template:
spec:
containers:
- image: app
resources:
limits:
cpu: 1000m
memory: 128Mi
deploy-qa.yaml
kind: Service
metadata:
name: app-dev
spec:
template:
spec:
containers:
- image: app
deploy-prod.yaml
apiVersion: serving.knative.dev/v1
kind: Service
metadata:
name: app-prod
spec:
template:
spec:
containers:
- image: app
Container görüntüsü ve Cloud Deploy sürümü oluşturma adımlarını içeren cloudbuild.yaml
dosyasını inceleyin:
cloudbuild.yaml
steps:
- name: 'gcr.io/k8s-skaffold/pack'
entrypoint: 'pack'
args: ['build',
'--builder=gcr.io/buildpacks/builder',
'--publish', '${_REGION}-docker.pkg.dev/${PROJECT_ID}/containers-repo/app:$BUILD_ID']
id: Build and package .net app
- name: gcr.io/google.com/cloudsdktool/cloud-sdk:slim
args:
[
"deploy", "releases", "create", "release-$_RELEASE_TIMESTAMP",
"--delivery-pipeline", "cloud-run-pipeline",
"--region", "${_REGION}",
"--images", "app=${_REGION}-docker.pkg.dev/${PROJECT_ID}/containers-repo/app:$BUILD_ID"
]
entrypoint: gcloud
4. Cloud Deploy Ardışık Düzeni Oluşturma
clouddeploy.yaml dosyasında _PROJECT_ID değerini değiştirin:
sed -i "s/_PROJECT_ID/$PROJECT_ID/g" clouddeploy.yaml
Cloud Deploy ardışık düzeni oluşturun:
gcloud deploy apply \
--file=clouddeploy.yaml \
--region=${REGION} \
--project=${PROJECT_ID}
Cloud Deploy'da oluşturulan ardışık düzeni inceleyin.
5. Container görüntüsü ve sürüm oluşturma
Cloud Build hizmet hesabına Cloud Deploy Operator izinleri ekleyin:
gcloud projects add-iam-policy-binding ${PROJECT_ID} \
--member=serviceAccount:${PROJECT_NUMBER}@cloudbuild.gserviceaccount.com \
--role=roles/clouddeploy.operator
gcloud projects add-iam-policy-binding ${PROJECT_ID} \
--member=serviceAccount:${PROJECT_NUMBER}@cloudbuild.gserviceaccount.com \
--role=roles/iam.serviceAccountUser
Container görüntüsü ve Cloud Deploy sürümünü oluşturun:
export RELEASE_TIMESTAMP=$(date '+%Y%m%d-%H%M%S')
gcloud builds submit \
--config cloudbuild-plus.yaml \
--substitutions=_REGION=${REGION},_RELEASE_TIMESTAMP=${RELEASE_TIMESTAMP}
Cloud Deploy'da oluşturulan sürümü inceleyin. Geliştirici ortamına dağıtım tamamlanana kadar bekleyin.
6. Sürümü kalite güvencesi ve PROD ortamlarına tanıtma
Cloud Console veya Cloud Shell'i kullanarak sürümü bir sonraki hedefe(qa-env) yükseltin.
Sürümü Cloud Shell ile tanıtın ve sürümü tanıtmak için gcloud komutunu çalıştırın.
gcloud beta deploy releases promote \
--release="release-${RELEASE_TIMESTAMP}" \
--delivery-pipeline=cloud-run-pipeline \
--region=${REGION} \
--quiet
Kalite güvencesi ortamına dağıtım tamamlanana kadar bekleyin. Sürümü bir sonraki hedefe(prod-env) tanıtın.
gcloud beta deploy releases promote \
--release="release-${RELEASE_TIMESTAMP}" \
--delivery-pipeline=cloud-run-pipeline \
--region=${REGION} \
--quiet
Cloud Console'da Cloud Deploy'u açın ve üretim dağıtımı için sürümü onaylayın.
Cloud Deploy ardışık düzen durumunu ve kullanılabilir DORA metriklerini ("dağıtım sayısı", "dağıtım sıklığı", "dağıtım hatası oranı") gözden geçirin.
Metrik | Açıklama |
Dağıtım sayısı | Teslimat ardışık düzeninizdeki son hedefe giden başarılı ve başarısız dağıtımların toplam sayısı. |
Dağıtım sıklığı | Teslimat ardışık düzeninin teslim ardışık düzeninizdeki son hedefe ne sıklıkta dağıtıldığıdır.DevOps Research and Assessment (DORA) programı tarafından tanımlanan dört önemli metrikten biridir. |
Dağıtım başarısızlık oranı | Teslimat ardışık düzeninizdeki son hedefe başarısız olan sunum yüzdesi. |
Cloud Run'da dağıtılan uygulamaları inceleyin:
7. Tebrikler!
Tebrikler, codelab'i tamamladınız.
İşlediğimiz konular:
- Cloud Deploy ardışık düzeni oluşturma
- Cloud Build ile .Net uygulaması için container görüntüsü oluşturma
- Cloud Deploy ile uygulamayı Cloud Run'a dağıtma
- Cloud Deploy sürümünü yükseltme
Temizleme
Bu eğiticide kullanılan kaynaklar için Google Cloud hesabınızın ücretlendirilmesini istemiyorsanız kaynakları içeren projeyi silin veya projeyi tutup tek tek kaynakları silin.
Projeyi silme
Faturalandırmayı ortadan kaldırmanın en kolay yolu, eğitim için oluşturduğunuz projeyi silmektir.