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 izinMicrosoft.Compute/virtualMachines/write
danMicrosoft.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.
Gunakan lingkungan Bash di Azure Cloud Shell. Untuk informasi selengkapnya, lihat Mulai Cepat untuk Bash di Azure Cloud Shell.
Jika Anda lebih suka menjalankan perintah referensi CLI secara lokal, instal Azure CLI. Jika Anda menjalankan Windows atau macOS, pertimbangkan untuk menjalankan Azure CLI dalam kontainer Docker. Untuk informasi lebih lanjut, lihat Cara menjalankan Azure CLI di kontainer Docker.
Jika Anda menggunakan instalasi lokal, masuk ke Azure CLI dengan menggunakan perintah login az. Untuk menyelesaikan proses autentikasi, ikuti langkah-langkah yang ditampilkan di terminal Anda. Untuk opsi masuk lainnya, lihat Masuk dengan Azure CLI.
Saat Anda diminta, instal ekstensi Azure CLI pada penggunaan pertama. Untuk informasi selengkapnya tentang ekstensi, lihat Menggunakan ekstensi dengan Azure CLI.
Jalankan versi az untuk menemukan versi dan pustaka dependen yang diinstal. Untuk meningkatkan ke versi terbaru, jalankan peningkatan az.
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:
Buka https://shell.azure.com untuk membuka Cloud Shell di browser Anda.
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
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
Pilih Sebarkan ke Azure untuk masuk dan membuka templat.
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).
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 .
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
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:
- 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.
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.
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
Periksa status pod yang disebarkan menggunakan perintah kubectl get pods . Buat semua pod sebelum
Running
melanjutkan.kubectl get pods
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
Saat alamat IP EKSTERNAL berubah dari tertunda menjadi alamat IP publik yang sebenarnya, gunakan
CTRL-C
untuk menghentikan proses pemantauankubectl
.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
Buka browser web ke alamat IP eksternal layanan Anda untuk melihat aplikasi Azure Store beraksi.
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.