1. Genel Bakış
Bu laboratuvarda, Cloud Build ile GKE için sürekli teslim ardışık düzeni ayarlamayı öğreneceksiniz. Bu laboratuvarda, farklı git etkinlikleri için Cloud Build işlerinin nasıl tetikleneceği ve GKE'deki otomatik canary sürümleri için basit bir kalıp açıklanmaktadır.
Aşağıdaki adımları tamamlayacaksınız:
- GKE uygulamasını oluşturma
- Git dalları için dağıtımları otomatikleştirme
- Git ana dal için dağıtımları otomatikleştirme
- Git etiketleri için dağıtımları otomatikleştirme
2. Başlamadan önce
Bu referans kılavuzu için bir Google Cloud projesine ihtiyacınız vardır. Yeni bir proje oluşturabilir veya daha önce oluşturduğunuz bir projeyi seçebilirsiniz:
- Bir Google Cloud projesi seçin veya oluşturun.
- Projeniz için faturalandırmayı etkinleştirin.
3. Ortamınız hazırlanıyor
- Bu eğitim boyunca kullanılacak ortam değişkenlerini oluşturun:
export PROJECT_ID=$(gcloud config get-value project) export PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format='value(projectNumber)') export ZONE=us-central1-b export CLUSTER=gke-progression-cluster export APP_NAME=myapp
- Aşağıdaki API'leri etkinleştirin:
- Resource Manager
- GKE
- Cloud Source Repositories
- Cloud Build
- Container Registry
gcloud services enable \ cloudresourcemanager.googleapis.com \ container.googleapis.com \ sourcerepo.googleapis.com \ cloudbuild.googleapis.com \ containerregistry.googleapis.com \ --async
- Örnek kaynağı klonlayın ve laboratuvar dizinine geçin:
git clone https://github.com/GoogleCloudPlatform/software-delivery-workshop.git gke-progression cd gke-progression/labs/gke-progression rm -rf ../../.git
- Örnek depodaki yer tutucu değerleri
PROJECT_ID
değerinizle değiştirin:Bu adımda, geçerli ortamınıza özel çeşitli yapılandırma dosyalarının örneklerini oluşturacaksınız.Güncellenen şablonların bir örneğini incelemek için aşağıdaki komutu çalıştırın.
. Aşağıdaki komutu çalıştırarak değişken değişikliği gerçekleştirin.cat k8s/deployments/dev/frontend-dev.yaml.tmpl
. Değiştirme işleminden sonra dosyanın örneğini incelemek için aşağıdaki komutu çalıştırın.for template in $(find . -name '*.tmpl'); do envsubst '${PROJECT_ID} ${ZONE} ${CLUSTER} ${APP_NAME}' < ${template} > ${template%.*}; done
cat k8s/deployments/dev/frontend-dev.yaml
- Daha önce Cloud Shell'de Git'i kullanmadıysanız kullanmak istediğiniz
user.name
veuser.email
değerlerini ayarlayın:git config --global user.email "YOUR_EMAIL_ADDRESS" git config --global user.name "YOUR_USERNAME"
- Örnek depodaki kodu Cloud Source Repositories'de depolayın:
gcloud source repos create gke-progression git init git config credential.helper gcloud.sh git remote add gcp https://source.developers.google.com/p/$PROJECT_ID/r/gke-progression git branch -m main git add . && git commit -m "initial commit" git push gcp main
- GKE kümenizi oluşturun.
gcloud container clusters create ${CLUSTER} \ --project=${PROJECT_ID} \ --zone=${ZONE}
- Kümenize Cloud Build hakları verin.Cloud Build, uygulamayı GKE Kümenize dağıtacaktır ve bunun için haklara ihtiyacı olacaktır.
gcloud projects add-iam-policy-binding ${PROJECT_ID} \ --member=serviceAccount:${PROJECT_NUMBER}@cloudbuild.gserviceaccount.com \ --role=roles/container.developer
Ortamınız hazır.
4. GKE uygulamanızı oluşturma
Bu bölümde, bu eğitimde kullandığınız ilk üretim uygulamasını derleyip dağıtacaksınız.
- Uygulamayı Cloud Build ile derleyin:
gcloud builds submit --tag gcr.io/$PROJECT_ID/$APP_NAME:1.0.0 src/
- Canary ve Üretim ortamlarına manuel olarak dağıtım yapma:
kubectl apply
komutlarını kullanarak üretim ve canary dağıtımları ile hizmetlerini oluşturun.
. Burada dağıtılan hizmet, trafiği hem canary hem de üretim dağıtımlarına yönlendirir.kubectl create ns production kubectl apply -f k8s/deployments/prod -n production kubectl apply -f k8s/deployments/canary -n production kubectl apply -f k8s/services -n production
- Çalışan kapsül sayısını gözden geçirin. 3'ü üretim trafiği, biri canary sürümleri için olmak üzere ön uç için çalışan dört kapsülünüz olduğunu doğrulayın. Bu, canary sürümünüzdeki değişikliklerin yalnızca 4 kullanıcıdan 1'ini (%25) etkileyeceği anlamına gelir.
kubectl get pods -n production -l app=$APP_NAME -l role=frontend
- Üretim hizmetleri için harici IP adresini alın. ziyaret edin.
Yük dengeleyici, IP adresini döndürdükten sonra sıradaki adıma geçinkubectl get service $APP_NAME -n production
- Harici IP'yi daha sonra kullanmak üzere depolayın.
export PRODUCTION_IP=$(kubectl get -o jsonpath="{.status.loadBalancer.ingress[0].ip}" --namespace=production services $APP_NAME)
- Uygulamayı inceleyin Hizmetin sürüm çıkışını kontrol edin. Hello World v1.0 yazmalıdır.
curl http://$PRODUCTION_IP
Tebrikler! Örnek uygulamayı dağıttınız. Ardından, değişikliklerinizin sürekli olarak dağıtılması için tetikleyici oluşturacaksınız.
5. Git dalları için dağıtımları otomatikleştirme
Bu bölümde, main
dışında herhangi bir dal için Cloudbuild işi yürütecek bir tetikleyici ayarlayacaksınız. Burada kullanılan Cloud Build dosyası mevcut veya yeni dallar için otomatik olarak ad alanı ve dağıtım oluşturarak geliştiricilerin ana dala entegrasyondan önce kodlarını önizlemelerine olanak tanır.
- Tetikleyiciyi ayarlayın:Bu tetikleyicinin temel bileşeni,
main
ile eşleştirmek içinbranchName
parametresinin, doğru olarak ayarlanmış vebranchName
kalıbınımain
olmayan öğelerle eşleşecek şekilde değiştireninvertRegex
parametresinin kullanılmasıdır. Size referans olması içinbuild/branch-trigger.json
dilinde aşağıdaki satırları bulabilirsiniz."branchName": "main", "invertRegex": true
. Ayrıca, bu tetikleyiciyle kullanılan Cloud Build dosyasının son birkaç satırında, işi tetikleyen dalın adını taşıyan bir ad alanı oluşturulur. Ardından, uygulama ve hizmet yeni ad alanına dağıtılır. Size referans olması içinbuild/branch-cloudbuild.yaml
kubectl get ns ${BRANCH_NAME} || kubectl create ns ${BRANCH_NAME} kubectl apply --namespace ${BRANCH_NAME} --recursive -f k8s/deployments/dev kubectl apply --namespace ${BRANCH_NAME} --recursive -f k8s/services
dilinde aşağıdaki satırları bulabilirsiniz Artık kullanılan mekanizmaları anladığınıza göre aşağıdaki gcloud komutuyla tetikleyiciyi oluşturun.gcloud beta builds triggers create cloud-source-repositories \ --trigger-config build/branch-trigger.json
- Tetikleyiciyi incelemek için Console'da Cloud Build Tetikleyicileri sayfasına gidin.Tetikleyiciler'e git
- Yeni bir dal oluşturun:
git checkout -b new-feature-1
- Kodu, v1.1Edit
src/app.py
değerini belirtecek şekilde değiştirin ve yanıtı 1.0 yerine 1.1 olarak değiştirin@app.route('/') def hello_world(): return 'Hello World v1.1'
- Değişikliği kaydedin ve uzak depoya aktarın:
git add . && git commit -m "updated" && git push gcp new-feature-1
- Devam eden derlemeyi incelemek için Console'daki Cloud Derleme Geçmişi sayfasına gidin.Derlemelere gidin. Derleme tamamlandığında, sonraki adıma geçin
- Yeni dağıtılan şube hizmetinin harici IP adresini alın. ziyaret edin.
Yük dengeleyici, IP adresini döndürdükten sonra sıradaki adıma geçinkubectl get service $APP_NAME -n new-feature-1
- Harici IP'yi daha sonra kullanmak üzere depolayın.
export BRANCH_IP=$(kubectl get -o jsonpath="{.status.loadBalancer.ingress[0].ip}" --namespace=new-feature-1 services $APP_NAME)
- Uygulamanın sürüm çıkışını kontrol edin. Hello World v1.0 yazmalıdır.
curl http://$BRANCH_IP
6. Git ana dal için dağıtımları otomatikleştirme
Kod, üretim sürümüne yayınlanmadan önce, tüm trafiği yeni kod tabanına taşımadan önce canlı trafiğin küçük bir alt grubuna kod yayınlamak yaygın bir uygulamadır.
Bu bölümde, kod ana dala kaydedildiğinde etkinleştirilen bir tetikleyici uygularsınız. Tetikleyici, tüm canlı trafiğin% 25'ini yeni düzeltmeye alan canary dağıtımını dağıtır.
- Ana dal için tetikleyici oluşturun:
gcloud beta builds triggers create cloud-source-repositories \ --trigger-config build/main-trigger.json
- Yeni tetikleyiciyi incelemek için Console'da Cloud Build Tetikleyicileri sayfasına gidin.Tetikleyiciler'e gidin.
- Dalı ana satırla birleştirin ve uzak depoya aktarın:
git checkout main git merge new-feature-1 git push gcp main
- Devam eden derlemeyi incelemek için Console'daki Cloud Derleme Geçmişi sayfasına gidin.Derlemelere gidin. Derleme tamamlandığında, sonraki adıma geçin
- Sunucudan gelen birden çok yanıtı inceleyin Aşağıdaki komutu çalıştırın. Yanıtların yaklaşık% 25'inin Hello World v1.1 sürümünün yeni yanıtını gösterdiğini unutmayın.
Devam etmeye hazır olduğunuzda döngüden çıkmak içinwhile true; do curl -w "\n" http://$PRODUCTION_IP; sleep 1; done
Ctrl+c
düğmesine basın.
7. Git etiketleri için dağıtımları otomatikleştirme
Canary dağıtımı, küçük bir trafik alt kümesiyle doğrulandıktan sonra, dağıtımı canlı trafiğin geri kalanına yayınlarsınız.
Bu bölümde, depoda bir etiket oluşturduğunuzda etkinleştirilen bir tetikleyici ayarlayacaksınız. Tetikleyici, resmi uygun etiketle etiketler, ardından güncellemeleri üretime dağıtır ve trafiğin% 100'ünün etiketlenen resme erişmesini sağlar.
- Etiket tetikleyicisini ayarlayın:
gcloud beta builds triggers create cloud-source-repositories \ --trigger-config build/tag-trigger.json
- Yeni tetikleyiciyi incelemek için Console'da Cloud Build Tetikleyicileri sayfasına gidin.Tetikleyiciler'e gidin.
- Yeni bir etiket oluşturun ve uzak depoya aktarın:
git tag 1.1 git push gcp 1.1
- Devam eden derlemeyi incelemek için Console'daki Cloud Build Geçmişi sayfasına gidin.Derlemeler'e git
- Server'dan gelen birden fazla yanıtı inceleyin Aşağıdaki komutu çalıştırın. Yanıtların% 100'ünün Hello World v1.1'in yeni yanıtını gösterdiğini unutmayın. Yeni kapsüller dağıtılıp GKE'de durum denetimi yapılırken bu işlem biraz zaman alabilir
Devam etmeye hazır olduğunuzda döngüden çıkmak içinwhile true; do curl -w "\n" http://$PRODUCTION_IP; sleep 1; done
Ctrl+c
düğmesine basın.Tebrikler! Uygulamalarınızı GKE'ye dağıtacak dallar ve etiketler için Cloud Build'de CI/CD tetikleyicileri oluşturdunuz.
8. Temizleme
Projeyi silme
- Cloud Console'da Kaynakları yönetin sayfasına gidin.
- Proje listesinden silmek istediğiniz projeyi seçin ve ardından Sil'i tıklayın.
- İletişim kutusuna proje kimliğini yazın ve projeyi silmek için Kapat'ı tıklayın.