Tutorial - Menyiapkan aplikasi untuk Azure Kubernetes Service (AKS)

Tip

Jawaban singkat: Gunakan Kompose untuk perancah cepat, Move2Kube untuk modernisasi yang lebih luas, Docker Compose Bridge jika Anda menggunakan Docker Desktop, dan Podman untuk mengekspor dari kontainer atau pod yang sedang berjalan. Kemudian kemas hasilnya dengan Helm atau Kustomize dan iterasi dengan Skaffold atau Tilt.

Alat teratas: Kompose, Move2Kube, Docker Compose Bridge, Podman, Helm, Kustomize, Skaffold, Tilt, dan konversi yang dibantu AI.

Dalam tutorial ini, Anda menyiapkan aplikasi multi-kontainer untuk digunakan di Kubernetes. Anda dapat menggunakan tutorial ini apakah Anda memulai dengan aplikasi sampel baru atau mengadaptasi konsep Docker Compose untuk aplikasi yang Anda rencanakan untuk dimigrasikan ke Azure Kubernetes Service (AKS). Anda menggunakan alat pengembangan yang ada seperti Docker Compose untuk membangun dan menguji aplikasi secara lokal. Anda akan mempelajari cara untuk:

  • Mengkloning sumber aplikasi sampel dari GitHub.
  • Buat gambar kontainer dari sumber aplikasi sampel.
  • Uji aplikasi multi-kontainer di lingkungan Docker lokal.

Important

Memulai dari awal? Gunakan tutorial ini untuk menyiapkan dan menguji aplikasi sampel untuk AKS. Sudah menggunakan Docker Compose? Lihat dokumentasi Kubernetes untuk memigrasikan Docker Compose ke Kubernetes dan gambaran umum migrasi AKS untuk panduan perencanaan yang lebih luas.

Setelah selesai, aplikasi berikut berjalan di lingkungan pengembangan lokal Anda:

Screenshot memperlihatkan Azure Store Front App yang berjalan secara lokal dibuka di browser web lokal.

Dalam tutorial selanjutnya, Anda mengunggah gambar kontainer ke Azure Container Registry (ACR), lalu menyebarkannya ke kluster AKS.

Sebelum Anda mulai

Tutorial ini mengasumsikan pemahaman dasar tentang konsep core Docker seperti kontainer, citra kontainer, dan perintah docker. Untuk informasi awal tentang dasar-dasar kontainer, lihat Mulai dengan Docker.

Untuk menyelesaikan tutorial ini, Anda memerlukan lingkungan pengembangan Docker lokal yang menjalankan kontainer Linux. Docker menyediakan paket yang mengonfigurasi Docker pada sistem Mac, Windows, atau Linux.

Catatan

Azure Cloud Shell tidak menyertakan komponen Docker yang diperlukan untuk menyelesaikan setiap langkah dalam tutorial ini. Oleh karena itu, kami sarankan untuk menggunakan lingkungan pengembangan Docker penuh.


Mendapatkan kode aplikasi

Aplikasi contoh yang digunakan dalam tutorial ini adalah aplikasi etalase dasar yang mencakup deployment serta layanan Kubernetes berikut:

Screenshot dari contoh arsitektur Azure Store.

  • Simpan depan: Aplikasi web bagi pelanggan untuk melihat produk dan melakukan pemesanan.
  • Layanan produk: Menampilkan informasi produk.
  • Layanan Pemesanan : Mengurus pemesanan.
  • RabbitMQ: Antrean pesan untuk antrean pesanan.
  1. Buat direktori di komputer Anda dan beralihlah ke direktori tersebut di sesi terminal Anda, seperti Bash. Contoh ini menggunakan direktori bernama demorepo tetapi Anda dapat menggunakan nama apa pun yang Anda inginkan.

    mkdir demorepo
    cd demorepo
    
  2. Gunakan git untuk mengkloning aplikasi sampel ke lingkungan pengembangan Anda.

    git clone https://github.com/Azure-Samples/aks-store-demo.git
    
  3. Pindah ke direktori yang telah dikloning.

    cd aks-store-demo
    

Meninjau file Docker Compose

Aplikasi sampel yang Anda buat dalam tutorial ini menggunakan file YAML docker-compose-quickstart dari repositori yang Anda kloning.

Tabel berikut ini meringkas default kunci dari sampel file Compose sehingga Anda dapat dengan cepat melihat layanan, port, dan dependensi mana yang digunakan tutorial:

Pelayanan Sumber Port yang diekspos Pengaturan kunci
RabbitMQ rabbitmq:4.3.2-management-alpine Gambar 15672, 5672 nama pengguna bawaan username, kata sandi password
Layanan pesanan src/order-service 3000 Menyambungkan ke RabbitMQ pada port 5672 dan menggunakan antrean orders
Layanan produk src/product-service 3002 Menggunakan AI_SERVICE_URL=http://ai-service:5001/
Bagian depan toko src/store-front 8080 Memanggil layanan produk pada 3002 dan layanan pesanan pada 3000
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

Membuat gambar kontainer dan menjalankan aplikasi

Anda dapat menggunakan Docker Compose untuk mengotomatiskan pembuatan gambar kontainer dan penyebaran aplikasi multi-kontainer.

Pastikan Docker berjalan dalam mode kontainer Linux sebelum Anda menjalankan perintah berikut.

  1. Dari root repositori aks-store-demo yang dikloning, buat image kontainer, unduh image RabbitMQ, dan mulai aplikasi menggunakan perintah docker compose:

    docker compose -f docker-compose-quickstart.yml up -d
    
  2. Lihat gambar yang dibuat menggunakan docker images perintah .

    docker images
    

    Contoh output ringkas berikut menunjukkan gambar yang dibuat:

    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. Lihat kontainer yang sedang berjalan menggunakan docker ps perintah .

    docker ps
    

    Contoh output ringkas berikut menunjukkan empat kontainer yang sedang berjalan:

    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
    

Menguji aplikasi secara lokal

Untuk melihat aplikasi Anda yang sedang berjalan, navigasikan ke http://localhost:8080 di browser web lokal. Aplikasi sampel dimuat, seperti yang ditunjukkan dalam contoh berikut:

Screenshot memperlihatkan Azure Store Front App dibuka di browser lokal.

Di halaman ini, Anda dapat melihat produk, menambahkannya ke kelir Anda, lalu melakukan pemesanan.

Memigrasikan file Compose Anda sendiri

Jika Anda sudah memiliki aplikasi yang ditentukan dalam file Docker Compose, Anda dapat menggunakan tutorial ini sebagai referensi untuk validasi lokal, lalu mengonversi konfigurasi Compose yang ada menjadi manifes Kubernetes. Gunakan alat seperti Kompose, Move2Kube, Docker Compose Bridge, atau Podman untuk mengonversi definisi Docker Compose menjadi sumber daya Kubernetes. Untuk jalur konversi end-to-end lengkap, lihat dokumentasi Kubernetes untuk memigrasikan Docker Compose ke Kubernetes dan gambaran umum migrasi AKS jika Anda juga berpindah dari orkestrator atau alur kerja modernisasi lain.

Pilih alat konversi

Gunakan tabel ini saat Anda memerlukan perbandingan cepat dari opsi Compose-to-Kubernetes yang paling umum.

Alat Ringkasan satu baris
Kompose Perancah Fast Compose-to-Kubernetes; jalankan kompose convert; harapkan pembersihan manual untuk penyimpanan dan pemeriksaan.
Move2Kube Alur kerja modernisasi yang lebih luas; menjalankan move2kube plan -s ./path && move2kube transform; lebih berat dibandingkan konverter file tunggal.
Docker Compose Bridge Jalur konversi berorientasi Docker Desktop; jalankan docker compose bridge convert -o ./k8s/; lihat dokumen Docker untuk detail dukungan saat ini.
Podman Ekspor YAML dari kontainer atau pod yang sedang berjalan; jalankan podman kube generate mypod > k8s.yaml; paling cocok untuk alur kerja berbasis Podman.
Helm Manifes templat dan paket untuk penyebaran berulang; jalankan helm create mychart; paling baik setelah konversi.
Kustomisasi Terapkan perubahan spesifik lingkungan; jalankan kubectl apply -k .; sebaiknya dilakukan setelah konversi.
Skaffold Bangun siklus pengembangan internal Kubernetes; jalankan skaffold init; bukan konverter langsung.
Kemiringan Perbarui langsung pengembangan Kubernetes lokal; jalankan tilt up; memerlukan alur kerja yang berfokus pada Kubernetes.
Konversi yang dibantu AI Buat draf atau bandingkan manifes dengan AI, lalu validasi output sebelum penyebaran.

Alat mana yang harus saya pilih?

  • Jika Anda menginginkan bukti konsep cepat atau manifes awal, gunakan Kompose.
  • Jika Anda menggunakan Docker Desktop dan menginginkan jalur Docker-native, gunakan Docker Compose Bridge.
  • Jika Anda memiliki upaya migrasi multi-layanan atau modernisasi yang lebih besar, gunakan Move2Kube.
  • Jika Anda ingin mengekspor dari kontainer atau pod yang sedang berjalan, gunakan Podman.
  • Jika Anda sudah memiliki manifes dan memerlukan pengemasan atau overlay, gunakan Helm atau Kustomize.
  • Jika Anda memerlukan perulangan dev Kubernetes lokal setelah konversi, gunakan Skaffold atau Tilt.
  • Jika Anda menginginkan manifes draf atau penjelasan migrasi, gunakan bantuan AI dan validasi hasilnya terhadap panduan Resmi Kubernetes dan AKS.

Alat lain untuk dipertimbangkan:

  • 8gwifi.org Kubernetes YAML Converter: Berguna untuk eksperimen online cepat dengan file Compose kecil.
  • Okteto: Berguna ketika Anda menginginkan perulangan pengembangan Kubernetes cloud atau jarak jauh untuk tim aplikasi.
  • Devtron: Berguna saat Anda menginginkan alur kerja platform di sekitar pengiriman Kubernetes setelah konversi.
  • Portainer: Berguna ketika Anda menginginkan kontainer berbasis UI dan pengalaman manajemen Kubernetes.

Mengonversi file Compose Anda

Gunakan perintah yang dapat disalin berikut sebagai titik awal:

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

Contoh konversi Kompose

Alat Kompose sumber terbuka mengonversi pengaturan Docker Compose umum menjadi objek Kubernetes seperti Penyebaran dan Layanan.

  1. Pada Windows, instal Kompose dengan perintah berikut:

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

    Untuk opsi penginstalan lainnya, lihat instruksi penginstalan Kompose.

  2. Jalankan Kompose dari direktori yang berisi file Anda docker-compose.yml .

    kompose convert
    
  3. Tinjau file YAML Kubernetes yang dihasilkan sebelum Anda menyebarkannya ke AKS.

Konversi yang dibantu AI

Anda dapat menggunakan asisten AI untuk membuat draf manifes Kubernetes, membandingkan pengaturan Buat dengan setara Kubernetes, atau menjelaskan mengapa konversi memerlukan perubahan manual.

Contoh prompt generik:

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.

Prompt contoh yang ditujukan untuk AKS:

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.

Selalu tinjau output AI sebelum Anda menerapkannya. Validasi nilai apiVersion, permintaan dan batas sumber daya, kelas penyimpanan, eksposur layanan, dan probe kesehatan.

Menangani masalah terjemahan umum

Bagaimana volume dikelola?

Compose volumes sering memerlukan volume persisten Kubernetes dan kelas penyimpanan. Di AKS, ganti pemasangan khusus lokal dengan layanan seperti Azure Disk atau Azure Files.

Apa yang menggantikan depends_on?

Compose depends_on tidak memberlakukan kesiapan runtime di Kubernetes. Ganti dengan pemeriksaan kesiapan, pemeriksaan startup, atau logika kontainer init saat diperlukan.

Bagaimana cara menangani nilai rahasia dan lingkungan?

Nilai environment Compose sering kali menjadi sumber daya Kubernetes ConfigMap atau Secret, atau menjadi integrasi Azure Key Vault.

Apa yang terjadi pada port dan ingress?

ports Buat peta ke objek Kubernetes Service dan terkadang sumber daya ingress atau Gateway API, tergantung pada cara Anda menerbitkan aplikasi.

Bagaimana cara menerjemahkan pemeriksaan kesehatan?

healthcheck Membuat pengaturan biasanya menjadi pemeriksaan keaktifan dan kesiapan Kubernetes.

Apa yang terjadi pada jaringan Compose?

Jaringan Compose biasanya diwujudkan sebagai mekanisme penemuan layanan Kubernetes melalui Service dan DNS kluster, alih-alih jaringan bridge kustom.

Bagaimana cara menguji secara lokal dengan Kubernetes?

Setelah konversi, sebarkan manifes yang dihasilkan ke lingkungan Kubernetes lokal seperti jenis atau minikube, lalu gunakan Skaffold atau Tilt jika Anda menginginkan perulangan edit-build-deploy yang lebih cepat.

Menerapkan penyesuaian khusus AKS setelah konversi

Kompose memberi Anda titik awal, tetapi Anda biasanya perlu membuat perubahan manual untuk AKS:

  • Perbarui referensi gambar untuk menunjuk ke Azure Container Registry (ACR) Anda.
  • Ganti penyimpanan lokal saja dan bind mount dengan penyimpanan persisten seperti Azure Disks atau Azure Files, sesuai dengan kebutuhan beban kerja Anda.
  • Ganti secret Compose atau nilai khusus lingkungan dengan Secret Kubernetes, ConfigMap, atau integrasi Azure Key Vault.
  • Tinjau pengaturan jaringan dan eksposur, seperti LoadBalancer, konfigurasi ingress, atau gateway, sesuai dengan cara Anda ingin memublikasikan aplikasi di AKS.
  • Periksa apakah komponen stateful harus tetap sebagai Penyebaran atau pindah ke pola seperti StatefulSets saat Anda memerlukan identitas atau perilaku penyimpanan yang stabil.
  • Verifikasi permintaan sumber daya, probe, dan asumsi terkait urutan startup, karena perilaku Compose seperti depends_on tidak secara langsung berlaku dalam perilaku runtime Kubernetes.

Alur kerja pasca-konversi

  1. Konversikan file Compose dengan alat seperti Kompose, Move2Kube, Docker Compose Bridge, Podman, atau draf yang ditinjau AI.
  2. Tinjau dan perkeras manifes dengan memperbaiki penyimpanan, rahasia, paparan layanan, pemeriksaan, dan referensi gambar.
  3. Kemas manifes dengan Helm atau terapkan perubahan spesifik lingkungan secara berlapis dengan Kustomize.
  4. Dorong gambar Anda ke registri seperti ACR, lalu sebarkan dengan GitOps, CI/CD, atau alur kerja langsung kubectl .

Contoh urutan: kompose convert -> tinjau manifes -> dorong gambar ke ACR -> perbarui referensi gambar ->kubectl apply atau helm install.

Membersihkan sumber daya

Jika Anda mengikuti alur kerja Docker Compose, Anda dapat menghentikan dan menghapus kontainer yang sedang berjalan. Jangan hapus gambar kontainer karena Anda menggunakannya di tutorial berikutnya. Jika Anda mengikuti alur kerja CLI Pengembang Azure, gunakan azd down alih-alih docker compose down.

Hentikan dan hapus instans kontainer dan sumber daya menggunakan docker compose down perintah .

docker compose down

perintah Azure Developer CLI

Saat Anda menggunakan azd, tidak ada ketergantungan pada gambar kontainer yang dilakukan secara manual. azd menangani provisi, penyebaran, dan pembersihan aplikasi dan kluster Anda dengan azd up perintah dan azd down , mirip dengan Docker.

Anda dapat menyesuaikan langkah-langkah persiapan untuk menggunakan Terraform atau Bicep sebelum menyebarkan kluster dalam bagian infra dari azure.yaml Anda. Secara default, proyek ini menggunakan Terraform:

infra:
  provider: terraform
  path: infra/terraform

Jika Anda ingin mengubah penyedia ke Bicep, perbarui file azure.yaml sebagai berikut:

infra:
  provider: bicep
  path: infra/bicep

Langkah berikutnya

Azure CLI

Dalam tutorial ini, Anda membuat aplikasi sampel, membuat gambar kontainer untuk aplikasi, lalu menguji aplikasi. Anda mempelajari cara untuk:

  • Mengkloning sumber aplikasi sampel dari GitHub.
  • Buat gambar kontainer dari sumber aplikasi sampel.
  • Uji aplikasi multi-kontainer di lingkungan Docker lokal.

Dalam tutorial berikutnya, Anda mempelajari cara menyimpan gambar kontainer di ACR.

Azure Developer CLI

Dalam tutorial ini, Anda mengkloning aplikasi sampel menggunakan azd. Anda mempelajari cara untuk:

  • Kloning sampel templat azd dari GitHub.
  • Lihat di mana gambar kontainer digunakan dari sumber aplikasi sampel.

Dalam tutorial berikutnya, Anda mempelajari cara membuat kluster menggunakan templat yang azd Anda kloning.