Skaffold'ı Anlama

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

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

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ı mevcut 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. Ü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
  1. 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.

  1. IDE bölmesinde aşağıdaki dosyayı app > main.go açın. Bu, her saniye stdout adresine bir dize yazan basit bir Golang uygulamasıdır.
  2. 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

  1. 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ü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. Aşağıdaki komutu çalıştırarak dev, staging ve prod 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

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

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

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

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

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

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

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

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

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

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

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

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