Bagikan melalui


Mulai cepat: Menyebarkan kluster Azure Kubernetes Service (AKS) menggunakan ekstensi Bicep Kubernetes (pratinjau)

Azure Kubernetes Service (AKS) merupakan layanan Kube terkelola yang memungkinkan Anda menyebarkan dan mengelola kluster dengan cepat. Dalam panduan kilat ini, Anda:

  • Sebarkan kluster AKS menggunakan ekstensi Bicep Kubernetes (pratinjau).
  • Jalankan aplikasi multi-container contoh dengan sekelompok layanan mikro dan antarmuka web yang mensimulasikan skenario ritel.

Penting

Ekstensi Bicep untuk Kubernetes saat ini sedang dalam tahap pratinjau. Anda dapat mengaktifkan fitur dari file konfigurasi Bicep dengan menambahkan:

{
 "experimentalFeaturesEnabled": {
   "extensibility": true,
 }
}

Catatan

Untuk memulai provisi kluster AKS dengan cepat, artikel ini menyertakan langkah-langkah untuk menyebarkan kluster dengan pengaturan default hanya untuk tujuan evaluasi. Sebelum menyebarkan kluster siap produksi, kami sarankan Anda membiasakan diri dengan arsitektur referensi dasar kami untuk mempertimbangkan bagaimana kluster tersebut selaras dengan kebutuhan bisnis Anda.

Sebelum Anda mulai

Panduan awal ini mengasumsikan bahwa Anda memiliki pemahaman dasar mengenai konsep Kubernetes. Untuk informasi lebih, lihat konsep inti Kubernetes untuk Azure Kubernetes Service (AKS).

Bicep adalah bahasa pemrogram khusus domain (DSL) yang menggunakan sintaks deklaratif untuk menyebarkan sumber daya Azure. Bicep menyediakan sintaks yang ringkas, keamanan tipe yang andal, dan dukungan untuk pemakaian ulang kode. Bicep menawarkan pengalaman penulisan terbaik untuk solusi infrastructure-as-code di Azure.

  • Untuk menyiapkan lingkungan untuk pengembangan Bicep, lihat Pasang alat Bicep. Setelah menyelesaikan langkah-langkahnya, Anda memiliki Visual Studio Code dan ekstensi Bicep. Anda juga memiliki versi Azure CLI terbaru atau modul Azure PowerShell terbaru.
  • Untuk membuat kluster AKS menggunakan file Bicep, Anda menyediakan kunci umum SSH. Jika Anda memerlukan sumber daya ini, lihat bagian berikut. Jika tidak, langsung ke Meninjau file Bicep.
  • Untuk menyebarkan file Bicep, Anda memerlukan akses tulis pada sumber daya yang Anda sebarkan dan akses ke semua operasi pada Microsoft.Resources/deployments jenis sumber daya. Misalnya, untuk menyebarkan mesin virtual, Anda memerlukan izin Microsoft.Compute/virtualMachines/write dan Microsoft.Resources/deployments/*. Untuk daftar peran dan izin, lihat Peran bawaan Azure.

Membuat pasangan kunci SSH

  1. Buka https://shell.azure.com untuk membuka Cloud Shell di browser Anda.

  2. Buat pasangan kunci SSH menggunakan perintah az sshkey create Azure CLI atau perintah ssh-keygen.

    # Create an SSH key pair using Azure CLI
    az sshkey create --name "mySSHKey" --resource-group "myResourceGroup"
    
    # Create an SSH key pair using ssh-keygen
    ssh-keygen -t rsa -b 4096
    

Untuk mengetahui informasi selengkapnya tentang membuat kunci SSH, lihat Membuat dan mengelola kunci SSH untuk autentikasi di Azure.

Tinjauan file Bicep

File Bicep yang digunakan untuk membuat kluster AKS berasal dari Azure Quickstart Templates. Untuk sampel AKS lainnya, lihat Template Langsung AKS.

@description('The name of the Managed Cluster resource.')
param clusterName string = 'aks101cluster'

@description('The location of the Managed Cluster resource.')
param location string = resourceGroup().location

@description('Optional DNS prefix to use with hosted Kubernetes API server FQDN.')
param dnsPrefix string

@description('Disk size (in GB) to provision for each of the agent pool nodes. This value ranges from 0 to 1023. Specifying 0 will apply the default disk size for that agentVMSize.')
@minValue(0)
@maxValue(1023)
param osDiskSizeGB int = 0

@description('The number of nodes for the cluster.')
@minValue(1)
@maxValue(50)
param agentCount int = 3

@description('The size of the Virtual Machine.')
param agentVMSize string = 'standard_d2s_v3'

@description('User name for the Linux Virtual Machines.')
param linuxAdminUsername string

@description('Configure all linux machines with the SSH RSA public key string. Your key should include three parts, for example \'ssh-rsa AAAAB...snip...UcyupgH azureuser@linuxvm\'')
param sshRSAPublicKey string

resource aks 'Microsoft.ContainerService/managedClusters@2024-02-01' = {
  name: clusterName
  location: location
  identity: {
    type: 'SystemAssigned'
  }
  properties: {
    dnsPrefix: dnsPrefix
    agentPoolProfiles: [
      {
        name: 'agentpool'
        osDiskSizeGB: osDiskSizeGB
        count: agentCount
        vmSize: agentVMSize
        osType: 'Linux'
        mode: 'System'
      }
    ]
    linuxProfile: {
      adminUsername: linuxAdminUsername
      ssh: {
        publicKeys: [
          {
            keyData: sshRSAPublicKey
          }
        ]
      }
    }
  }
}

output controlPlaneFQDN string = aks.properties.fqdn

Sumber daya yang ditentukan dalam file Bicep adalah Microsoft.ContainerService/managedClusters.

Simpan salinan file sebagai main.bicep ke komputer lokal Anda.

Menambahkan definisi aplikasi

Untuk menyebarkan aplikasi, Anda menggunakan file manifes untuk membuat semua objek yang diperlukan untuk menjalankan aplikasi AKS Store. File manifes Kubernetes mendefinisikan status klaster yang diinginkan, seperti citra kontainer mana yang akan dijalankan. Manifes mencakup penyebaran dan layanan Kubernetes berikut:

Cuplikan layar arsitektur sampel Azure Store.

  • Simpan depan: Aplikasi web bagi pelanggan untuk melihat produk dan melakukan pemesanan.
  • Layanan produk: Menampilkan informasi produk.
  • Layanan pemesanan: Menempatkan pesanan.
  • Rabbit MQ: Antrian pesan untuk antrean pesanan.

Catatan

Kami tidak merekomendasikan untuk menjalankan kontainer stateful, seperti Rabbit MQ, tanpa menggunakan penyimpanan persisten untuk produksi. Ini digunakan di sini untuk kesederhanaan, tetapi sebaiknya gunakan layanan terkelola, seperti Azure CosmosDB atau Azure Bus Layanan.

  1. Buat file bernama aks-store-quickstart.yaml di folder yang sama dengan main.bicep dan salin dalam manifes berikut:

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: rabbitmq
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: rabbitmq
      template:
        metadata:
          labels:
            app: rabbitmq
        spec:
          nodeSelector:
            "kubernetes.io/os": linux
          containers:
          - name: rabbitmq
            image: mcr.microsoft.com/mirror/docker/library/rabbitmq:3.10-management-alpine
            ports:
            - containerPort: 5672
              name: rabbitmq-amqp
            - containerPort: 15672
              name: rabbitmq-http
            env:
            - name: RABBITMQ_DEFAULT_USER
              value: "username"
            - name: RABBITMQ_DEFAULT_PASS
              value: "password"
            resources:
              requests:
                cpu: 10m
                memory: 128Mi
              limits:
                cpu: 250m
                memory: 256Mi
            volumeMounts:
            - name: rabbitmq-enabled-plugins
              mountPath: /etc/rabbitmq/enabled_plugins
              subPath: enabled_plugins
          volumes:
          - name: rabbitmq-enabled-plugins
            configMap:
              name: rabbitmq-enabled-plugins
              items:
              - key: rabbitmq_enabled_plugins
                path: enabled_plugins
    ---
    apiVersion: v1
    data:
      rabbitmq_enabled_plugins: |
        [rabbitmq_management,rabbitmq_prometheus,rabbitmq_amqp1_0].
    kind: ConfigMap
    metadata:
      name: rabbitmq-enabled-plugins            
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: rabbitmq
    spec:
      selector:
        app: rabbitmq
      ports:
        - name: rabbitmq-amqp
          port: 5672
          targetPort: 5672
        - name: rabbitmq-http
          port: 15672
          targetPort: 15672
      type: ClusterIP
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: order-service
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: order-service
      template:
        metadata:
          labels:
            app: order-service
        spec:
          nodeSelector:
            "kubernetes.io/os": linux
          containers:
          - name: order-service
            image: ghcr.io/azure-samples/aks-store-demo/order-service:latest
            ports:
            - containerPort: 3000
            env:
            - name: ORDER_QUEUE_HOSTNAME
              value: "rabbitmq"
            - name: ORDER_QUEUE_PORT
              value: "5672"
            - name: ORDER_QUEUE_USERNAME
              value: "username"
            - name: ORDER_QUEUE_PASSWORD
              value: "password"
            - name: ORDER_QUEUE_NAME
              value: "orders"
            - name: FASTIFY_ADDRESS
              value: "0.0.0.0"
            resources:
              requests:
                cpu: 1m
                memory: 50Mi
              limits:
                cpu: 75m
                memory: 128Mi
          initContainers:
          - name: wait-for-rabbitmq
            image: busybox
            command: ['sh', '-c', 'until nc -zv rabbitmq 5672; do echo waiting for rabbitmq; sleep 2; done;']
            resources:
              requests:
                cpu: 1m
                memory: 50Mi
              limits:
                cpu: 75m
                memory: 128Mi    
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: order-service
    spec:
      type: ClusterIP
      ports:
      - name: http
        port: 3000
        targetPort: 3000
      selector:
        app: order-service
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: product-service
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: product-service
      template:
        metadata:
          labels:
            app: product-service
        spec:
          nodeSelector:
            "kubernetes.io/os": linux
          containers:
          - name: product-service
            image: ghcr.io/azure-samples/aks-store-demo/product-service:latest
            ports:
            - containerPort: 3002
            resources:
              requests:
                cpu: 1m
                memory: 1Mi
              limits:
                cpu: 1m
                memory: 7Mi
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: product-service
    spec:
      type: ClusterIP
      ports:
      - name: http
        port: 3002
        targetPort: 3002
      selector:
        app: product-service
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: store-front
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: store-front
      template:
        metadata:
          labels:
            app: store-front
        spec:
          nodeSelector:
            "kubernetes.io/os": linux
          containers:
          - name: store-front
            image: ghcr.io/azure-samples/aks-store-demo/store-front:latest
            ports:
            - containerPort: 8080
              name: store-front
            env: 
            - name: VUE_APP_ORDER_SERVICE_URL
              value: "http://order-service:3000/"
            - name: VUE_APP_PRODUCT_SERVICE_URL
              value: "http://product-service:3002/"
            resources:
              requests:
                cpu: 1m
                memory: 200Mi
              limits:
                cpu: 1000m
                memory: 512Mi
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: store-front
    spec:
      ports:
      - port: 80
        targetPort: 8080
      selector:
        app: store-front
      type: LoadBalancer
    

    Untuk perincian file manifest YAML, lihat Penerapan dan manifes YAML.

    Jika Anda membuat dan menyimpan file YAML secara lokal, maka Anda dapat mengunggah file manifes ke direktori default Anda di CloudShell dengan memilih tombol Unggah/Unduh file dan memilih file dari sistem file lokal Anda.

  2. Buka main.bicep di Visual Studio Code.

  3. Tekan Ctrl+Shift+P untuk membuka Palet Perintah.

  4. Cari bicep, lalu pilih Manifes Kubernetes: Impor.

    Cuplikan layar mengimpor Manifes Kubernetes pada Visual Studio Code.

  5. Pilih aks-store-quickstart.yaml dari petunjuk. Proses ini membuat aks-store-quickstart.bicep file di folder yang sama.

  6. Buka main.bicep dan tambahkan Bicep berikut di akhir file untuk mereferensikan modul yang baru dibuat aks-store-quickstart.bicep :

    module kubernetes './aks-store-quickstart.bicep' = {
      name: 'buildbicep-deploy'
      params: {
        kubeConfig: aks.listClusterAdminCredential().kubeconfigs[0].value
      }
    }
    
  7. Simpan keduanya main.bicep dan aks-store-quickstart.bicep.

Menerapkan file Bicep

  1. Buat grup sumber daya Azure menggunakan perintah az group create .

    az group create --name myResourceGroup --location eastus
    
  2. Sebarkan file Bicep dengan menggunakan perintah az deployment group create.

    az deployment group create --resource-group myResourceGroup --template-file main.bicep --parameters clusterName=<cluster-name> dnsPrefix=<dns-previs> linuxAdminUsername=<linux-admin-username> sshRSAPublicKey='<ssh-key>'
    

Berikan nilai berikut dalam perintah:

  • Nama kluster: Masukkan nama unik untuk kluster AKS, seperti myAKSCluster.
  • Awalan DNS: Masukkan awalan DNS unik untuk kluster Anda, seperti myakscluster.
  • Nama Pengguna Admin Linux: Masukkan nama pengguna untuk terhubung menggunakan SSH, seperti azureuser.
  • Kunci Publik SSH RSA: Salin dan tempel bagian publik dari pasangan kunci SSH Anda (secara default, konten ~/.ssh/id_rsa.pub).

Perlu waktu beberapa menit untuk membuat kluster AKS. Tunggu kluster berhasil disebarkan sebelum Anda melanjutkan ke langkah berikutnya.

Memvalidasi penyebaran Bicep

  1. Masuk ke portal Azure.

  2. Pada menu portal Azure atau dari halaman Beranda, navigasikan ke kluster AKS Anda.

  3. Di bawah sumber daya Kubernetes, pilih Layanan dan masukan.

  4. Temukan layanan toko depan dan salin nilai untuk IP Eksternal.

  5. Buka browser web ke alamat IP eksternal layanan Anda untuk melihat aplikasi Azure Store beraksi.

    Cuplikan layar aplikasi sampel AKS Store.

Menghapus kluster

Jika Anda tidak berencana untuk melalui tutorial AKS, bersihkan sumber daya yang tidak perlu untuk menghindari biaya Azure.

Hapus grup sumber daya, layanan kontainer, dan semua sumber daya terkait menggunakan perintah az group delete .

az group delete --name myResourceGroup --yes --no-wait

Catatan

Kluster AKS dibuat dengan identitas terkelola yang ditetapkan sistem, opsi identitas default yang digunakan dalam panduan cepat ini. Platform mengelola identitas ini sehingga Anda tidak perlu menghapusnya secara manual.

Langkah berikutnya

Dalam panduan cepat mulai ini, Anda menerapkan kluster Kubernetes dan kemudian menerapkan aplikasi multi-kontainer sederhana padanya. Aplikasi sampel ini hanya untuk tujuan demo dan tidak mewakili semua praktik terbaik untuk aplikasi Kubernetes. Untuk panduan tentang membuat solusi lengkap dengan AKS untuk produksi, lihat panduan solusi AKS.

Untuk mempelajari lebih lanjut tentang AKS dan menelusuri contoh kode-ke-penyebaran lengkap, lanjutkan ke tutorial kluster Kubernetes.