Skaffold'ı Anlama

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

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

7b702066a2135a3d.png

3394f82132eb4fd4.png

  1. 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
  1. Klonlanan depo dizinine geçin:
cd software-delivery-workshop/labs/understanding-skaffold/getting-started
  1. Aşağıdaki komutu çalıştırarak Cloud Shell çalışma alanınızı geçerli dizine ayarlayın:
cloudshell workspace .

Projenizi hazırlama

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

  1. En üst düzey Skaffold yapılandırma dosyası olan skaffold.yaml dosyası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
  1. IDE bölmesinde dosyayı skaffold.yaml açı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:

  • build
  • deploy
  • profiles

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.

  1. IDE bölmesinde aşağıdaki dosyayı app > main.go açın. Bu, her saniye stdout dizesini yazan basit bir Go uygulamasıdır.
  2. Uygulamanın, çalıştığı Kubernetes pod'unun adını da çıkardığını unutmayın.

Dockerfile'ı görüntüleme

  1. IDE bölmesinde dosyayı app > Dockerfile açın. Bu dosya, main.go dosyası için uygulama kapsayıcı görüntüsünü oluşturmaya yönelik bir dizi yönerge içerir ve üst düzey skaffold.yaml dosyasında referans verilir.

7. Skaffold ile geliştirme

Kubernetes ortamınızı yapılandırma

  1. 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
  1. dev, staging ve prod iç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

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

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

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

  1. IDE'de base > deployment.yaml dosyası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.

  1. Şimdi, base > deployment.yaml dosyası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.

  1. Son olarak, Skaffold yerel geliştirmeyi durdurmak için terminal penceresinde Ctrl-C tuş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.

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

  1. 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, son dağıtımda kullanılacak resme referans içerdiğini unutmayın.

Hazırlık sürümüne dağıtma

  1. staging profilini 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!
  1. Skaffold çıkışını durdurmak için terminal penceresinde Ctrl-C tuşlarına basın.
  2. 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

  1. Şimdi de 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ığında aşağıdaki gibi üç pod'dan çıkış görmeniz gerekir:

[skaffold-kustomize] Hello world from pod skaffold-kustomize-prod-xxxxxxxxxx-xxxxx!
  1. 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.

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

  1. Yerel kümeyi kapatmak için aşağıdaki komutu çalıştırın:
minikube delete