1. Genel Bakış
Bu laboratuvarda, Cloud Deploy'ı kullanarak Cloud Run'a bir .Net uygulaması dağıtacaksınız. Dockerfile kullanmadan Cloud Build ile bir kapsayıcı görüntüsü derleyeceksiniz. Cloud Deploy ile üç hedef ortam içeren bir ardışık düzen oluşturacak ve sürümün ortamlar arasında tanıtılmasıyla ilgili adımları uygulayacaksınız. Son olarak, üretim ortamına dağıtılacak sürümü onaylarsı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 yayınlama 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 ile Go, Python, Java, Node.js, .NET ve Ruby dahil olmak üzere herhangi bir dilde yazılmış ölçeklenebilir kapsayıcı uygulamaları tamamen yönetilen bir platformda dağıtabilirsiniz.
Skaffold nedir?
Skaffold, Kubernetes'e özgü uygulamalar için sürekli geliştirmeyi sağlayan bir komut satırı aracıdır. Cloud Deploy, oluşturma ve dağıtma 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 kapsayıcı resmi 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ına aşina olmanız gerekir.
2. Kurulum ve Gereksinimler
Cloud projesi oluşturma
- Google Cloud Console'da oturum açın ve 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ının görünen adıdır. Google API'leri tarafından kullanılmayan bir karakter dizesidir. Dilediğiniz zaman bunu güncelleyebilirsiniz.
- Proje kimliği, tüm Google Cloud projelerinde benzersizdir ve değiştirilemez (ayarlandıktan sonra değiştirilemez). Cloud Console, benzersiz bir dize otomatik olarak oluşturur. Bu dizenin ne olduğu genellikle önemli değildir. Çoğu kod laboratuvarında proje kimliğine (genellikle
PROJECT_ID
olarak tanımlanır) referans vermeniz gerekir. Oluşturulan kimliği beğenmezseniz rastgele başka bir kimlik oluşturabilirsiniz. Alternatif olarak, kendi anahtarınızı deneyerek kullanılabilir olup olmadığını görebilirsiniz. Bu adımdan sonra değiştirilemez ve proje boyunca geçerli kalır. - Bazı API'lerin kullandığı üçüncü bir değer (Proje Numarası) olduğunu belirtmek isteriz. Bu üç değer hakkında daha fazla bilgiyi dokümanlar bölümünde bulabilirsiniz.
- Ardından, Cloud kaynaklarını/API'lerini kullanmak için Cloud Console'da faturalandırmayı etkinleştirmeniz gerekir. Bu codelab'i çalıştırmak çok pahalı olmayacaktır. Bu eğitimden sonra faturalandırılmamak için kaynakları kapatmak üzere oluşturduğunuz kaynakları veya projenin tamamını silebilirsiniz. Google Cloud'un yeni kullanıcıları 300 ABD doları değerindeki ücretsiz deneme programına uygundur.
Ortam Kurulumu
Arama çubuğunun sağındaki simgeyi tıklayarak Cloud Shell'i etkinleştirin.
Cloud Shell'de, proje ortam değişkenlerini ayarlamak için 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ştirme:
gcloud services enable \
run.googleapis.com \
cloudbuild.googleapis.com \
clouddeploy.googleapis.com \
artifactregistry.googleapis.com
Uygulama kapsayıcı 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üzeni 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
Bir kapsayıcı görüntüsü oluşturma 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şturma:
gcloud deploy apply \
--file=clouddeploy.yaml \
--region=${REGION} \
--project=${PROJECT_ID}
Oluşturulan ardışık düzeni Cloud Deploy'da inceleyin.
5. Kapsayıcı görüntüsünü derleyin ve sürüm oluşturun
Cloud Build hizmet hesabına Cloud Deploy operatörü 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
Kapsayıcı resmi ve Cloud Deploy sürümü 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}
Oluşturulan sürümü Cloud Deploy'da inceleyin. Geliştirme ortamına dağıtımın tamamlanmasını bekleyin.
6. Sürümü KG ve PROD ortamlarına yükseltme
Cloud Console veya Cloud Shell'i kullanarak sürümü bir sonraki hedefe(qa-env) tanıtın.
Sürümün tanıtımını Cloud Shell ile yapın. Sürümün tanıtımını yapmak 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
QA ortamına dağıtım işleminin tamamlanmasını bekleyin. Sürümün bir sonraki hedefe(prod-env) tanıtılması.
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 sürümü üretim dağıtımı için onaylayın.
Cloud Deploy ardışık düzen durumunu ve mevcut DORA metriklerini ("dağıtım sayısı", "dağıtım sıklığı", "dağıtım hatası oranı") inceleyin.
Metrik | Açıklama |
Dağıtım sayısı | Yayın ardışık düzeninizdeki nihai hedefe yapılan başarılı ve başarısız dağıtımların toplam sayısı. |
Dağıtım sıklığı | Yayın ardışık düzeninin, yayın ardışık düzeninizdeki nihai hedefe ne sıklıkta dağıtıldığı.DevOps Research and Assessment (DORA) programı tarafından tanımlanan dört temel metrikten biri. |
Dağıtım başarısızlığı oranı | Yayın ardışık düzeninizdeki nihai hedefe yönelik başarısız kullanımların yüzdesi. |
Cloud Run'da dağıtılan uygulamaları inceleme:
7. Tebrikler!
Tebrikler, kod laboratuvarını tamamladınız.
Ele aldığımız 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ü tanıtma
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 saklayıp kaynakları tek tek silin.
Projeyi silme
Faturalandırmanın önüne geçmenin en kolay yolu, eğitim için oluşturduğunuz projeyi silmektir.