Membuat dan mengonfigurasi kluster Azure Kubernetes Services (AKS) untuk menggunakan simpul virtual menggunakan Azure CLI
Simpul virtual memungkinkan komunikasi jaringan antara pod yang berjalan di kluster Azure Container Instances (ACI) dan AKS. Untuk menyediakan komunikasi ini, Anda membuat subnet jaringan virtual dan menetapkan izin yang didelegasikan. Simpul virtual hanya berfungsi dengan kluster AKS yang dibuat menggunakan jaringan tingkat lanjut (Azure CNI). Secara default, kluster AKS dibuat dengan jaringan dasar (kubenet). Artikel ini menunjukkan cara membuat jaringan virtual dan subnet, lalu menyebarkan kluster AKS yang menggunakan jaringan tingkat lanjut.
Artikel ini memperlihatkan kepada Anda cara menggunakan Azure CLI untuk membuat dan mengonfigurasi sumber daya jaringan virtual dan kluster AKS yang diaktifkan dengan simpul virtual.
Penting
Sebelum menggunakan simpul virtual dengan AKS, tinjau batasan simpul virtual AKS dan batasan jaringan virtual ACI. Batasan ini memengaruhi lokasi, konfigurasi jaringan, dan detail konfigurasi lainnya dari kluster AKS Anda dan simpul virtual.
Anda memerlukan penyedia layanan ACI yang terdaftar dengan langganan Anda. Anda dapat memeriksa status pendaftaran penyedia ACI menggunakan
az provider list
perintah .az provider list --query "[?contains(namespace,'Microsoft.ContainerInstance')]" -o table
Penyedia Microsoft.ContainerInstance harus dalam status Terdaftar, seperti yang ditunjukkan dalam contoh output berikut:
Namespace RegistrationState RegistrationPolicy --------------------------- ------------------- -------------------- Microsoft.ContainerInstance Registered RegistrationRequired
Jika penyedia menunjukkan sebagai NotRegistered, daftarkan penyedia menggunakan
az provider register
.az provider register --namespace Microsoft.ContainerInstance
Jika menggunakan Azure CLI, artikel ini memerlukan Azure CLI versi 2.0.49 atau yang lebih baru. Jalankan
az --version
untuk menemukan versinya. Jika Anda perlu memasang atau meningkatkan, lihat Memasang Azure CLI. Anda juga dapat menggunakan Azure Cloud Shell.
Azure Cloud Shell adalah shell interaktif gratis yang dapat Anda gunakan untuk menjalankan langkah-langkah dalam artikel ini. Ini memiliki alat Azure umum yang telah diinstal dan dikonfigurasi sebelumnya.
Untuk membuka Cloud Shell, pilih Coba dari sudut kanan atas blok kode. Anda juga dapat meluncurkan Cloud Shell di tab browser terpisah dengan membuka https://shell.azure.com/bash. Pilih Salin untuk menyalin blok kode, tempelkan ke Cloud Shell, dan tekan masukkan untuk menjalankannya.
Grup sumber daya Azure adalah grup logis tempat sumber daya Azure disebarkan dan dikelola.
Buat grup sumber daya menggunakan
az group create
perintah .az group create --name myResourceGroup --location eastus
Penting
Simpul virtual memerlukan jaringan virtual kustom dan subnet terkait. Ini tidak dapat dikaitkan dengan jaringan virtual yang sama dengan kluster AKS.
Buat jaringan virtual menggunakan
az network vnet create
perintah . Contoh berikut membuat jaringan virtual bernama myVnet dengan awalan alamat 10.0.0.0/8 dan subnet bernama myAKSSubnet. Awalan alamat subnet ini default ke 10.240.0.0/16.az network vnet create \ --resource-group myResourceGroup \ --name myVnet \ --address-prefixes 10.0.0.0/8 \ --subnet-name myAKSSubnet \ --subnet-prefix 10.240.0.0/16
Buat subnet tambahan untuk simpul virtual menggunakan
az network vnet subnet create
perintah . Contoh berikut membuat subnet bernama myVirtualNodeSubnet dengan awalan alamat 10.241.0.0/16.az network vnet subnet create \ --resource-group myResourceGroup \ --vnet-name myVnet \ --name myVirtualNodeSubnet \ --address-prefixes 10.241.0.0/16
Dapatkan ID subnet menggunakan
az network vnet subnet show
perintah .az network vnet subnet show --resource-group myResourceGroup --vnet-name myVnet --name myAKSSubnet --query id -o tsv
Buat kluster AKS menggunakan
az aks create
perintah dan ganti<subnetId>
dengan ID yang diperoleh pada langkah sebelumnya. Contoh berikut membuat kluster bernama myAKSCluster dengan lima simpul.az aks create \ --resource-group myResourceGroup \ --name myAKSCluster \ --node-count 5 \ --network-plugin azure \ --vnet-subnet-id <subnetId> \ --generate-ssh-keys
Setelah beberapa menit, perintah tersebut menyelesaikan dan mengembalikan informasi berformat JSON tentang kluster.
Untuk informasi selengkapnya tentang identitas terkelola, lihat Menggunakan identitas terkelola.
Catatan
Jika Anda memiliki Kluster Azure Kubernetes Service yang dibuat yang menggunakan Azure CNI untuk Advanced Netowrking, Anda harus dapat mengaktifkan simpul virtual sebagai add-on menggunakan CLI.
Aktifkan simpul virtual menggunakan
az aks enable-addons
perintah . Contoh berikut menggunakan subnet bernama myVirtualNodeSubnet yang dibuat pada langkah sebelumnya.az aks enable-addons \ --resource-group myResourceGroup \ --name myAKSCluster \ --addons virtual-node \ --subnet-name myVirtualNodeSubnet
Konfigurasikan
kubectl
untuk terhubung ke kluster Kubernetes menggunakan perintahaz aks get-credentials
. Langkah ini mengunduh kredensial dan mengonfigurasi Kubernetes CLI untuk menggunakannya.az aks get-credentials --resource-group myResourceGroup --name myAKSCluster
Verifikasi koneksi ke kluster Anda menggunakan
kubectl get
perintah , yang mengembalikan daftar node kluster.kubectl get nodes
Contoh output berikut menunjukkan simpul VM tunggal yang dibuat dan simpul virtual untuk Linux, virtual-node-aci-linux:
NAME STATUS ROLES AGE VERSION virtual-node-aci-linux Ready agent 28m v1.11.2 aks-agentpool-14693408-0 Ready agent 32m v1.11.2
Buat file bernama
virtual-node.yaml
dan salin dalam YAML berikut. YAML menjadwalkan kontainer pada simpul dengan mendefinisikan nodeSelector dan toleration.apiVersion: apps/v1 kind: Deployment metadata: name: aci-helloworld spec: replicas: 1 selector: matchLabels: app: aci-helloworld template: metadata: labels: app: aci-helloworld spec: containers: - name: aci-helloworld image: mcr.microsoft.com/azuredocs/aci-helloworld ports: - containerPort: 80 nodeSelector: kubernetes.io/role: agent beta.kubernetes.io/os: linux type: virtual-kubelet tolerations: - key: virtual-kubelet.io/provider operator: Exists - key: azure.com/aci effect: NoSchedule
Jalankan aplikasi menggunakan
kubectl apply
perintah .kubectl apply -f virtual-node.yaml
Dapatkan daftar pod dan simpul terjadwal menggunakan
kubectl get pods
perintah dengan-o wide
argumen .kubectl get pods -o wide
Pod dijadwalkan pada simpul virtual virtual-node-aci-linux, seperti yang ditunjukkan pada contoh output berikut:
NAME READY STATUS RESTARTS AGE IP NODE aci-helloworld-9b55975f-bnmfl 1/1 Running 0 4m 10.241.0.4 virtual-node-aci-linux
Pod ini diberi alamat IP internal dari subnet jaringan virtual Azure yang didelegasikan untuk digunakan dengan simpul virtual.
Catatan
Jika Anda menggunakan gambar yang tersimpan di Azure Container Registry, konfigurasikan dan gunakan rahasia Kube. Batasan simpul virtual saat ini adalah Anda tidak dapat menggunakan autentikasi perwakilan layanan Microsoft Entra terintegrasi. Jika Anda tidak menggunakan rahasia, pod yang dijadwalkan pada simpul virtual akan gagal memulai dan melaporkan kesalahan HTTP response status code 400 error code "InaccessibleImage"
.
Uji pod yang berjalan pada simpul virtual dengan menelusuri ke aplikasi demo dengan klien web. Karena pod diberi alamat IP internal, Anda dapat dengan cepat menguji konektivitas ini dari pod lain pada kluster AKS.
Buat pod pengujian dan lampirkan sesi terminal ke dalamnya menggunakan perintah berikut
kubectl run -it
.kubectl run -it --rm testvk --image=mcr.microsoft.com/dotnet/runtime-deps:6.0
Instal
curl
di pod menggunakanapt-get
.apt-get update && apt-get install -y curl
Akses alamat pod Anda menggunakan
curl
, seperti http://10.241.0.4. Berikan alamat IP internal Anda sendiri yang ditunjukkan pada perintah sebelumnyakubectl get pods
.curl -L http://10.241.0.4
Aplikasi demo ditampilkan, seperti yang ditunjukkan dalam output contoh ringkas berikut:
<html> <head> <title>Welcome to Azure Container Instances!</title> </head> [...]
Tutup sesi terminal ke pod pengujian Anda dengan
exit
. Ketika sesi Anda berakhir, pod akan dihapus.
Hapus pod yang
aci-helloworld
berjalan pada simpul virtual menggunakankubectl delete
perintah .kubectl delete -f virtual-node.yaml
Nonaktifkan simpul virtual menggunakan
az aks disable-addons
perintah .az aks disable-addons --resource-group myResourceGroup --name myAKSCluster --addons virtual-node
Hapus sumber daya jaringan virtual dan grup sumber daya menggunakan perintah berikut.
# Change the name of your resource group, cluster and network resources as needed RES_GROUP=myResourceGroup AKS_CLUSTER=myAKScluster AKS_VNET=myVnet AKS_SUBNET=myVirtualNodeSubnet # Get AKS node resource group NODE_RES_GROUP=$(az aks show --resource-group $RES_GROUP --name $AKS_CLUSTER --query nodeResourceGroup --output tsv) # Get network profile ID NETWORK_PROFILE_ID=$(az network profile list --resource-group $NODE_RES_GROUP --query "[0].id" --output tsv) # Delete the network profile az network profile delete --id $NETWORK_PROFILE_ID -y # Grab the service association link ID SAL_ID=$(az network vnet subnet show --resource-group $RES_GROUP --vnet-name $AKS_VNET --name $AKS_SUBNET --query id --output tsv)/providers/Microsoft.ContainerInstance/serviceAssociationLinks/default # Delete the service association link for the subnet az resource delete --ids $SAL_ID --api-version 2021-10-01 # Delete the subnet delegation to Azure Container Instances az network vnet subnet update --resource-group $RES_GROUP --vnet-name $AKS_VNET --name $AKS_SUBNET --remove delegations
Dalam artikel ini, Anda menjadwalkan pod pada simpul virtual dan menetapkan alamat IP internal privat. Sebagai gantinya, Anda dapat membuat layanan penyebaran dan merutekan lalu lintas ke pod Anda melalui load balancer atau ingress controller. Untuk informasi selengkapnya, lihat Membuat ingress controller dasar di AKS.
Simpul virtual seringkali merupakan salah satu komponen dari solusi penskalaan di AKS. Untuk informasi selengkapnya tentang solusi penskalaan, lihat artikel berikut ini:
Umpan balik Azure Kubernetes Service
Azure Kubernetes Service adalah proyek sumber terbuka. Pilih tautan untuk memberikan umpan balik: