1. Hedefler
Skaffold, uygulamanızı oluşturma, gönderme ve dağıtma iş akışını yöneten bir araçtır. Yerel geliştirme çalışma alanını kolayca yapılandırmak, iç geliştirme döngünüzü kolaylaştırmak ve Kubernetes manifestlerinizi yönetmenize yardımcı olması için Kustomize ve Helm gibi diğer araçlarla entegre olmak için Skaffold'u kullanabilirsiniz.
Bu eğitimde, Skaffold'un bazı temel kavramlarını inceleyecek, iç geliştirme döngünüzü otomatikleştirmek için Skaffold'u kullanacak ve ardından bir uygulama dağıtacaksınız.
Bu kurstan sonra:
- Yerel geliştirme için Skaffold'u yapılandırma ve etkinleştirme
- Basit bir Go uygulaması oluşturma ve çalıştırma
- Skaffold ile yerel uygulama dağıtımını yönetme
- Manifest 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üzenleyici'yi 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ı geçerli 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
- En üst düzey Skaffold yapılandırma dosyası olan
skaffold.yamldosyasını 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 dosyayı
skaffold.yamlaçın. Bu, Skaffold işlem hattını tanımlayan üst düzey yapılandırma dosyasıdır.
Kubernetes benzeri YAML biçimine ve YAML'deki aşağıdaki bölümlere dikkat edin:
builddeployprofiles
Bu bölümlerde, uygulamanın nasıl oluşturulup 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 Pipeline Stages dokümanında bulabilirsiniz.
4. Derleme
build bölümü, uygulamanın nasıl oluşturulması gerektiğini tanımlayan yapılandırmayı içerir. Bu durumda, git etiketlerinin nasıl işleneceğine dair yapılandırmanın yanı sıra uygulamayı oluşturan kapsayıcı görüntülerini tanımlayan bir artifacts bölümü görebilirsiniz.
Ayrıca, 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 durumda, Skaffold'u Kustomize aracını kullanacak şekilde yapılandıran varsayılan bir dağıtım örneğini görebilirsiniz.
Kustomize aracı, bir dizi ortak bileşen YAML dosyasını (base dizini altında) genellikle bir veya daha fazla dağıtım hedefiyle (genellikle dev, test, staging ve production veya benzeri) karşılık gelen bir veya daha fazla "overlay" ile birleştirerek Kubernetes manifestleri oluşturma işlevi sağlar.
Bu örnekte, üç hedef için iki yer paylaşımı (dev, staging ve prod) 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 yapılırken kullanılır.
6. Profiller
profiles bölümü, farklı bağlamlar için derleme, test ve dağıtım yapılandırmalarını tanımlayan yapılandırmayı içerir. Farklı bağlamlar genellikle uygulama dağıtım hattınızdaki farklı ortamlardır. Örneğin, bu örnekte staging veya prod. Bu sayede, içeriğinin farklı hedef ortamlar için farklı olması gereken manifestleri, standart yapılandırmayı tekrarlamadan kolayca yönetebilirsiniz.
profiles bölümündeki yapılandırma, ana yapılandırmadaki (ör. build, test veya deploy bölümleri) öğeleri değiştirebilir ya da yamalayabilir.
Buna örnek olarak overlays > prod > deployment.yaml dosyasını açın. Uygulamanın replika sayısının burada temel yapılandırmayı geçersiz kılacak şekilde üç olarak yapılandırıldığına dikkat edin.
Uygulama kaynak kodunda gezinme
- IDE bölmesinde aşağıdaki dosyayı
app > main.goaçın. Bu, her saniyestdoutdizesini yazan basit bir Go uygulamasıdır. - Uygulamanın, çalıştığı Kubernetes pod'unun adını da çıkardığını unutmayın.
Dockerfile'ı görüntüleme
- IDE bölmesinde dosyayı
app > Dockerfileaçın. Bu dosya,main.godosyası için uygulama kapsayıcı görüntüsünü oluşturmaya yönelik bir dizi yönerge içerir ve üst düzeyskaffold.yamldosyası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
dev,stagingveprodiçin Kubernetes ad alanları oluşturmak üzere aşağıdaki komutu çalıştırın:
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ı oluşturmak 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ısı derleme işleminin çalıştığını görmelisiniz. Bu işlem bir dakika sürebilir. Ardından, uygulama çıkışı her saniye tekrarlanır:
[skaffold-kustomize] Hello world from pod skaffold-kustomize-dev-xxxxxxxxx-xxxxx
Tam pod adının, yukarıda verilen genel çıkıştan farklı olacağını unutmayın.
Uygulamada değişiklik yapma
Uygulama artık yerel Kubernetes kümenizde çalıştığına göre kodda değişiklik yapabilirsiniz. Skaffold, uygulamayı otomatik olarak yeniden oluşturup kümeye yeniden dağıtır.
- IDE bölmesinde
app > main.godosyası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'ın resmi yeniden oluşturduğunu ve kümeye yeniden dağıttığını görmeniz gerekir. Çıktıdaki değişiklik terminal penceresinde görünür.
- Şimdi de IDE bölmesindeki "app > main.go" dosyasında şu satırı değiştirin:
time.Sleep(time.Second * 1)
to
time.Sleep(time.Second * 10)
Uygulamanın yeniden oluşturulup yeniden dağıtıldığını ve çıkış satırının 10 saniyede bir göründüğünü 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 yapacaksınız ve Skaffold bir kez daha otomatik olarak yeniden dağıtım yapacak.
- IDE'de
base > deployment.yamldosyasını açın ve şu 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.yamldosyasındaki aynı satırı şu şekilde değiştirin:
replicas: 1
Kapsüllerden birinin hizmetten kaldırıldığını ve yalnızca bir kapsülün kaldığını görmeniz gerekir.
- Son olarak, Skaffold yerel geliştirmeyi durdurmak için terminal penceresinde
Ctrl-Ctuşuna basın.
Sürüm oluşturma
Ardından, bir sürüm resmi oluşturup bunu bir kümeye dağıtarak sürüm oluşturacaksınız.
- Sürümü oluşturmak için aşağıdaki komutu çalıştırın:
skaffold build --file-output artifacts.json
Bu komut, son resmi oluşturur (gerekirse) ve yayın ayrıntılarını artifacts.json dosyasına çıkarır.
Cloud Deploy gibi bir aracı kullanarak kümelerinize dağıtım yapmak istiyorsanız bu dosya, yayın bilgilerini içerir. Bu, öğelerin canlı yayına giden yolda değişmez olduğu anlamına gelir.
artifacts.jsondosyası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, son dağıtımda kullanılacak resme referans içerdiğini unutmayın.
Hazırlık sürümüne dağıtma
stagingprofilini kullanarak sürümü dağıtmak için aşağıdaki komutu çalıştırın:
skaffold deploy --profile staging --build-artifacts artifacts.json --tail
Dağıtım tamamlandığında aşağıdaki gibi iki pod'dan çıkış görmeniz gerekir:
[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ın kümede çalışır durumda olduğunu gözlemlemek için aşağıdaki komutu çalıştırın:
kubectl get all --namespace staging
Uygulamanın staging profilinde dağıtımda iki kopya olması gerektiği belirtildiğinden iki farklı kapsül adı görmeniz gerekir.
Üretime dağıtma
- Şimdi de
prodprofilini 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ığında aşağıdaki gibi üç pod'dan çıkış görmeniz gerekir:
[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 profilinde dağıtımda üç kopya olması gerektiği belirtildiğinden üç farklı pod adı görmeniz gerekir.
- 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ğıdaki satırlara benzer satırların yer aldığı 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ı da görmeniz gerekir.
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 ile uygulama dağıtımı için Skaffold'u nasıl yapılandıracağınızı ve 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