Mulai cepat - Menyebarkan kluster Azure Kubernetes Service (AKS) menggunakan templat ARM

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

  • Menyebarkan kluster AKS menggunakan templat Azure Resource Manager.
  • Jalankan contoh aplikasi multi-kontainer dengan sekelompok layanan mikro dan ujung depan web yang mensimulasikan skenario ritel.

Templat Azure Resource Manager adalah file JavaScript Object Notation (JSON) yang menentukan infrastruktur dan konfigurasi untuk proyek Anda. Template tersebut menggunakan sintaksis deklaratif. Anda menjelaskan penyebaran yang Dimaksudkan tanpa menulis urutan perintah pemrograman untuk membuat penyebaran.

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

Artikel ini mengasumsikan pemahaman dasar tentang konsep Kube. Untuk informasi lebih, lihat konsep inti Kubernetes untuk Azure Kubernetes Service (AKS).

  • Jika Anda tidak memiliki Langganan Azure, buat Akun gratis Azure sebelum memulai.

  • Pastikan identitas yang Anda gunakan untuk membuat kluster Anda memiliki izin minimum yang sesuai. Untuk informasi selengkapnya tentang akses dan identitas AKS, lihat Opsi akses dan identitas untuk Azure Kubernetes Service (AKS).

  • Untuk menyebarkan templat ARM, 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.

Setelah menyebarkan kluster dari templat, Anda dapat menggunakan Azure CLI atau Azure PowerShell untuk menyambungkan ke kluster dan menyebarkan aplikasi sampel.

Artikel ini memerlukan Azure CLI versi 2.0.64 atau yang lebih baru. Jika Anda menggunakan Azure Cloud Shell, versi terbaru sudah diinstal di sana.

Membuat pasangan kunci SSH

Untuk membuat kluster AKS menggunakan templat ARM, Anda menyediakan kunci umum SSH. Jika Anda memerlukan sumber daya ini, ikuti langkah-langkah di bagian ini. Jika tidak, lewati ke bagian Tinjau templat .

Untuk mengakses simpul AKS, Anda terhubung menggunakan pasangan kunci SSH (publik dan privat). Untuk 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 atau ssh-keygen perintah .

    # Create an SSH key pair using Azure CLI
    az sshkey create --name "mySSHKey" --resource-group "myResourceGroup"
    
    # or
    
    # Create an SSH key pair using ssh-keygen
    ssh-keygen -t rsa -b 4096
    
  3. Untuk menyebarkan templat, Anda harus menyediakan kunci publik dari pasangan SSH. Untuk mengambil kunci umum, panggil az sshkey show:

    az sshkey show --name "mySSHKey" --resource-group "myResourceGroup" --query "publicKey"
    

Secara default, file kunci SSH dibuat di direktori ~/.ssh . az sshkey create Menjalankan perintah atau ssh-keygen akan menimpa pasangan kunci SSH yang ada dengan nama yang sama.

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

Meninjau templat

Templat yang digunakan di mulai cepat ini berasal dari Templat Mulai Cepat Azure.

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "metadata": {
    "_generator": {
      "name": "bicep",
      "version": "0.9.1.41621",
      "templateHash": "2637152180661081755"
    }
  },
  "parameters": {
    "clusterName": {
      "type": "string",
      "defaultValue": "aks101cluster",
      "metadata": {
        "description": "The name of the Managed Cluster resource."
      }
    },
    "location": {
      "type": "string",
      "defaultValue": "[resourceGroup().location]",
      "metadata": {
        "description": "The location of the Managed Cluster resource."
      }
    },
    "dnsPrefix": {
      "type": "string",
      "metadata": {
        "description": "Optional DNS prefix to use with hosted Kubernetes API server FQDN."
      }
    },
    "osDiskSizeGB": {
      "type": "int",
      "defaultValue": 0,
      "maxValue": 1023,
      "minValue": 0,
      "metadata": {
        "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."
      }
    },
    "agentCount": {
      "type": "int",
      "defaultValue": 3,
      "maxValue": 50,
      "minValue": 1,
      "metadata": {
        "description": "The number of nodes for the cluster."
      }
    },
    "agentVMSize": {
      "type": "string",
      "defaultValue": "standard_d2s_v3",
      "metadata": {
        "description": "The size of the Virtual Machine."
      }
    },
    "linuxAdminUsername": {
      "type": "string",
      "metadata": {
        "description": "User name for the Linux Virtual Machines."
      }
    },
    "sshRSAPublicKey": {
      "type": "string",
      "metadata": {
        "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'"
      }
    }
  },
  "resources": [
    {
      "type": "Microsoft.ContainerService/managedClusters",
      "apiVersion": "2022-05-02-preview",
      "name": "[parameters('clusterName')]",
      "location": "[parameters('location')]",
      "identity": {
        "type": "SystemAssigned"
      },
      "properties": {
        "dnsPrefix": "[parameters('dnsPrefix')]",
        "agentPoolProfiles": [
          {
            "name": "agentpool",
            "osDiskSizeGB": "[parameters('osDiskSizeGB')]",
            "count": "[parameters('agentCount')]",
            "vmSize": "[parameters('agentVMSize')]",
            "osType": "Linux",
            "mode": "System"
          }
        ],
        "linuxProfile": {
          "adminUsername": "[parameters('linuxAdminUsername')]",
          "ssh": {
            "publicKeys": [
              {
                "keyData": "[parameters('sshRSAPublicKey')]"
              }
            ]
          }
        }
      }
    }
  ],
  "outputs": {
    "controlPlaneFQDN": {
      "type": "string",
      "value": "[reference(resourceId('Microsoft.ContainerService/managedClusters', parameters('clusterName'))).fqdn]"
    }
  }
}

Jenis sumber daya yang ditentukan dalam templat ARM adalah Microsoft.ContainerService/managedClusters.

Untuk sampel AKS lainnya, lihat situs Templat mulai cepat AKS.

Menyebarkan templat

  1. Pilih Sebarkan ke Azure untuk masuk dan membuka templat.

    Button to deploy the Resource Manager template to Azure.

  2. Pada halaman Dasar , biarkan nilai default untuk OS Disk Size GB, Agent Count, Agent VM Size, dan OS Type, dan konfigurasikan parameter templat berikut:

    • Langganan: Pilih langganan Azure.
    • Grup sumber daya: Pilih Buat baru. Masukkan nama unik untuk grup sumber daya, seperti myResourceGroup, lalu pilih OK.
    • Lokasi: Pilih lokasi, seperti US Timur.
    • 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.
    • Sumber kunci publik SSH: Pilih Gunakan kunci publik yang ada.
    • Nama pasangan kunci: Salin dan tempel bagian publik dari pasangan kunci SSH Anda (secara default, konten ~/.ssh/id_rsa.pub).
  3. Pilih Ulas + Buat>Buat.

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

Menyambungkan ke kluster

Untuk mengelola kluster Kube, gunakan klien baris perintah Kube, kubectl.

Jika Anda menggunakan Azure Cloud Shell, kubectl sudah terpasang. Untuk menginstal dan menjalankan kubectl secara lokal, panggil perintah az aks install-cli .

  1. Konfigurasikan kubectl untuk terhubung ke kluster Kubernetes menggunakan perintah az aks get-credentials. Perintah ini mengunduh informasi masuk dan mengonfigurasi CLI Kube untuk menggunakannya.

    az aks get-credentials --resource-group myResourceGroup --name myAKSCluster
    
  2. Verifikasi koneksi ke kluster menggunakan perintah kubectl get. Perintah ini menampilkan daftar node kluster.

    kubectl get nodes
    

    Contoh output berikut menunjukkan tiga simpul yang dibuat di langkah-langkah sebelumnya. Pastikan status simpul Siap.

    NAME                                STATUS   ROLES   AGE   VERSION
    aks-agentpool-27442051-vmss000000   Ready    agent   10m   v1.27.7
    aks-agentpool-27442051-vmss000001   Ready    agent   10m   v1.27.7
    aks-agentpool-27442051-vmss000002   Ready    agent   11m   v1.27.7
    

Menyebarkan aplikasi

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

Screenshot of Azure Store sample architecture.

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

Catatan

Kami tidak menyarankan untuk menjalankan kontainer stateful, seperti Rabbit MQ, tanpa 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 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 manifes YAML, lihat Manifes Penyebaran dan 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. Sebarkan aplikasi menggunakan perintah kubectl apply dan tentukan nama manifes YAML Anda.

    kubectl apply -f aks-store-quickstart.yaml
    

    Contoh output berikut menunjukkan penyebaran dan layanan:

    deployment.apps/rabbitmq created
    service/rabbitmq created
    deployment.apps/order-service created
    service/order-service created
    deployment.apps/product-service created
    service/product-service created
    deployment.apps/store-front created
    service/store-front created
    

Uji aplikasi

  1. Periksa status pod yang disebarkan menggunakan perintah kubectl get pods . Buat semua pod sebelum Running melanjutkan.

    kubectl get pods
    
  2. Periksa alamat IP publik untuk aplikasi store-front. Pantau kemajuan menggunakan perintah kubectl get service dengan argumen --watch.

    kubectl get service store-front --watch
    

    Output EXTERNAL-IP untuk layanan awalnya store-front ditampilkan sebagai tertunda:

    NAME          TYPE           CLUSTER-IP    EXTERNAL-IP   PORT(S)        AGE
    store-front   LoadBalancer   10.0.100.10   <pending>     80:30025/TCP   4h4m
    
  3. Saat alamat IP EKSTERNAL berubah dari tertunda menjadi alamat IP publik yang sebenarnya, gunakan CTRL-C untuk menghentikan proses pemantauan kubectl.

    Output contoh berikut menunjukkan alamat IP publik yang valid yang ditetapkan ke layanan:

    NAME          TYPE           CLUSTER-IP    EXTERNAL-IP    PORT(S)        AGE
    store-front   LoadBalancer   10.0.100.10   20.62.159.19   80:30025/TCP   4h5m
    
  4. Buka browser web ke alamat IP eksternal layanan Anda untuk melihat aplikasi Azure Store beraksi.

    Screenshot of AKS Store sample application.

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 dengan memanggil perintah az group delete .

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

Catatan

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

Langkah berikutnya

Dalam panduan mulai cepat ini, Anda menerapkan kluster Kubernetes dan kemudian menerapkan aplikasi multi-kontainer sederhana ke dalamnya. 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.