1. Hedefler
Skaffold, uygulamanızı oluşturma, yayınlama ve dağıtma iş akışını yöneten bir araçtır. Yerel bir geliştirme çalışma alanını kolayca yapılandırmak, dahili geliştirme döngüsünü kolaylaştırmak ve Kubernetes manifestlerinizi yönetmenize yardımcı olmak için Kustomize ve Helm gibi diğer araçlarla entegrasyon sağlamak üzere Skaffold'u kullanabilirsiniz.
Bu eğitimde, Skaffold'un bazı temel kavramlarını inceleyip iç geliştirme döngüsünü otomatikleştirmek için kullanır ve ardından bir uygulama dağıtırsınız.
Aşağıdakileri yapacaksınız:
- Skaffold'ı yerel gelişim için yapılandırın ve etkinleştirin
- Basit bir Golang uygulaması oluşturma ve çalıştırma
- Skaffold ile yerel uygulama dağıtımını yönetme
- Manifestleri oluşturma ve uygulamanızı dağıtma
2. Başlamadan önce
Çalışma alanınızı hazırlama
- Aşağıdaki URL'yi ziyaret ederek Cloud Shell düzenleyicisini açın:
https://shell.cloud.google.com
Üçüncü taraf çerezlerine izin verin. "Site çalışmıyor"u ve ardından "Çerezlere izin ver"i tıklayın.
- Henüz yapmadıysanız terminal penceresinde aşağıdaki komutla uygulama kaynağını klonlayın:
git clone https://github.com/GoogleCloudPlatform/software-delivery-workshop.git
- Klonlanan depo dizinine geçin:
cd software-delivery-workshop/labs/understanding-skaffold/getting-started
- Aşağıdaki komutu çalıştırarak Cloud Shell çalışma alanınızı mevcut dizine ayarlayın:
cloudshell workspace .
Projenizi hazırlama
- Aşağıdaki komutu çalıştırarak Google Cloud projenizin doğru şekilde ayarlandığından emin olun:
gcloud config set project {{project-id}}
3. Skaffold'u kullanmaya başlama
- Üst düzey Skaffold yapılandırma dosyasını (
skaffold.yaml
) oluşturmak için aşağıdaki komutu çalıştırın:
cat <<EOF > skaffold.yaml
apiVersion: skaffold/v2beta21
kind: Config
metadata:
name: getting-started-kustomize
build:
tagPolicy:
gitCommit:
ignoreChanges: true
artifacts:
- image: skaffold-kustomize
context: app
docker:
dockerfile: Dockerfile
deploy:
kustomize:
paths:
- overlays/dev
profiles:
- name: staging
deploy:
kustomize:
paths:
- overlays/staging
- name: prod
deploy:
kustomize:
paths:
- overlays/prod
EOF
- IDE bölmesinde
skaffold.yaml
dosyasını açın. Bu, Skaffold ardışık düzenini tanımlayan üst düzey yapılandırma dosyasıdır.
Kubernetes benzeri YAML biçimine ve YAML'de aşağıdaki bölümlere dikkat edin:
build
deploy
profiles
Bu bölümlerde, uygulamanın nasıl derlenmesi ve dağıtılması gerektiği ve her dağıtım hedefi için profiller tanımlanır.
Skaffold aşamalarının tam listesi hakkında daha fazla bilgiyi Skaffold Boru Hattı Aşamalarıyla ilgili dokümanda bulabilirsiniz.
4. Derleme
build
bölümü, uygulamanın nasıl derlenmesi gerektiğini tanımlayan yapılandırmayı içerir. Bu durumda, git
etiketlerinin nasıl ele alınması gerektiğine dair yapılandırmayı ve uygulamayı oluşturan kapsayıcı görüntülerini tanımlayan bir artifacts
bölümünü görebilirsiniz.
Bunun yanı sıra, bu bölümde resimleri oluşturmak için kullanılacak Dockerfile
referansını da görebilirsiniz. Skaffold ayrıca Jib
, Maven
, Gradle
, bulutta yerel Buildpacks
, Bazel
ve özel komut dosyaları gibi diğer derleme araçlarını da destekler. Bu yapılandırma hakkında daha fazla bilgiyi Skaffold Build belgelerinde bulabilirsiniz.
5. Dağıt
deploy
bölümü, uygulamanın nasıl dağıtılması gerektiğini tanımlayan yapılandırmayı içerir. Bu örnekte, Skaffold'u Kustomize
aracını kullanacak şekilde yapılandıran varsayılan bir dağıtım örneği görebilirsiniz.
Kustomize
aracı, bir dizi ortak bileşen YAML dosyasını (base
dizininde) genellikle bir veya daha fazla dağıtım hedefine (genellikle dev, test, staging ve production veya benzeri) karşılık gelen bir veya daha fazla "yer paylaşımıyla" birleştirerek Kubernetes manifestleri oluşturma işlevi sağlar.
Bu örnekte, dev, staging ve prod olmak üzere üç hedef için iki yer paylaşımı görebilirsiniz. dev yer paylaşımı yerel geliştirme sırasında, staging ve prod yer paylaşımları ise Skaffold kullanılarak dağıtım sırasında kullanılır.
6. Profiller
profiles
bölümünde, farklı bağlamlar için derleme, test ve dağıtım yapılandırmalarını tanımlayan yapılandırma yer alır. Farklı bağlamlar genellikle uygulama dağıtım ardışık düzeninizdeki farklı ortamlardır (bu örnekte staging
veya prod
gibi). Bu sayede, içeriklerinin farklı hedef ortamlar için farklı olması gereken manifestleri, ortak metin yapılandırmasını tekrarlamadan kolayca yönetebilirsiniz.
profiles
bölümündeki yapılandırma, ana yapılandırmadaki öğeleri (ör. build
, test
veya deploy
bölümleri) değiştirebilir ya da bu öğelere yama uygulayabilir.
Buna örnek olarak overlays > prod > deployment.yaml
dosyasını açın. Uygulamanın replika sayısının, temel yapılandırmayı geçersiz kılarak burada üç olarak yapılandırıldığını unutmayın.
Uygulama kaynak kodunda gezinme.
- IDE bölmesinde aşağıdaki dosyayı
app > main.go
açın. Bu, her saniyestdout
adresine bir dize yazan basit bir Golang uygulamasıdır. - Uygulamanın, çalıştığı Kubernetes kapsayıcısının adını da döndürdüğünü unutmayın.
Dockerfile'i görüntüleme
- IDE bölmesinde
app > Dockerfile
dosyasını açın. Bu dosya,main.go
dosyası için uygulama kapsayıcı görüntüsünü oluşturmaya yönelik bir dizi talimat içerir ve üst düzeyskaffold.yaml
dosyasında referans verilir.
7. Skaffold ile Geliştirme
Kubernetes ortamınızı yapılandırma
- Yerel Kubernetes kümenizin çalıştığından ve yapılandırıldığından emin olmak için aşağıdaki komutu çalıştırın:
minikube start
Bu işlem birkaç dakika sürebilir. Küme başarıyla başlatıldıysa aşağıdaki çıkışı görürsünüz:
Done! kubectl is now configured to use "minikube" cluster and "default" namespace by default
- Aşağıdaki komutu çalıştırarak
dev
,staging
veprod
için Kubernetes ad alanları oluşturun:
kubectl apply -f namespaces.yaml
Aşağıdaki çıkışı göreceksiniz:
namespace/dev created namespace/staging created namespace/prod created
Yerel geliştirme için Skaffold'u kullanma
- Uygulamayı derlemek ve Cloud Shell'de çalışan yerel bir Kubernetes kümesine dağıtmak için aşağıdaki komutu çalıştırın:
skaffold dev
Uygulama kapsayıcı derleme işleminin çalıştığını görürsünüz. Bu işlem bir dakika sürebilir. Ardından, uygulama çıkışının her saniye tekrarlandığını görürsünüz:
[skaffold-kustomize] Hello world from pod skaffold-kustomize-dev-xxxxxxxxx-xxxxx
Pod adının tam olarak yukarıda verilen genel çıktıdan farklı olacağını unutmayın.
Uygulamada değişiklik yapma
Uygulama yerel Kubernetes kümenizde çalıştığına göre kodda değişiklik yapabilirsiniz. Skaffold, uygulamayı otomatik olarak yeniden derleyip kümeye yeniden dağıtır.
- IDE bölmesinde
app > main.go
dosyasını açın ve çıkış dizesini değiştirin:
"Hello world from pod %s!\n"
karşılaştırma yapılacak öğe:
"Hello Skaffold world from pod %s!\n"
Değişikliği yaptığınızda Skaffold'un görüntüyü yeniden oluşturduğunu ve kümeye yeniden dağıttığını görürsünüz. Terminal penceresinde, çıktıdaki değişikliği görebilirsiniz.
- Ardından, IDE bölmesinde "app > main.go" dosyasında da şu satırı değiştirin:
time.Sleep(time.Second * 1)
to
time.Sleep(time.Second * 10)
Uygulamanın yeniden oluşturulduğunu ve dağıtıldığını, çıkış satırının 10 saniyede bir gösterildiğini görürsünüz.
Kubernetes yapılandırmasında değişiklik yapma
Ardından Kubernetes yapılandırmasında bir değişiklik yaparsınız ve Skaffold bir kez daha otomatik olarak yeniden dağıtır.
- IDE'de
base > deployment.yaml
dosyasını açın ve satırı değiştirin:
replicas: 1
to
replicas: 2
Uygulama yeniden dağıtıldıktan sonra, her biri farklı bir ada sahip olacak şekilde iki kapsülün çalıştığını görürsünüz.
- Şimdi,
base > deployment.yaml
dosyasındaki aynı satırı tekrar şu şekilde değiştirin:
replicas: 1
Kapsüllerden biri hizmetten kaldırılır ve yalnızca bir kapsül kalır.
- Son olarak, Skaffold yerel geliştirmesini durdurmak için terminal penceresinde
Ctrl-C
tuşuna basın.
Yayından çıkma
Ardından, bir sürüm resmi oluşturarak ve bunu bir kümeye dağıtarak bir sürüm oluşturursunuz.
- Sürümü derlemek için aşağıdaki komutu çalıştırın:
skaffold build --file-output artifacts.json
Bu komut, nihai resmi oluşturur (gerekirse) ve sürüm ayrıntılarını artifacts.json
dosyasına yazar.
Kümelerinize dağıtmak için Cloud Deploy gibi bir araç kullanmak istiyorsanız bu dosya, sürüm bilgilerini içerir. Bu, eserlerin canlı yayına geçişte sabit olduğu anlamına gelir.
artifacts.json
dosyasının içeriğini görüntülemek için aşağıdaki komutu çalıştırın:
cat artifacts.json | jq
Dosyanın, nihai dağıtımda kullanılacak görüntünün referansını içerdiğini unutmayın.
Hazırlık için dağıtma
- Sürüm dağıtmak için
staging
profilini kullanarak aşağıdaki komutu çalıştırın:
skaffold deploy --profile staging --build-artifacts artifacts.json --tail
Dağıtım tamamlandığında iki kapsülün çıkışını şuna benzer şekilde görürsünüz:
[skaffold-kustomize] Hello world from pod skaffold-kustomize-staging-xxxxxxxxxx-xxxxx!
- Skaffold çıkışını durdurmak için terminal penceresinde Ctrl-C tuşlarına basın.
- Uygulamanızı kümede çalışır durumda ve çalışır durumda gözlemlemek için aşağıdaki komutu çalıştırın:
kubectl get all --namespace staging
Uygulamanın staging
profili, dağıtımda iki kopya olması gerektiğini belirttiğinden iki farklı kapsül adı görürsünüz.
Üretime dağıtma
- Şimdi
prod
profilini kullanarak sürümü dağıtmak için aşağıdaki komutu çalıştırın:
skaffold deploy --profile prod --build-artifacts artifacts.json --tail
Dağıtım tamamlandıktan sonra, aşağıdakine benzer üç kapsülden çıkış elde edersiniz:
[skaffold-kustomize] Hello world from pod skaffold-kustomize-prod-xxxxxxxxxx-xxxxx!
- Skaffold çıkışını durdurmak için terminal penceresinde Ctrl-C tuşlarına basın.
Uygulamanın prod
profili, dağıtımda üç kopya olması gerektiğini belirttiğinden üç farklı kapsül adı görürsünüz.
- Uygulamanızın kümede çalışır durumda olduğunu gözlemlemek için aşağıdaki komutu çalıştırın:
kubectl get all --namespace prod
Üretim dağıtımını gösteren, aşağıdakine benzer satırlar içeren bir çıkış görmeniz gerekir:
NAME READY UP-TO-DATE AVAILABLE AGE deployment.apps/skaffold-kustomize-prod 3/3 3 3 16m
Ayrıca üç uygulama kapsülünün çalıştığını görürsünüz.
NAME READY STATUS RESTARTS AGE pod/skaffold-kustomize-prod-xxxxxxxxxx-xxxxx 1/1 Running 0 10m pod/skaffold-kustomize-prod-xxxxxxxxxx-xxxxx 1/1 Running 0 10m pod/skaffold-kustomize-prod-xxxxxxxxxx-xxxxx 1/1 Running 0 10m
8. Tebrikler!
Tebrikler! Understanding Skaffold
laboratuvarını tamamladınız ve yerel geliştirme ve uygulama dağıtımı için Skaffold'ı nasıl yapılandırıp kullanacağınızı öğrendiniz.
Sıradaki adım:
Skaffold hakkında daha fazla bilgi edinmeye devam edin:
Temizleme
- Yerel kümeyi kapatmak için aşağıdaki komutu çalıştırın:
minikube delete