Skaffold'ı Anlama

1. Hedefler

Skaffold, uygulamanızı derleme, aktarma ve dağıtma iş akışını yürüten bir araçtır. Skaffold'u kullanarak yerel geliştirme çalışma alanını kolayca yapılandırabilir, kendi geliştirme döngünüzü basitleştirebilir ve Kubernetes manifest'lerinizi yönetmenize yardımcı olması için Kustomize ile Helm gibi diğer araçlarla entegrasyon gerçekleştirebilirsiniz.

Bu eğitimde, Skaffold'un bazı temel kavramlarını inceleyecek, Skaffold'ı kullanarak iç geliştirme döngünüzü otomatikleştirecek ve ardından bir uygulamayı dağıtacaksınız.

Bu kurstan sonra:

  • Skaffold'ı yerel gelişim için yapılandırın ve etkinleştirin
  • Basit bir golang uygulaması derleyip çalıştırma
  • Skaffold ile yerel uygulama dağıtımını yönetin
  • Manifestleri oluşturun ve uygulamanızı dağıtın

2. Başlamadan önce

Çalışma alanınız hazırlanıyor

  1. Aşağıdaki URL'yi ziyaret ederek Cloud Shell düzenleyicisini açın:
https://shell.cloud.google.com

Üçüncü taraf çerezlerine izin ver. "Site çalışmıyor"u tıklayın ve ardından "Çerezlere İzin Ver"i seçin.

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 .

Projeniz hazırlanıyor

  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ümler, uygulamanın nasıl derlenip dağıtılacağının yanı sıra her bir dağıtım hedefine ilişkin profilleri tanımlar.

Skaffold aşamalarının tam listesi hakkında daha fazla bilgi edinmek için Skaffold Pipeline Aşamaları dokümanlarını inceleyebilirsiniz.

4. Derleme

build bölümünde, uygulamanın nasıl derlenmesi gerektiğini tanımlayan yapılandırma yer alır. 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.

Ayrıca bu bölümde, görüntüleri 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 bilgiye Skaffold Derlemesi dokümanlarından ulaşabilirsiniz.

5. Dağıt

deploy bölümünde, uygulamanın nasıl dağıtılması gerektiğini tanımlayan yapılandırma yer alır. Bu durumda, Skaffold'ı Kustomize aracını kullanacak şekilde yapılandıran bir varsayılan dağıtım örneğini görebilirsiniz.

Kustomize aracı, bir dizi ortak bileşen YAML dosyasını (base dizini altında) bir veya daha fazla "yer paylaşımı" ile birleştirerek Kubernetes manifestleri oluşturma işlevi sunar. genellikle bir veya daha fazla dağıtım hedefine karşılık gelen dağıtım hedefleridir (genellikle geliştirme, test, hazırlık ve üretim veya benzeri).

Bu örnekte üç hedef için iki yer paylaşımı görebilirsiniz: dev, hazırlık ve prod. Geliştirici yer paylaşımı, yerel geliştirme sırasında ve Skaffold kullanılarak dağıtım yaparken hazırlık ve prod yer paylaşımları 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 örnekteki 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 öğelerin (ör. build, test veya deploy bölümleri) değiştirilmesine veya yama uygulanmasına olanak tanır.

Buna örnek olarak overlays > prod > deployment.yaml dosyasını açın. Uygulamanın replika sayısının burada üç olacak şekilde yapılandırıldığına ve temel yapılandırmayı geçersiz kıldığına dikkat edin.

  1. IDE bölmesinde şu app > main.go dosyasını açın: Bu, saniyede stdout hizmetine dize yazan basit bir golang uygulamasıdır.
  2. Uygulamanın, çalıştığı Kubernetes kapsülünün adını da çıkardığına dikkat edin.

Dockerfile'ı 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 yönerge içerir ve en üst düzey skaffold.yaml dosyasında başvuruda bulunulmuştur.

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şim için Skaffold'ı 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 container'ı derleme işleminin çalıştığını görürsünüz. 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 kapsül adının yukarıda verilen genel çıkıştan 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. Ardından Skaffold, uygulamayı otomatik olarak yeniden derleyip kümeye yeniden dağıtacaktı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"

Bu değişikliği yaptığınızda Skaffold görüntüyü yeniden derleyip kümeye yeniden dağıttığını görürsünüz. Çıkıştaki değişiklik terminal penceresinde görünür.

  1. Şimdi, ayrıca "app > main.go&quot; IDE bölmesinde, şu satırı değiştirin:
time.Sleep(time.Second * 1)

-

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

Şimdi, Kubernetes yapılandırmasında bir değişiklik yapın ve Skaffold bir kez daha otomatik olarak yeniden dağıtım yapacak.

  1. IDE'de base > deployment.yaml dosyasını açın ve satırı değiştirin:
replicas: 1

-

replicas: 2

Uygulama yeniden dağıtıldıktan sonra, her birinin farklı bir adı olan 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

Yalnızca bir kapsülün kaldığı şekilde, kapsüllerden birinin hizmetten kaldırıldığını görürsünüz.

  1. Son olarak, Skaffold yerel geliştirmesini durdurmak için terminal penceresinde Ctrl-C tuşuna basın.

Yayından çıkma

Sonraki adımda sürüm görüntüsü derleyip kümeye dağıtarak sürüm oluşturacaksınız.

  1. Sürümü derlemek için aşağıdaki komutu çalıştırın:
skaffold build --file-output artifacts.json

Bu komut, gerekliyse nihai görüntüyü oluşturur ve sürüm ayrıntılarının çıkışını artifacts.json dosyasına ekler.

Kümelerinize dağıtım yapmak için Cloud Deploy gibi bir araç kullanmak istiyorsanız sürüm bilgilerini bu dosyada bulabilirsiniz. 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, son dağıtımda kullanılacak resme referans içerdiğine dikkat edin.

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ıktan sonra, aşağıdakine benzer iki kapsülden çıkış elde edersiniz:

[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 replika 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 üç replika olması gerektiğini belirttiğinden üç farklı kapsül adı görürsünüz.

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