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

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

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

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

eb0157a992f16fa3.png

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

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

4c838b60770e9691.png

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:

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

8. Sırada ne var?