Cloud Deploy ile Cloud Run Uygulaması Dağıtma

1. Genel Bakış

Bu laboratuvarda, Cloud Deploy'u kullanarak Cloud Run'a bir .Net uygulaması dağıtacaksınız. Dockerfile kullanmadan Cloud Build ile bir kapsayıcı görüntüsü oluşturacaksınız. Cloud Deploy ile üç hedef ortam içeren bir ardışık düzen oluşturacak ve sürümü ortamlarda yükseltme adımlarını uygulayacaksınız. Son olarak, sürümün üretim ortamına dağıtılmasını onaylarsınız.

916a54f51af5ee54.png

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 işlem hatları oluşturabilirsiniz.

Cloud Run nedir?

Cloud Run ile, herhangi bir dilde (Go, Python, Java, Node.js, .NET ve Ruby dahil) yazılmış ölçeklenebilir kapsayıcılı uygulamaları tamamen yönetilen bir platformda dağıtabilirsiniz.

Skaffold nedir?

Skaffold, Kubernetes'e özgü uygulamalar için sürekli geliştirme 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 şunları yapmayı öğreneceksiniz:

  • Cloud Deploy ardışık düzeni oluşturma
  • Dockerfile kullanmadan Cloud Build ile .Net uygulaması için kapsayıcı görüntüsü oluşturma
  • Cloud Deploy ile uygulamayı Cloud Run'a dağıtma
  • Cloud Deploy sürümlerini yükseltme

Ön koşullar

  • Bu laboratuvarda Cloud Console ve kabuk ortamları hakkında bilgi sahibi olduğunuz varsayılır.

2. Kurulum ve Gereksinimler

Cloud projesi kurulumu

  1. 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.

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

  • 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. Dilediğiniz zaman bunu güncelleyebilirsiniz.
  • Proje kimliği, tüm Google Cloud projelerinde benzersizdir ve sabittir (ayarlandıktan sonra değiştirilemez). Cloud Console, benzersiz bir dizeyi otomatik olarak oluşturur. Genellikle bu dizenin ne olduğuyla ilgilenmezsiniz. Çoğu codelab'de proje kimliğine (genellikle PROJECT_ID olarak tanımlanır) başvurmanız gerekir. Oluşturulan kimliği beğenmezseniz başka bir rastgele kimlik oluşturabilirsiniz. Dilerseniz kendi adınızı deneyerek kullanılabilir olup olmadığını kontrol edebilirsiniz. Bu adımdan sonra değiştirilemez ve proje süresince geçerli kalır.
  • Bazı API'lerin kullandığı üçüncü bir değer olan Proje Numarası da vardır. Bu üç değer hakkında daha fazla bilgiyi belgelerde bulabilirsiniz.
  1. Ardından, Cloud kaynaklarını/API'lerini kullanmak için Cloud Console'da faturalandırmayı etkinleştirmeniz gerekir. Bu codelab'i tamamlamak neredeyse hiç maliyetli değildir. Bu eğitimin ötesinde faturalandırma ücreti alınmaması 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ğerinde ücretsiz deneme programından yararlanabilir.

Ortam Kurulumu

Arama çubuğunun sağındaki simgeyi tıklayarak Cloud Shell'i etkinleştirin.

eb0157a992f16fa3.png

Proje ortam değişkenlerini ayarlamak için Cloud Shell'de 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 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

29c2533441779de0.png

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ü 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ü oluşturma 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ü oluşturma:

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) yükseltin.

Cloud Shell ile sürümü yükseltin, sürümü yükseltmek 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 kontrol ortamına dağıtım tamamlanana kadar bekleyin. Yayın, bir sonraki hedefe(üretim ortamı) yükseltilir.

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ün üretim dağıtımı için onaylayın.

4c838b60770e9691.png

Cloud Deploy işlem hattı durumunu ve kullanılabilir 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ı

Teslimat işlem hattınızda nihai hedefe yapılan 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, teslimat ardışık düzeninizdeki nihai hedefe ne sıklıkta dağıtım yaptığı.DevOps Research and Assessment (DORA) programı tarafından tanımlanan dört temel metriğin biridir.

Dağıtım başarısızlığı oranı

Teslimat işlem hattınızda nihai hedefe yönelik başarısız dağıtımların yüzdesi.

Cloud Run'da dağıtılan uygulamaları inceleyin:

d6372b5350f10875.png

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ü tanıtma

Temizleme

Bu eğitimde kullanılan kaynaklar için Google Cloud hesabınızın ücretlendirilmesini önlemek amacıyla kaynakları içeren projeyi silin veya projeyi koruyup tek tek kaynakları silin.

Projeyi silme

Faturalandırılmanın önüne geçmenin en kolay yolu, eğitim için oluşturduğunuz projeyi silmektir.

8. Sırada ne var?