Öğretici - Bir uygulamayı Azure Kubernetes Service (AKS) için hazırlama

Tip

Kısa yanıt: Hızlı iskele oluşturmak için Kompose , daha geniş modernleştirme için Move2Kube , Docker Desktop kullanıyorsanız Docker Compose Köprüsü ve çalışan kapsayıcılardan veya podlardan dışarı aktarmak için Podman kullanın. Ardından sonuçları Helm veya Kustomize ile paketleyin ve Skaffold veya Tilt ile yineleyin.

En iyi araçlar: Kompose, Move2Kube, Docker Compose Bridge, Podman, Helm, Kustomize, Skaffold, Tilt ve AI destekli dönüştürme.

Bu öğreticide, Kubernetes'te kullanmak üzere çoklu kapsayıcılı uygulama hazırlarsınız. İster yeni bir örnek uygulamayla başlarken ister Docker Compose kavramlarını Azure Kubernetes Service (AKS) geçirmeyi planladığınız bir uygulama için uyarlarken bu öğreticiyi kullanabilirsiniz. Uygulamayı yerel olarak derlemek ve test etmek için Docker Compose gibi mevcut geliştirme araçlarını kullanırsınız. Şunları yapmayı öğreneceksiniz:

  • GitHub örnek uygulama kaynağını kopyalayın.
  • Örnek uygulama kaynağından bir kapsayıcı görüntüsü oluşturun.
  • Çok kapsayıcılı uygulamayı yerel bir Docker ortamında test edin.

Important

Yeni mi başlıyorsunuz? Aks için örnek bir uygulama hazırlamak ve test etmek için bu öğreticiyi kullanın. Docker Compose'u zaten kullanıyor musunuz? Daha geniş planlama yönergeleri için Docker Compose'u Kubernetes'e geçirmek için Kubernetes belgelerine ve AKS geçişine genel bakış'a bakın.

Tamamlandıktan sonra, aşağıdaki uygulama yerel geliştirme ortamınızda çalışacaktır:

 Yerel bir web tarayıcısında yerel olarak açılan Azure Store Ön Uygulamasını gösteren ekran görüntüsü.

Sonraki öğreticilerde, konteyner görselini bir Azure Container Registry (ACR) yükleyip ardından bir AKS kümesine dağıtacaksınız.

Başlamadan önce

Bu öğreticide kapsayıcılar, kapsayıcı görüntüleri ve docker komutları gibi temel Docker kavramları hakkında bilgi sahibi olduğunuz varsayılmıştır. Kapsayıcı temelleri hakkında bilgi için bkz. Docker ile çalışmaya başlama.

Bu öğreticiyi tamamlamak için Linux kapsayıcılarını çalıştıran yerel bir Docker geliştirme ortamı gerekir. Docker, Docker'ı Mac, Windows veya Linux sisteminde yapılandıran paketler sağlar.

Not

Azure Cloud Shell, bu öğreticilerdeki her adımı tamamlamak için gereken Docker bileşenlerini içermez. Bu yüzden, eksiksiz bir Docker geliştirme ortamı kullanmanızı öneririz.


Uygulama kodunu alma

Bu öğreticide kullanılan sample uygulaması aşağıdaki Kubernetes dağıtımları ve hizmetlerini içeren temel bir mağaza ön uygulamasıdır:

 Azure Store örnek mimarisinin ekran görüntüsü.

  • Mağaza ön: Müşterilerin ürünleri görüntülemesi ve sipariş vermesi için web uygulaması.
  • Ürün hizmeti: Ürün bilgilerini gösterir.
  • Sipariş hizmeti: Sipariş verir.
  • RabbitMQ: Sipariş kuyruğu için ileti kuyruğu.
  1. Bilgisayarınızda bir dizin oluşturun ve Bash gibi terminal oturumunuzda bu dizine geçin. Bu örnekte demorepo adlı bir dizin kullanılır, ancak istediğiniz adı kullanabilirsiniz.

    mkdir demorepo
    cd demorepo
    
  2. Örnek uygulamayı geliştirme ortamınıza kopyalamak için git kullanın.

    git clone https://github.com/Azure-Samples/aks-store-demo.git
    
  3. Kopyalanan dizine geçin.

    cd aks-store-demo
    

Docker Compose dosyasını gözden geçirme

Bu öğreticide oluşturduğunuz örnek uygulama, kopyaladığınız repositorydocker-compose-quickstart YAML dosyasını kullanır.

Aşağıdaki tabloda, öğreticinin hangi hizmetleri, bağlantı noktalarını ve bağımlılıkları kullandığını hızla görebilmeniz için örnek Compose dosyasındaki temel varsayılanlar özetlenmektedir:

Service Kaynak Açık bağlantı noktası Anahtar ayarları
RabbitMQ rabbitmq:4.3.2-management-alpine Görüntü 15672, 5672 Varsayılan kullanıcı adı username, parola password
Sipariş hizmeti src/order-service 3000 5672 bağlantı noktasından RabbitMQ’ye bağlanır ve orders kuyruğunu kullanır
Ürün hizmeti src/product-service 3002 Kullanır AI_SERVICE_URL=http://ai-service:5001/
Ön mağaza src/store-front 8080 Ürün servisini 3002 üzerinde, sipariş servisini 3000 üzerinde çağırır
services:
  rabbitmq:
    image: rabbitmq:4.3.2-management-alpine
    container_name: 'rabbitmq'
    restart: always
    environment:
      - "RABBITMQ_DEFAULT_USER=username"
      - "RABBITMQ_DEFAULT_PASS=password"
    ports:
      - 15672:15672
      - 5672:5672
    healthcheck:
      test: ["CMD", "rabbitmqctl", "status"]
      interval: 30s
      timeout: 10s
      retries: 5
    networks:
      - backend_services
  order-service:
    build: src/order-service
    container_name: 'order-service'
    restart: always
    ports:
      - 3000:3000
    healthcheck:
      test: ["CMD", "wget", "-O", "/dev/null", "-q", "http://order-service:3000/health"]
      interval: 30s
      timeout: 10s
      retries: 5
    environment:
      - ORDER_QUEUE_HOSTNAME=rabbitmq
      - ORDER_QUEUE_PORT=5672
      - ORDER_QUEUE_USERNAME=username
      - ORDER_QUEUE_PASSWORD=password
      - ORDER_QUEUE_NAME=orders
    networks:
      - backend_services
    depends_on:
      rabbitmq:
        condition: service_healthy
  product-service:
    build: src/product-service
    container_name: 'product-service'
    restart: always
    ports:
      - 3002:3002
    healthcheck:
      test: ["CMD", "wget", "-O", "/dev/null", "-q", "http://product-service:3002/health"]
      interval: 30s
      timeout: 10s
      retries: 5
    environment:
      - AI_SERVICE_URL=http://ai-service:5001/
    networks:
      - backend_services
  store-front:
    build: src/store-front
    container_name: 'store-front'
    restart: always
    ports:
      - 8080:8080
    healthcheck:
      test: ["CMD", "wget", "-O", "/dev/null", "-q", "http://store-front:80/health"]
      interval: 30s
      timeout: 10s
      retries: 5
    environment:
      - VUE_APP_PRODUCT_SERVICE_URL=http://product-service:3002/
      - VUE_APP_ORDER_SERVICE_URL=http://order-service:3000/
    networks:
      - backend_services
    depends_on:
      - product-service
      - order-service
networks:
  backend_services:
    driver: bridge

Kapsayıcı görüntüleri oluşturma ve uygulamayı çalıştırma

Kapsayıcı görüntüleri oluşturmayı ve çok kapsayıcılı uygulamaların dağıtımını otomatikleştirmek için Docker Compose'u kullanabilirsiniz.

Aşağıdaki komutları çalıştırmadan önce Docker'ın Linux kapsayıcı modunda çalıştığından emin olun.

  1. Klonlanan aks-store-demo deposunun kök dizininden kapsayıcı imajını oluşturun, RabbitMQ imajını indirin ve uygulamayı docker compose komutunu kullanarak başlatın:

    docker compose -f docker-compose-quickstart.yml up -d
    
  2. komutunu kullanarak docker images oluşturulan görüntüleri görüntüleyin.

    docker images
    

    Aşağıdaki daraltılmış örnek çıktı, oluşturulan görüntüleri gösterir:

    REPOSITORY                        TAG                          IMAGE ID
    aks-store-demo-product-service    latest                       72f5cd7e6b84
    aks-store-demo-order-service      latest                       54ad5de546f9
    aks-store-demo-store-front        latest                       1125f85632ae
    ...
    
  3. docker ps komutunu kullanarak çalışan kapsayıcıları görüntüleyin.

    docker ps
    

    Aşağıdaki özetlenmiş örnek çıktıda dört çalışan kapsayıcı gösterilmektedir.

    CONTAINER ID        IMAGE
    f27fe74cfd0a        aks-store-demo-product-service
    df1eaa137885        aks-store-demo-order-service
    b3ce9e496e96        aks-store-demo-store-front
    31df28627ffa        rabbitmq:4.3.2-management-alpine
    

Uygulamayı yerel olarak test etme

Çalışan uygulamanızı görmek için yerel bir web tarayıcısında adresine gidin http://localhost:8080 . Örnek uygulama aşağıdaki örnekte gösterilen şekilde yüklenir:

 Yerel tarayıcıda açılan Azure Mağazası Ön Uygulamasını gösteren ekran görüntüsü.

Bu sayfada, ürünleri görüntüleyebilir, sepetinize ekleyebilir ve ardından bir sipariş vekleyebilirsiniz.

Kendi Compose dosyalarınızı taşıyın

Docker Compose dosyasında tanımlanmış bir uygulamanız varsa, yerel doğrulama için başvuru olarak bu öğreticiyi kullanabilir ve ardından mevcut Compose yapılandırmanızı Kubernetes bildirimlerine dönüştürebilirsiniz. Docker Compose tanımlarını Kubernetes kaynaklarına dönüştürmek için Kompose, Move2Kube, Docker Compose Bridge veya Podman gibi araçları kullanın. Tam uçtan uca dönüştürme yolu için Docker Compose'u Kubernetes'e geçirmek için Kubernetes belgelerine ve başka bir düzenleyiciden veya modernleştirme iş akışından geçiş yapıyorsanız AKS geçişine genel bakış bölümüne bakın.

Dönüştürme aracı seçme

En yaygın Compose-to-Kubernetes seçeneklerinin hızlı bir karşılaştırmasına ihtiyacınız olduğunda bu tabloyu kullanın.

Araç Tek satırlık özet
Kompose Hızlı Compose'tan Kubernetes'e iskelet; run kompose convert; depolama ve problar için elle temizleme gerekeceğini göz önünde bulundurun.
Move2Kube Daha kapsamlı bir modernleştirme iş akışı; move2kube plan -s ./path && move2kube transform çalıştırmayı gerektirir; tek dosyalı dönüştürücülerden daha ağır.
Docker Compose Köprüsü Docker Desktop odaklı dönüştürme yolu; komutunu çalıştırın docker compose bridge convert -o ./k8s/; geçerli destek ayrıntıları için bkz. Docker belgeleri.
Podman Çalışan kapsayıcılardan veya pod'lardan YAML’yi dışa aktarın; podman kube generate mypod > k8s.yaml çalıştırın; Podman tabanlı iş akışları için en uygunudur.
Helm Yinelenen dağıtımlar için şablon ve paket bildirimleri; helm create mychart komutunu çalıştırın; dönüştürmeden sonra en iyi sonucu verir.
Kustomize Ortama özgü değişiklikleri uygulayın; kubectl apply -k . komutunu çalıştırın; en iyi dönüştürmeden sonra uygulanır.
Skaffold Kubernetes iç geliştirme döngüsü oluşturun; skaffold init çalıştırın; doğrudan bir dönüştürücü değildir.
Eğim Yerel Kubernetes geliştirmesini anlık güncellemeyle sürdürün; tilt up çalıştırın; Kubernetes odaklı bir iş akışı gerektirir.
Yapay zeka destekli dönüştürme Bildirimleri yapay zeka ile taslak olarak hazırlayın veya karşılaştırın, ardından dağıtımdan önce çıkışı doğrulayın.

Hangi aracı seçmeliyim?

  • Hızlı bir kavram kanıtı veya başlangıç bildirimleri istiyorsanız , Kompose kullanın.
  • Docker Desktop kullanıyorsanız ve Docker yerel yolu istiyorsanız Docker Compose Köprüsü'nü kullanın.
  • Çok hizmetli geçiş veya modernleştirme çabanız daha büyükse Move2Kube kullanın.
  • Çalışan kapsayıcılardan veya podlardan dışarı aktarmak istiyorsanız Podman'ı kullanın.
  • Bildirimleriniz zaten varsa ve paketlemeye veya katmana ihtiyacınız varsa Helm veya Kustomize kullanın.
  • Dönüştürmeden sonra yerel bir Kubernetes geliştirme döngüsüne ihtiyacınız varsa Skaffold veya Tilt kullanın.
  • Taslak bildirimleri veya geçiş açıklamalarını istiyorsanız, yapay zeka yardımını kullanın ve sonucu resmi Kubernetes ve AKS kılavuzuna göre doğrulayın.

Dikkate alınması gereken diğer araçlar:

  • 8gwifi.org Kubernetes YAML Dönüştürücüsü: Küçük Compose dosyalarıyla hızlı çevrimiçi denemeler için kullanışlıdır.
  • Okteto: Uygulama ekipleri için bulut veya uzak Kubernetes geliştirme döngüsü istediğinizde kullanışlıdır.
  • Devtron: Dönüştürme sonrasında Kubernetes teslimi etrafında bir platform iş akışı istediğinizde kullanışlıdır.
  • Portainer: Kullanıcı arabirimi tabanlı bir kapsayıcı ve Kubernetes yönetim deneyimi istediğinizde kullanışlıdır.

Compose dosyalarınızı dönüştürün

Başlangıç noktası olarak aşağıdaki kopyalanabilir komutları kullanın:

kompose convert
move2kube plan -s ./path && move2kube transform
docker compose bridge convert -o ./k8s/
podman kube generate mypod > k8s.yaml
skaffold init

Kompose dönüştürme örneği

Açık kaynak Kompose aracı, yaygın Docker Compose ayarlarını Dağıtımlar ve Hizmetler gibi Kubernetes nesnelerine dönüştürür.

  1. Windows'da, aşağıdaki komutla Kompose'u yükleyin:

    curl -L https://github.com/kubernetes/kompose/releases/latest/download/kompose-windows-amd64.exe -o kompose.exe
    

    Diğer yükleme seçenekleri için Bkz. Kompose yükleme yönergeleri.

  2. Dosyanızı docker-compose.yml içeren dizinden Kompose'u çalıştırın.

    kompose convert
    
  3. Oluşturulan Kubernetes YAML dosyalarını AKS'ye dağıtmadan önce gözden geçirin.

Yapay zeka destekli dönüştürme

Bir yapay zeka yardımcısı kullanarak Kubernetes bildirimlerini taslağı oluşturabilir, Oluşturma ayarlarını Kubernetes eşdeğerleriyle karşılaştırabilir veya dönüştürmenin neden el ile değişikliklere ihtiyacı olduğunu açıklayabilirsiniz.

Genel örnek komut:

Convert this docker-compose.yml into production-ready Kubernetes manifests. Use Apps/v1, move secrets to Kubernetes Secret objects, map local volumes to PersistentVolumeClaims, and add readiness and liveness probes for the web service.

AKS’ye yönelik örnek istem:

Convert this docker-compose.yml into AKS-ready Kubernetes manifests. Target an AKS cluster, push images to Azure Container Registry, use Apps/v1 objects, move secrets to Kubernetes Secret objects, map local volumes to Azure Files or Azure Disks-backed PersistentVolumeClaims, and add readiness and liveness probes for the web service.

Her zaman yapay zeka çıktısını uygulamadan önce gözden geçirin. apiVersion Değerleri, kaynak isteklerini ve sınırlarını, depolama sınıflarını, hizmetlerin dışa açılmasını ve sağlık yoklamalarını doğrulayın.

Yaygın çeviri sorunlarını işleme

Birimler nasıl işlenir?

Compose volumes genellikle Kubernetes kalıcı birimlerine ve bir depolama sınıfına ihtiyaç duyar. AKS'de, yalnızca yerel bağlamaları Azure Disks veya Azure Dosyalar gibi hizmetlerle değiştirin.

depends_on yerine ne geçer?

Compose depends_on, Kubernetes'te çalışma zamanı hazırlığını zorlamaz. Bunu gerektiğinde hazır bulunuşluk yoklamaları, başlatma yoklamaları veya başlatma kapsayıcısı mantığı ile değiştirin.

Gizli bilgileri ve ortam değişkenlerini nasıl ele almalıyım?

Compose ortam değerleri genellikle Kubernetes ConfigMap veya Secret kaynaklarına ya da Azure Key Vault tümleştirmelerine dönüşür.

Bağlantı noktalarına ve girişe ne olur?

ports Uygulamayı nasıl yayımladığınıza bağlı olarak Kubernetes Service nesneleriyle ve bazen giriş veya Ağ Geçidi API'si kaynaklarıyla eşleme oluşturun.

Durum denetimleri nasıl çevrilir?

Compose healthcheck ayarları genellikle Kubernetes liveness ve readiness problarına dönüşür.

Compose ağlarına ne olur?

Compose ağları genellikle özel köprü ağları yerine Service'ler ve küme DNS'i üzerinden Kubernetes hizmet keşfine karşılık gelir.

Kubernetes ile yerel olarak nasıl test ederim?

Dönüştürme işleminden sonra oluşturulan bildirimleri kind veya minikube gibi yerel bir Kubernetes ortamına dağıtın, ardından daha hızlı bir edit-build-deploy döngüsü istiyorsanız Skaffold veya Tilt kullanın.

Dönüştürmeden sonra AKS'ye özgü ayarlamaları uygulama

Kompose size bir başlangıç noktası sağlar, ancak genellikle AKS için el ile değişiklikler yapmanız gerekir:

  • Görüntü başvurularını Azure Container Registry’ye (ACR) işaret edecek şekilde güncelleştirin.
  • İş yükü gereksinimlerinize bağlı olarak, yalnızca yerel depolamayı ve bind mount'ları Azure Disks veya Azure Dosyalar gibi kalıcı depolama ile değiştirin.
  • Compose secret’larını veya ortama özgü değerleri Kubernetes Secret’ları, ConfigMap’ler ya da Azure Key Vault tümleştirmeleriyle değiştirin.
  • Uygulamayı AKS’de nasıl yayımlamak istediğinize bağlı olarak, LoadBalancer, ingress veya ağ geçidi yapılandırması gibi ağ oluşturma ve dış erişim ayarlarını gözden geçirin.
  • Sabit kimliğe veya depolama davranışına ihtiyaç duyduğunuzda, durum bilgisi içeren bileşenlerin Deployment olarak mı kalması gerektiğini, yoksa StatefulSet gibi yapılara mı geçmesi gerektiğini değerlendirin.
  • depends_on gibi Compose davranışları Kubernetes çalışma zamanı davranışına doğrudan karşılık gelmediğinden, kaynak isteklerini, probe'ları ve başlatma sıralamasına ilişkin varsayımları doğrulayın.

Dönüştürme sonrası iş akışı

  1. Kompose, Move2Kube, Docker Compose Bridge, Podman veya yapay zeka tarafından incelenen bir taslak gibi bir araçla Compose dosyasını dönüştürün.
  2. Depolama, gizli bilgiler, hizmetlerin dışa açılması, sağlık denetimleri ve imaj referanslarını düzelterek manifestleri gözden geçirin ve güçlendirin.
  3. Manifest dosyalarını Helm ile paketleyin veya ortama özgü değişiklikleri Kustomize ile katmanlayın.
  4. Görüntülerinizi ACR gibi bir kayıt defterine gönderin, ardından GitOps, CI/CD veya doğrudan kubectl iş akışlarıyla dağıtın.

Örnek dizi: kompose convert -> bildirimleri gözden geçirme -> görüntüleri ACR'ye gönderme -> görüntü başvurularını güncelleştirme ->kubectl apply veya helm install.

Kaynakları temizleme

Docker Compose iş akışını izlediyseniz, çalışan kapsayıcıları durdurabilir ve kaldırabilirsiniz. Kapsayıcı görüntülerini silmeyin çünkü bunları sonraki öğreticide kullanacaksınız. Azure Geliştirici CLI iş akışını izlediyseniz, docker compose down yerine azd down kullanın.

komutunu kullanarak docker compose down kapsayıcı örneklerini ve kaynaklarını durdurun ve kaldırın.

docker compose down

Azure Geliştirici CLI komutları

azd kullandığınızda, manuel kapsayıcı imaj bağımlılıkları yoktur. azd, Docker'a benzer şekilde, azd up ve azd down komutları ile uygulamalarınızın ve kümelerinizin sağlama, dağıtım ve temizleme işlemlerini gerçekleştirir.

Kümeyi dağıtmadan önce infra bölümündeki azure.yaml'inizde Terraform veya Bicep kullanmak için hazırlık adımlarını özelleştirebilirsiniz. Bu proje varsayılan olarak Terraform kullanır:

infra:
  provider: terraform
  path: infra/terraform

Sağlayıcıyı Bicep olarak değiştirmek istiyorsanız azure.yaml dosyasını aşağıdaki gibi güncelleştirin:

infra:
  provider: bicep
  path: infra/bicep

Sonraki adımlar

Azure Komut Satırı Arayüzü (Azure CLI)

Bu öğreticide örnek bir uygulama oluşturdunuz, uygulama için kapsayıcı görüntüleri oluşturdunuz ve uygulamayı test ettiniz. Şunları öğrendiniz:

  • GitHub örnek uygulama kaynağını kopyalayın.
  • Örnek uygulama kaynağından bir kapsayıcı görüntüsü oluşturun.
  • Çok kapsayıcılı uygulamayı yerel bir Docker ortamında test edin.

Sonraki öğreticide, kapsayıcı görüntülerini bir ACR'de depolamayı öğreneceksiniz.

Azure Geliştirici CLI'sı

Bu öğreticide, azd kullanarak örnek bir uygulamayı kopyaladınız. Şunları öğrendiniz:

  • GitHub'dan örnek bir azd şablonu kopyalayın.
  • Örnek uygulama kaynağından kapsayıcı görüntülerinin nerede kullanıldığını görüntüleyin.

Sonraki öğreticide, kopyaladığınız şablonu kullanarak azd küme oluşturmayı öğreneceksiniz.