Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Berlaku untuk: ✔️ AKS Otomatis
Azure Kubernetes Service (AKS) Otomatis memberikan pengalaman Kubernetes terkelola termampukan bagi pengembang, teknisi DevOps, dan insinyur platform. Ideal untuk aplikasi modern dan AI, AKS Otomatis mengotomatiskan penyiapan dan operasi kluster AKS dan menyematkan konfigurasi praktik terbaik. Pengguna dari tingkat keterampilan apa pun dapat memperoleh manfaat dari keamanan, performa, dan ketergantungan AKS Otomatis untuk aplikasi mereka. AKS Automatic juga mencakup SLA kesiapan pod yang menjamin 99,9% operasi kesiapan pod yang memenuhi syarat akan selesai dalam waktu 5 menit, memastikan infrastruktur yang andal dan pemulihan otomatis untuk aplikasi Anda. Panduan memulai cepat ini mengasumsikan bahwa Anda memiliki pemahaman dasar tentang konsep Kubernetes. Untuk informasi selengkapnya, lihat konsep inti Kubernetes untuk Azure Kubernetes Service (AKS).
Panduan cepat ini akan mengajarkan Anda untuk:
- Buat jaringan virtual.
- Buat identitas terkelola dengan izin melalui jaringan virtual.
- Sebarkan kluster Otomatis AKS di jaringan virtual.
- Jalankan contoh aplikasi multi-kontainer berupa kelompok layanan mikro dan antarmuka web yang mensimulasikan skenario ritel.
Jika Anda tidak memiliki akun Azure, buat akun free.
Prasyarat
- Azure CLI versi 2.86.0 atau yang lebih baru. Untuk menemukan versi, jalankan
az --versionperintah. Jika Anda perlu menginstal atau meningkatkan, lihat Install Azure CLI.
Nota
Contoh ini membuat kluster AKS Otomatis menggunakan resource azurerm_kubernetes_automatic_cluster dari penyedia AzureRM, yang memerlukan penyedia AzureRM versi v4.81 atau yang lebih baru. Untuk sampel yang setara yang menggunakan penyedia AzAPI, lihat sampel 101-aks-automatic-custom-network-azapi .
- Identitas kluster dengan
Network Contributorpenetapan peran bawaan pada subnet server API. - Identitas kluster dengan
Network Contributorpenetapan peran bawaan di jaringan virtual untuk mendukung Penyediaan Otomatis Node. - Identitas pengguna yang mengakses kluster dengan
Azure Kubernetes Service Cluster User RoledanAzure Kubernetes Service RBAC Writer. - Jaringan virtual dengan subnet server API khusus berukuran setidaknya
*/28yang didelegasikan keMicrosoft.ContainerService/managedClusters.- Jika ada Kelompok Keamanan Jaringan (NSG) yang melekat pada subnet, pastikan bahwa aturan keamanan NSG mengizinkan jenis komunikasi yang diperlukan antar komponen kluster. Untuk persyaratan terperinci, lihat Persyaratan jaringan virtual kustom.
- Jika ada Azure Firewall atau metode pembatasan keluaran atau perangkat lainnya, pastikan aturan jaringan keluar yang diperlukan dan FQDN diizinkan.
- AKS Otomatis akan mengaktifkan Azure Policy pada kluster AKS Anda, tetapi Anda harus mendaftarkan terlebih dahulu penyedia sumber daya
Microsoft.PolicyInsightsdi langganan Anda agar pengalaman lebih lancar. Untuk informasi selengkapnya, lihat penyedia dan jenis sumber daya Azure untuk informasi selengkapnya. - Copot pemasangan ekstensi AKS-preview menggunakan
az extension remove -n aks-preview.
Penting
Mulai dari AKS 1.36, kluster AKS Automatic baru secara bawaan akan mengaktifkan Kubernetes Gateway API melalui add-on perutean aplikasi alih-alih Managed NGINX ingress dengan add-on perutean aplikasi karena penghentian Ingress NGINX upstream.
Kluster otomatis yang ada tidak terdampak, tetapi sebaiknya mulai bermigrasi ke Gateway API Kubernetes melalui add-on perutean aplikasi.
Keterbatasan
Batasan berikut berlaku untuk kluster AKS Otomatis:
- AKS Automatic secara umum tersedia di wilayah berikut:
australiacentral,australiaeast,newzealandnorth,belgiumcentral,brazilsouth,canadacentral,canadaeast,centralindia,centralus,austriaeast,denmarkeast,chilecentral,eastasia,eastus,eastus2,francecentral,malaysiawest,koreasouth,mexicocentral,koreacentral,japanwest,japaneast,northcentralus,italynorth,israelcentral,indonesiacentral,northeurope,australiasoutheast,uaenorth,switzerlandnorth,germanywestcentral,southcentralus,southeastasia,southafricanorth,southindia,polandcentral,spaincentral,westcentralus,uksouth,swedencentral,norwayeast,westeurope,westus,ukwest,westus2,westus3. - Kluster AKS Otomatis baru secara default mengaktifkan kumpulan simpul sistem terkelola dan LocalDNS. Anda tidak dapat membuat kluster AKS Otomatis tanpa kumpulan simpul sistem terkelola di wilayah mana pun.
- Kluster Otomatis AKS memiliki penguncian grup sumber daya node yang telah dikonfigurasi sebelumnya, yang tidak mengizinkan perubahan pada grup sumber daya
MC_, mencegah tautan jaringan virtual pada zona Private DNS default. Untuk skenario DNS lintas VNet atau kustom, gunakan jaringan kustom dan DNS privat dengan mengikuti Buat kluster privat Azure Kubernetes Service (AKS) Otomatis dalam jaringan virtual kustom. - Azure CLI versi 2.86.0 atau yang lebih baru diperlukan. Untuk menemukan versi, jalankan
az --versionperintah. Jika Anda perlu menginstal atau meningkatkan, lihat Install Azure CLI. - Ekstensi berikut ini tidak didukung:
- Node Windows tidak didukung.
- Migrasi dari SKU dasar AKS ke SKU otomatis tidak didukung.
- Migrasi dari kluster AKS Otomatis yang ada tanpa kumpulan simpul sistem terkelola ke AKS Otomatis dengan kumpulan simpul sistem terkelola didukung dalam pratinjau di wilayah tempat kumpulan simpul sistem terkelola tersedia secara umum. Migrasi dari AKS Otomatis dengan kumpulan simpul sistem terkelola kembali ke AKS Otomatis tanpa kumpulan simpul sistem terkelola tidak didukung.
Tentukan variabel
Tentukan variabel berikut yang digunakan dalam langkah-langkah berikut.
RG_NAME=automatic-rg
VNET_NAME=automatic-vnet
CLUSTER_NAME=automatic
IDENTITY_NAME=automatic-uami
LOCATION=eastus
SUBSCRIPTION_ID=$(az account show --query id -o tsv)
Membuat grup sumber daya
Grup sumber daya Azure adalah grup logis tempat sumber daya Azure disebarkan dan dikelola.
Mmebuat grup sumber daya menggunakan perintah buat grup az.
az group create -n ${RG_NAME} -l ${LOCATION}
Contoh output berikut menyerupai pembuatan grup sumber daya yang berhasil:
{
"id": "/subscriptions/<guid>/resourceGroups/automatic-rg",
"location": "canadacentral",
"managedBy": null,
"name": "automatic-rg",
"properties": {
"provisioningState": "Succeeded"
},
"tags": null
}
Membuat jaringan virtual
Buat jaringan virtual menggunakan az network vnet create perintah . Buat subnet server API, subnet simpul pengguna, dan subnet simpul sistem menggunakan az network vnet subnet create perintah .
Saat Anda menggunakan jaringan virtual kustom dengan AKS Otomatis, Anda harus membuat subnet server API. AKS mendelegasikan subnet ke Microsoft.ContainerService/managedClusters atas nama Anda, yang memberikan izin layanan AKS untuk menyuntikkan pod server API dan load balancer internal ke subnet tersebut. Anda tidak dapat menggunakan subnet untuk beban kerja lain, tetapi Anda dapat menggunakannya untuk subnet server API untuk beberapa kluster AKS yang terletak di jaringan virtual yang sama. Ukuran subnet server API minimum yang didukung untuk mendukung satu kluster adalah /28.
Peringatan
Kluster AKS mencadangkan setidaknya sembilan (9) IP di ruang alamat subnet. Kehabisan alamat IP dapat mencegah penskalaan server API dan menyebabkan pemadaman server API.
az network vnet create --name ${VNET_NAME} \
--resource-group ${RG_NAME} \
--location ${LOCATION} \
--address-prefixes 172.19.0.0/16
az network vnet subnet create --resource-group ${RG_NAME} \
--vnet-name ${VNET_NAME} \
--name apiServerSubnet \
--delegations Microsoft.ContainerService/managedClusters \
--address-prefixes 172.19.0.0/28
az network vnet subnet create --resource-group ${RG_NAME} \
--vnet-name ${VNET_NAME} \
--name userNodeSubnet \
--address-prefixes 172.19.1.0/24
az network vnet subnet create --resource-group ${RG_NAME} \
--vnet-name ${VNET_NAME} \
--name managedSystemNodeSubnet \
--address-prefixes 172.19.0.64/26
Persyaratan kelompok keamanan jaringan
Jika Anda menambahkan aturan Network Security Group (NSG) untuk membatasi lalu lintas antara subnet yang berbeda di jaringan virtual kustom Anda, pastikan bahwa aturan keamanan NSG mengizinkan jenis komunikasi yang diperlukan antar komponen kluster.
Untuk persyaratan NSG terperinci saat menggunakan jaringan virtual kustom dengan kluster AKS, lihat Persyaratan jaringan virtual kustom.
Membuat identitas terkelola dan memberinya izin di jaringan virtual
Buat identitas terkelola menggunakan az identity create perintah dan ambil ID utama. Tetapkan peran Kontributor Jaringan pada jaringan virtual ke identitas terkelola az role assignment create menggunakan perintah .
az identity create \
--resource-group ${RG_NAME} \
--name ${IDENTITY_NAME} \
--location ${LOCATION}
IDENTITY_PRINCIPAL_ID=$(az identity show --resource-group ${RG_NAME} --name ${IDENTITY_NAME} --query principalId -o tsv)
az role assignment create \
--scope "/subscriptions/${SUBSCRIPTION_ID}/resourceGroups/${RG_NAME}/providers/Microsoft.Network/virtualNetworks/${VNET_NAME}" \
--role "Network Contributor" \
--assignee-object-id "${IDENTITY_PRINCIPAL_ID}" \
--assignee-principal-type ServicePrincipal
Membuat kluster Otomatis AKS di jaringan virtual kustom
Untuk membuat kluster AKS Otomatis, gunakan perintah az aks create .
az aks create \
--resource-group ${RG_NAME} \
--name ${CLUSTER_NAME} \
--location ${LOCATION} \
--apiserver-subnet-id "/subscriptions/${SUBSCRIPTION_ID}/resourceGroups/${RG_NAME}/providers/Microsoft.Network/virtualNetworks/${VNET_NAME}/subnets/apiServerSubnet" \
--node-subnet-id "/subscriptions/${SUBSCRIPTION_ID}/resourceGroups/${RG_NAME}/providers/Microsoft.Network/virtualNetworks/${VNET_NAME}/subnets/userNodeSubnet" \
--system-node-subnet-id "/subscriptions/${SUBSCRIPTION_ID}/resourceGroups/${RG_NAME}/providers/Microsoft.Network/virtualNetworks/${VNET_NAME}/subnets/managedSystemNodeSubnet"
--assign-identity "/subscriptions/${SUBSCRIPTION_ID}/resourcegroups/${RG_NAME}/providers/Microsoft.ManagedIdentity/userAssignedIdentities/${IDENTITY_NAME}" \
--sku automatic \
--no-ssh-key
Setelah beberapa menit, perintah selesai dan kembalikan informasi berformat JSON tentang kluster.
Menyambungkan ke kluster
Untuk mengelola kluster Kube, gunakan klien baris perintah Kube, kubectl.
kubectl sudah diinstal jika Anda menggunakan Azure Cloud Shell. Untuk menginstal kubectl secara lokal, jalankan perintah az aks install-cli . Kluster Otomatis AKS dikonfigurasi dengan Microsoft Entra ID untuk kontrol akses berbasis peran (RBAC) Kubernetes .
Saat Anda membuat kluster menggunakan Azure CLI, pengguna Anda diperuntukkan peran bawaan untuk Azure Kubernetes Service RBAC Cluster Admin.
Konfigurasikan kubectl untuk terhubung ke kluster Kubernetes menggunakan perintah az aks get-credentials. Perintah ini mengunduh kredensial dan mengonfigurasi CLI Kubernetes untuk menggunakannya.
az aks get-credentials --resource-group ${RG_NAME} --name ${CLUSTER_NAME}
Verifikasi koneksi ke kluster menggunakan perintah kubectl get. Perintah ini menampilkan daftar node kluster.
kubectl get nodes
Contoh output berikut menunjukkan bagaimana Anda diminta untuk masuk.
To sign in, use a web browser to open the page https://microsoft.com/devicelogin and enter the code AAAAAAAAA to authenticate.
Setelah Anda masuk, output sampel berikut menunjukkan kumpulan simpul sistem terkelola. Pastikan status node adalah Ready.
NAME STATUS ROLES AGE VERSION
aks-hostedpool-16652789-vms1 Ready <none> 19m v1.34.7
aks-hostedpool-16652789-vms2 Ready <none> 19m v1.34.7
aks-hostedpool-16652789-vms3 Ready <none> 19m v1.34.7
aks-system-surge-zq4d2 Ready <none> 19m v1.34.7
Membuat jaringan virtual
File Bicep ini mendefinisikan jaringan virtual.
@description('The location of the managed cluster resource.')
param location string = resourceGroup().location
@description('The name of the virtual network.')
param vnetName string = 'aksAutomaticVnet'
@description('The address prefix of the virtual network.')
param addressPrefix string = '172.19.0.0/16'
@description('The name of the API server subnet.')
param apiServerSubnetName string = 'apiServerSubnet'
@description('The subnet prefix of the API server subnet.')
param apiServerSubnetPrefix string = '172.19.0.0/28'
@description('The name of the user node subnet.')
param userNodeSubnetName string = 'userNodeSubnet'
@description('The subnet prefix of the user node subnet.')
param userNodeSubnetPrefix string = '172.19.1.0/24'
@description('The name of the system node subnet.')
param systemNodeSubnetName string = 'systemNodeSubnet'
@description('The subnet prefix of the system node subnet.')
param systemNodeSubnetPrefix string = '172.19.0.64/26'
// Virtual network with an API server subnet, a user node subnet, and a system node subnet
resource virtualNetwork 'Microsoft.Network/virtualNetworks@2023-09-01' = {
name: vnetName
location: location
properties: {
addressSpace: {
addressPrefixes: [ addressPrefix ]
}
subnets: [
{
name: apiServerSubnetName
properties: {
addressPrefix: apiServerSubnetPrefix
}
}
{
name: userNodeSubnetName
properties: {
addressPrefix: userNodeSubnetPrefix
}
}
{
name: systemNodeSubnetName
properties: {
addressPrefix: systemNodeSubnetPrefix
}
}
]
}
}
output apiServerSubnetId string = resourceId('Microsoft.Network/virtualNetworks/subnets', vnetName, apiServerSubnetName)
output userNodeSubnetId string = resourceId('Microsoft.Network/virtualNetworks/subnets', vnetName, userNodeSubnetName)
output systemNodeSubnetId string = resourceId('Microsoft.Network/virtualNetworks/subnets', vnetName, systemNodeSubnetName)
Simpan file Bicep virtualNetwork.bicep ke komputer lokal Anda.
Penting
File Bicep mengatur param vnetName ke aksAutomaticVnet, param addressPrefix ke 172.19.0.0/16, apiServerSubnetPrefix param ke 172.19.0.0/28, dan apiServerSubnetPrefix param ke 172.19.1.0/24. Jika Anda ingin menggunakan nilai yang berbeda, pastikan untuk memperbarui string ke nilai pilihan Anda.
Sebarkan file Bicep menggunakan Azure CLI.
az deployment group create --resource-group <resource-group> --template-file virtualNetwork.bicep
Semua lalu lintas dalam jaringan virtual diizinkan secara default. Jika Anda menambahkan aturan Network Security Group (NSG) untuk membatasi lalu lintas antara subnet yang berbeda di jaringan virtual kustom Anda, pastikan bahwa aturan keamanan NSG mengizinkan jenis komunikasi yang diperlukan antar komponen kluster.
Untuk persyaratan NSG terperinci saat menggunakan jaringan virtual kustom dengan kluster AKS, lihat Persyaratan jaringan virtual kustom.
Buat identitas terkelola
File Bicep ini menentukan identitas terkelola yang ditetapkan pengguna.
param location string = resourceGroup().location
param uamiName string = 'aksAutomaticUAMI'
resource userAssignedManagedIdentity 'Microsoft.ManagedIdentity/userAssignedIdentities@2023-01-31' = {
name: uamiName
location: location
}
output uamiId string = userAssignedManagedIdentity.id
output uamiPrincipalId string = userAssignedManagedIdentity.properties.principalId
output uamiClientId string = userAssignedManagedIdentity.properties.clientId
Simpan file Bicep uami.bicep ke komputer lokal Anda.
Penting
File Bicep mengatur param uamiName ke aksAutomaticUAMI. Jika Anda ingin menggunakan nama identitas yang berbeda, pastikan untuk memperbarui string ke nama pilihan Anda.
Sebarkan file Bicep menggunakan Azure CLI.
az deployment group create --resource-group <resource-group> --template-file uami.bicep
Menetapkan peran Kontributor Jaringan melalui jaringan virtual
File Bicep ini mendefinisikan penetapan peran melalui jaringan virtual.
@description('The name of the virtual network.')
param vnetName string = 'aksAutomaticVnet'
@description('The principal ID of the user assigned managed identity.')
param uamiPrincipalId string
// Get a reference to the virtual network
resource virtualNetwork 'Microsoft.Network/virtualNetworks@2023-09-01' existing ={
name: vnetName
}
// Assign the Network Contributor role to the user assigned managed identity on the virtual network
// '4d97b98b-1d4f-4787-a291-c67834d212e7' is the built-in Network Contributor role definition
// See: https://learn.microsoft.com/en-us/azure/role-based-access-control/built-in-roles/networking#network-contributor
resource networkContributorRoleAssignmentToVirtualNetwork 'Microsoft.Authorization/roleAssignments@2022-04-01' = {
name: guid(uamiPrincipalId, '4d97b98b-1d4f-4787-a291-c67834d212e7', resourceGroup().id, virtualNetwork.name)
scope: virtualNetwork
properties: {
roleDefinitionId: resourceId('Microsoft.Authorization/roleDefinitions', '4d97b98b-1d4f-4787-a291-c67834d212e7')
principalId: uamiPrincipalId
}
}
Simpan file Bicep roleAssignments.bicep ke komputer lokal Anda.
Penting
File Bicep mengatur param vnetName ke aksAutomaticVnet. Jika Anda menggunakan nama jaringan virtual yang berbeda, pastikan untuk memperbarui string ke nama jaringan virtual pilihan Anda.
Sebarkan file Bicep menggunakan Azure CLI. Anda perlu memberikan ID prinsipal identitas pengguna yang ditetapkan.
az deployment group create --resource-group <resource-group> --template-file roleAssignments.bicep \
--parameters uamiPrincipalId=<user assigned identity prinicipal id>
Membuat kluster Otomatis AKS di jaringan virtual kustom
File Bicep ini mendefinisikan kluster Otomatis AKS.
@description('The name of the managed cluster resource.')
param clusterName string = 'aksAutomaticCluster'
@description('The location of the managed cluster resource.')
param location string = resourceGroup().location
@description('The resource ID of the API server subnet.')
param apiServerSubnetId string
@description('The resource ID of the user node subnet.')
param userNodeSubnetId string
@description('The resource ID of the system node subnet.')
param systemNodeSubnetId string
@description('The resource ID of the user assigned managed identity.')
param uamiId string
/// Create the AKS Automatic cluster using the custom virtual network and user assigned managed identity
resource aks 'Microsoft.ContainerService/managedClusters@2024-03-02-preview' = {
name: clusterName
location: location
sku: {
name: 'Automatic'
}
properties: {
apiServerAccessProfile: {
subnetId: apiServerSubnetId
}
networkProfile: {
outboundType: 'loadBalancer'
}
hostedSystemProfile: {
systemNodeSubnetID: systemNodeSubnetId
nodeSubnetID: userNodeSubnetId
}
}
identity: {
type: 'UserAssigned'
userAssignedIdentities: {
'${uamiId}': {}
}
}
}
Simpan file Bicep aks.bicep ke komputer lokal Anda.
Penting
File Bicep mengatur param clusterName ke aksAutomaticCluster. Jika Anda menginginkan nama kluster yang berbeda, pastikan untuk memperbarui string ke nama kluster pilihan Anda.
Sebarkan file Bicep menggunakan Azure CLI. Anda perlu memberikan ID sumber daya subnet server API, ID sumber daya subnet simpul pengguna, ID sumber daya subnet simpul sistem, dan ID sumber daya identitas terkelola yang ditetapkan pengguna.
az deployment group create --resource-group <resource-group> --template-file aks.bicep \
--parameters apiServerSubnetId=<API server subnet resource id> \
--parameters nodeSubnetId=<user node subnet resource id> \
--parameters systemNodeSubnetId=<system node subnet resource id> \
--parameters uamiId=<user assigned identity id>
Menyambungkan ke kluster
Untuk mengelola kluster Kube, gunakan klien baris perintah Kube, kubectl.
kubectl sudah diinstal jika Anda menggunakan Azure Cloud Shell. Untuk menginstal kubectl secara lokal, jalankan perintah az aks install-cli . Kluster Otomatis AKS dikonfigurasi dengan Microsoft Entra ID untuk kontrol akses berbasis peran (RBAC) Kubernetes .
Penting
Saat membuat kluster menggunakan Bicep, Anda perlu menetapkan salah satu peran bawaan seperti Azure Kubernetes Service RBAC Reader, Azure Kubernetes Service RBAC Writer, Azure Kubernetes Service RBAC Admin, atau Azure Kubernetes Service RBAC Cluster Admin kepada pengguna Anda, dilingkupkan ke kluster atau namespace tertentu, misalnya menggunakan az role assignment create --role "Azure Kubernetes Service RBAC Cluster Admin" --scope <AKS cluster resource id> --assignee user@contoso.com. Pastikan juga pengguna Anda memiliki peran bawaan Azure Kubernetes Service Cluster User untuk dapat menjalankan az aks get-credentials, lalu mendapatkan kubeconfig kluster AKS Anda menggunakan perintah az aks get-credentials.
Konfigurasikan kubectl untuk terhubung ke kluster Kubernetes menggunakan perintah az aks get-credentials. Perintah ini mengunduh kredensial dan mengonfigurasi CLI Kubernetes untuk menggunakannya.
az aks get-credentials --resource-group <resource-group> --name <cluster-name>
Verifikasi koneksi ke kluster menggunakan perintah kubectl get. Perintah ini menampilkan daftar node kluster.
kubectl get nodes
Contoh output berikut menunjukkan bagaimana Anda diminta untuk masuk.
To sign in, use a web browser to open the page https://microsoft.com/devicelogin and enter the code AAAAAAAAA to authenticate.
Setelah Anda masuk, output sampel berikut menunjukkan kumpulan simpul sistem terkelola. Pastikan status node adalah Ready.
NAME STATUS ROLES AGE VERSION
aks-hostedpool-16652789-vms1 Ready <none> 19m v1.34.7
aks-hostedpool-16652789-vms2 Ready <none> 19m v1.34.7
aks-hostedpool-16652789-vms3 Ready <none> 19m v1.34.7
aks-system-surge-zq4d2 Ready <none> 19m v1.34.7
Meninjau kode Terraform
Nota
Kode sampel untuk artikel ini terletak di repositori Azure Terraform GitHub. Anda dapat melihat file log yang berisi hasil test dari versi Terraform saat ini dan sebelumnya.
Buat direktori untuk menguji sampel kode Terraform dan menjadikannya direktori saat ini.
Buat file bernama
providers.tfdan masukkan kode berikut:terraform { required_version = ">= 1.0" required_providers { azurerm = { source = "hashicorp/azurerm" version = "~>5.0" } random = { source = "hashicorp/random" version = "~>3.0" } } } provider "azurerm" { features {} }Buat file bernama
main.tfdan masukkan kode berikut:# Create a random name for the resource group using random_pet resource "random_pet" "rg_name" { prefix = var.resource_group_name_prefix } # Create a resource group using the generated random name resource "azurerm_resource_group" "rg" { location = var.resource_group_location name = random_pet.rg_name.id } # Create the custom virtual network that hosts the cluster resource "azurerm_virtual_network" "vnet" { name = var.virtual_network_name location = azurerm_resource_group.rg.location resource_group_name = azurerm_resource_group.rg.name address_space = var.virtual_network_address_space } # Create the subnet delegated to AKS for API Server VNet Integration resource "azurerm_subnet" "api_server" { name = "apiServerSubnet" resource_group_name = azurerm_resource_group.rg.name virtual_network_name = azurerm_virtual_network.vnet.name address_prefixes = var.api_server_subnet_address_prefixes delegation { name = "aks-delegation" service_delegation { name = "Microsoft.ContainerService/managedClusters" actions = ["Microsoft.Network/virtualNetworks/subnets/join/action"] } } } # Create the subnet that hosts the user node pools resource "azurerm_subnet" "user_nodes" { name = "userNodeSubnet" resource_group_name = azurerm_resource_group.rg.name virtual_network_name = azurerm_virtual_network.vnet.name address_prefixes = var.user_node_subnet_address_prefixes } # Create the subnet that hosts the managed system node pool resource "azurerm_subnet" "system_nodes" { name = "managedSystemNodeSubnet" resource_group_name = azurerm_resource_group.rg.name virtual_network_name = azurerm_virtual_network.vnet.name address_prefixes = var.system_node_subnet_address_prefixes lifecycle { # AKS adds its own managed cluster delegation to this subnet after the # cluster is created. ignore_changes = [delegation] } } # Create the user-assigned managed identity used by the cluster resource "azurerm_user_assigned_identity" "aks" { name = var.identity_name location = azurerm_resource_group.rg.location resource_group_name = azurerm_resource_group.rg.name } # Grant the cluster identity Network Contributor on the virtual network resource "azurerm_role_assignment" "network_contributor" { scope = azurerm_virtual_network.vnet.id role_definition_name = "Network Contributor" principal_id = azurerm_user_assigned_identity.aks.principal_id principal_type = "ServicePrincipal" } # Create a random name for the AKS Automatic cluster resource "random_pet" "cluster_name" { prefix = var.cluster_name_prefix } # Create the AKS Automatic cluster in the custom virtual network resource "azurerm_kubernetes_automatic_cluster" "aks_automatic" { name = random_pet.cluster_name.id location = azurerm_resource_group.rg.location resource_group_name = azurerm_resource_group.rg.name identity { type = "UserAssigned" identity_ids = [azurerm_user_assigned_identity.aks.id] } api_server_access { subnet_id = azurerm_subnet.api_server.id } hosted_system { node_subnet_id = azurerm_subnet.user_nodes.id system_node_subnet_id = azurerm_subnet.system_nodes.id } depends_on = [azurerm_role_assignment.network_contributor] }Buat file bernama
variables.tfdan masukkan kode berikut:variable "resource_group_location" { type = string default = "westus2" description = "Location of the resource group." } variable "resource_group_name_prefix" { type = string default = "rg" description = "Prefix of the resource group name that's combined with a random ID so name is unique in your Azure subscription." } variable "cluster_name_prefix" { type = string default = "aks-automatic" description = "Prefix of the AKS Automatic cluster name that's combined with a random ID so the name is unique in your Azure subscription." } variable "virtual_network_name" { type = string default = "aks-automatic-vnet" description = "Name of the custom virtual network that hosts the cluster." } variable "identity_name" { type = string default = "aks-automatic-identity" description = "Name of the user-assigned managed identity that the cluster uses." } variable "virtual_network_address_space" { type = list(string) default = ["172.19.0.0/16"] description = "Address space of the custom virtual network." } variable "api_server_subnet_address_prefixes" { type = list(string) default = ["172.19.0.0/28"] description = "Address prefixes of the subnet delegated to the cluster API server." } variable "user_node_subnet_address_prefixes" { type = list(string) default = ["172.19.1.0/24"] description = "Address prefixes of the subnet that hosts the user node pools." } variable "system_node_subnet_address_prefixes" { type = list(string) default = ["172.19.0.64/26"] description = "Address prefixes of the subnet that hosts the managed system node pool." }Buat file bernama
outputs.tfdan masukkan kode berikut:output "resource_group_name" { value = azurerm_resource_group.rg.name } output "cluster_name" { value = azurerm_kubernetes_automatic_cluster.aks_automatic.name } output "cluster_id" { value = azurerm_kubernetes_automatic_cluster.aks_automatic.id } output "node_resource_group_id" { value = azurerm_kubernetes_automatic_cluster.aks_automatic.node_resource_group_id } output "virtual_network_name" { value = azurerm_virtual_network.vnet.name } output "fully_qualified_domain_name" { value = azurerm_kubernetes_automatic_cluster.aks_automatic.fully_qualified_domain_name }
Menginisialisasi Terraform
Jalankan terraform init untuk menginisialisasi implementasi Terraform. Perintah ini mengunduh penyedia Azure yang diperlukan untuk mengelola sumber daya Azure Anda.
terraform init -upgrade
Buat rencana pelaksanaan Terraform
Jalankan terraform plan untuk membuat rencana pelaksanaan.
terraform plan -out main.tfplan
Terapkan rencana implementasi Terraform
Untuk menerapkan rencana eksekusi pada infrastruktur cloud Anda, jalankan terraform apply.
terraform apply main.tfplan
Membuat kluster Otomatis AKS membutuhkan waktu beberapa menit untuk diselesaikan.
Memverifikasi kluster
Dapatkan nama grup sumber daya Azure dan nama kluster.
resource_group_name=$(terraform output -raw resource_group_name) cluster_name=$(terraform output -raw cluster_name)Jalankan az aks show untuk menampilkan kluster dan mengonfirmasinya menggunakan
AutomaticSKU dan subnet kustom Anda.az aks show --resource-group $resource_group_name --name $cluster_name --query "{name:name, sku:sku, provisioningState:provisioningState, apiServerSubnet:apiServerAccessProfile.subnetId}"
Menyambungkan ke kluster
Untuk mengelola kluster Kube, gunakan klien baris perintah Kube, kubectl. Anda dapat menginstal kubectl secara lokal menggunakan perintah az aks install-cli . Kluster Otomatis AKS dikonfigurasi dengan Microsoft Entra ID untuk kontrol akses berbasis peran (RBAC) Kubernetes .
Konfigurasikan kubectl untuk terhubung ke kluster Kubernetes menggunakan perintah az aks get-credentials.
az aks get-credentials --resource-group $resource_group_name --name $cluster_name
Verifikasi koneksi ke kluster menggunakan perintah kubectl get.
kubectl get nodes
Menyebarkan aplikasi
Untuk menyebarkan aplikasi, Anda menggunakan file manifes untuk membuat semua objek yang diperlukan untuk menjalankan aplikasi AKS Store. File manifes Kubernetes menentukan keadaan kluster yang diinginkan, seperti image 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 Pemesanan : Mengurus pemesanan.
- Rabbit MQ: Antrean pesan untuk pemrosesan pesanan.
Nota
Kami tidak merekomendasikan untuk menjalankan kontainer stateful, seperti Rabbit MQ, tanpa menggunakan penyimpanan persisten untuk produksi. Kontainer ini digunakan di sini untuk kesederhanaan, tetapi sebaiknya gunakan layanan terkelola, seperti Azure Cosmos DB atau Azure Service Bus.
Buat namespace
aks-store-demountuk menyebarkan sumber daya Kubernetes.kubectl create ns aks-store-demoSebarkan aplikasi menggunakan perintah kubectl apply ke dalam namespace
aks-store-demo. File YAML yang menentukan penyebaran berada di GitHub.kubectl apply -n aks-store-demo -f https://raw.githubusercontent.com/Azure-Samples/aks-store-demo/main/aks-store-ingress-quickstart.yamlContoh output berikut menunjukkan penyebaran dan layanan:
statefulset.apps/rabbitmq created configmap/rabbitmq-enabled-plugins 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 ingress/store-front created
Uji aplikasi
Ketika aplikasi berjalan, layanan Kubernetes mengekspos front end aplikasi ke internet. Diperlukan beberapa menit untuk menyelesaikan proses ini.
Gunakan perintah kubectl get pods untuk memeriksa status pod yang disebarkan. Pastikan semua pod berada dalam keadaan
Runningsebelum melanjutkan. Jika ini adalah beban kerja pertama yang Anda deploy, mungkin memerlukan beberapa menit bagi penyediaan node otomatis untuk membuat pool node guna menjalankan pod.kubectl get pods -n aks-store-demoPeriksa alamat IP publik untuk aplikasi tampilan depan toko. Pantau kemajuan menggunakan perintah kubectl get service dengan argumen
--watch.kubectl get ingress store-front -n aks-store-demo --watchOutput ADDRESS untuk layanan
store-frontpada awalnya tampil kosong.NAME CLASS HOSTS ADDRESS PORTS AGE store-front webapprouting.kubernetes.azure.com * 80 12mSetelah ALAMAT berubah dari kosong ke alamat IP publik yang sebenarnya, gunakan
CTRL-Cuntuk menghentikankubectlproses tontonan.Contoh output berikut menunjukkan alamat IP publik yang valid yang ditetapkan ke layanan:
NAME CLASS HOSTS ADDRESS PORTS AGE store-front webapprouting.kubernetes.azure.com * 4.255.22.196 80 12mBuka browser web ke alamat IP eksternal ingress Anda untuk melihat aplikasi Azure Store beraksi.
Hapus kluster tersebut
Jika Anda tidak berencana untuk melalui tutorial AKS, bersihkan sumber daya yang tidak perlu untuk menghindari biaya Azure. Jalankan perintah az group delete untuk menghapus grup sumber daya, layanan kontainer, dan semua sumber daya terkait.
az group delete --name <resource-group> --yes --no-wait
Nota
Kluster AKS dibuat dengan identitas terkelola yang ditetapkan pengguna. Jika Anda tidak memerlukan identitas tersebut lagi, Anda dapat menghapusnya secara manual.
Saat Anda tidak lagi memerlukan sumber daya yang dibuat melalui Terraform, jalankan terraform plan dan tentukan flag destroy.
terraform plan -destroy -out main.destroy.tfplan
Jalankan terraform apply untuk menerapkan rencana pelaksanaan.
terraform apply main.destroy.tfplan
Langkah berikutnya
Dalam panduan cepat ini, Anda mengkonfigurasi kluster Kubernetes menggunakan AKS Otomatis di dalam jaringan virtual kustom dan kemudian menyebarkan 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 selengkapnya tentang AKS Otomatis, lanjutkan ke pengenalan.