Mulai cepat: Menyebarkan kluster Azure Kubernetes Service (AKS) menggunakan Terraform
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 Terraform.
- Jalankan contoh aplikasi multi-kontainer dengan sekelompok layanan mikro dan ujung depan web yang mensimulasikan skenario ritel.
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
- Mulai cepat ini mengasumsikan pemahaman dasar tentang konsep Kube. Untuk informasi lebih, lihat konsep inti Kubernetes untuk Azure Kubernetes Service (AKS).
- Anda memerlukan akun Azure dengan langganan aktif. Jika Anda tidak memilikinya, buat akun secara gratis.
- Ikuti instruksi berdasarkan antarmuka baris perintah Anda.
- Untuk mempelajari selengkapnya tentang membuat kumpulan simpul Windows Server, lihat Membuat kluster AKS yang mendukung kontainer Windows Server.
Catatan
Kumpulan simpul Azure Linux sekarang secara umum tersedia (GA). Untuk mempelajari tentang manfaat dan langkah-langkah penyebaran, lihat Pengantar Host Kontainer Azure Linux untuk AKS.
- Menginstal dan mengonfigurasi Terraform.
- Unduh kubectl.
- Buat nilai acak untuk nama grup sumber daya Azure menggunakan random_pet.
- Buat grup sumber daya Azure menggunakan azurerm_resource_group.
- Akses konfigurasi penyedia AzureRM untuk mendapatkan ID Objek Azure menggunakan azurerm_client_config.
- Buat kluster Kubernetes menggunakan azurerm_kubernetes_cluster.
- Buat azapi_resource sumber daya AzAPI.
- Buat sumber daya AzAPI untuk menghasilkan pasangan kunci SSH menggunakan azapi_resource_action.
Masuk ke akun Azure Anda
Pertama, masuk ke akun Azure Anda dan autentikasi menggunakan salah satu metode yang dijelaskan di bagian berikut.
Skenario autentikasi Terraform dan Azure
Terraform hanya mendukung autentikasi ke Azure melalui Azure CLI. Autentikasi menggunakan Azure PowerShell tidak didukung. Oleh karena itu, meskipun Anda dapat menggunakan modul Azure PowerShell saat melakukan pekerjaan Terraform Anda, Anda harus terlebih dahulu mengautentikasi ke Azure menggunakan Azure CLI.
Artikel ini menjelaskan cara mengautentikasi Terraform ke Azure untuk skenario berikut. Untuk informasi selengkapnya tentang opsi untuk mengautentikasi Terraform ke Azure, lihat Mengautentikasi menggunakan Azure CLI.
- Mengautentikasi melalui akun Microsoft menggunakan Cloud Shell (dengan Bash atau PowerShell)
- Mengautentikasi melalui akun Microsoft menggunakan Windows (dengan Bash atau PowerShell)
- Autentikasi melalui perwakilan layanan:
- Jika Anda tidak memiliki perwakilan layanan, buat perwakilan layanan.
- Mengautentikasi ke Azure menggunakan variabel lingkungan atau mengautentikasi ke Azure menggunakan blok penyedia Terraform
Autentikasi ke Azure melalui akun Microsoft
Akun Microsoft adalah nama pengguna (terkait dengan email dan info masuknya) yang digunakan untuk masuk ke layanan Microsoft - seperti Azure. Akun Microsoft dapat dikaitkan dengan satu atau beberapa langganan Azure, dan salah satu langganan tersebut dijadikan sebagai default.
Langkah-langkah berikut menunjukkan caranya:
- Masuk ke Azure secara interaktif menggunakan akun Microsoft
- Mencantumkan langganan Azure terkait akun (termasuk default)
- Atur langganan saat ini.
Buka baris perintah yang memiliki akses ke Azure CLI.
Jalankan az login tanpa parameter apa pun dan ikuti instruksi untuk masuk ke Azure.
az login
Poin utama:
- Setelah berhasil masuk,
az login
menampilkan daftar langganan Azure yang terkait dengan akun Microsoft yang masuk, termasuk langganan default.
- Setelah berhasil masuk,
Untuk mengonfirmasi langganan Azure saat ini, jalankan az account show.
az account show
Untuk melihat semua nama dan ID langganan Azure untuk akun Microsoft tertentu, jalankan az account list.
az account list --query "[?user.name=='<microsoft_account_email>'].{Name:name, ID:id, Default:isDefault}" --output Table
Poin utama:
- Ganti tempat penampung
<microsoft_account_email>
dengan alamat email akun Microsoft yang langganan Azure-nya ingin Anda cantumkan. - Dengan akun Live - seperti Hotmail atau Outlook - Anda mungkin perlu menentukan alamat email yang sepenuhnya memenuhi syarat. Misalnya, jika alamat email Anda
admin@hotmail.com
, Anda mungkin perlu mengganti tempat penampung denganlive.com#admin@hotmail.com
.
- Ganti tempat penampung
Untuk menggunakan langganan Azure tertentu, jalankan az account set.
az account set --subscription "<subscription_id_or_subscription_name>"
Poin utama:
- Ganti tempat penampung
<subscription_id_or_subscription_name>
dengan ID atau nama langganan yang ingin Anda gunakan. - Memanggil
az account set
tidak menampilkan hasil dari beralih ke langganan Azure yang ditentukan. Namun, Anda dapat menggunakanaz account show
untuk mengonfirmasi bahwa langganan Azure saat ini telah berubah. - Jika Anda menjalankan perintah
az account list
dari langkah sebelumnya, Anda melihat bahwa langganan Azure default telah berubah menjadi langganan yang Anda tentukan menggunakanaz account set
.
- Ganti tempat penampung
Membuat perwakilan layanan
Alat otomatis yang menyebarkan atau menggunakan layanan Azure - seperti Terraform - harus selalu memiliki izin terbatas. Selain masuk aplikasi sebagai pengguna yang memiliki hak istimewa, Azure menawarkan prinsipal layanan.
Pola yang paling umum ialah masuk secara interaktif ke Azure, membuat perwakilan layanan, menguji perwakilan layanan, kemudian menggunakan perwakilan layanan tersebut untuk autentikasi di masa mendatang (baik secara interaktif atau dari skrip Anda).
Untuk membuat perwakilan layanan, masuk ke Azure. Setelah mengautentikasi ke Azure melalui akun Microsoft, kembali ke sini.
Jika Anda membuat perwakilan layanan dari Git Bash, atur variabel lingkungan
MSYS_NO_PATHCONV
. (Langkah ini tidak diperlukan jika Anda menggunakan Cloud Shell.)export MSYS_NO_PATHCONV=1
Poin utama:
- Anda dapat mengatur variabel lingkungan
MSYS_NO_PATHCONV
secara global (untuk semua sesi terminal) atau secara lokal (hanya untuk sesi saat ini). Karena membuat perwakilan layanan bukanlah sesuatu yang sering Anda lakukan, sampel menetapkan nilai untuk sesi saat ini. Untuk mengatur variabel lingkungan ini secara global, tambahkan pengaturan ke file~/.bashrc
.
- Anda dapat mengatur variabel lingkungan
Untuk membuat perwakilan layanan, jalankan az ad sp create-for-rbac.
az ad sp create-for-rbac --name <service_principal_name> --role Contributor --scopes /subscriptions/<subscription_id>
Poin utama:
- Anda dapat mengganti
<service-principal-name>
dengan nama khusus untuk lingkungan Anda atau menghilangkan parameter sepenuhnya. Jika Anda menghilangkan parameter, nama prinsipal layanan dibuat berdasarkan tanggal dan waktu saat ini. - Setelah berhasil diselesaikan,
az ad sp create-for-rbac
menampilkan beberapa nilai. NilaiappId
,password
, dantenant
digunakan di langkah berikutnya. - Kata sandi tidak dapat diambil kembali jika hilang. Maka dari itu, Anda harus menyimpan kata sandi Anda di tempat yang aman. Jika Anda lupa kata sandi, Anda bisa mereset info masuk perwakilan layanan.
- Untuk artikel ini, perwakilan layanan dengan peran Kontributor sedang digunakan. Untuk informasi selengkapnya tentang peran Role-Based Access Control (RBAC), lihat RBAC: Peran bawaan.
- Output dari pembuatan perwakilan layanan ini mencakup info masuk sensitif. Pastikan Anda tidak menyertakan info masuk ini dalam kode atau memasukkan info masuk ke dalam kontrol sumber Anda.
- Untuk informasi selengkapnya tentang opsi saat membuat perwakilan layanan dengan Azure CLI, lihat artikel Buat perwakilan layanan Azure menggunakan Azure CLI.
- Anda dapat mengganti
Tentukan info masuk perwakilan layanan dalam variabel lingkungan
Setelah membuat perwakilan layanan, Anda dapat menentukan info masuknya ke Terraform melalui variabel lingkungan.
Edit file
~/.bashrc
dengan menambahkan variabel lingkungan berikut.export ARM_SUBSCRIPTION_ID="<azure_subscription_id>" export ARM_TENANT_ID="<azure_subscription_tenant_id>" export ARM_CLIENT_ID="<service_principal_appid>" export ARM_CLIENT_SECRET="<service_principal_password>"
Untuk menjalankan skrip
~/.bashrc
, jalankansource ~/.bashrc
(atau singkatannya yang setara. ~/.bashrc
). Anda juga dapat keluar dan membuka kembali Cloud Shell agar skrip dapat berjalan secara otomatis.. ~/.bashrc
Setelah variabel lingkungan ditetapkan, Anda dapat memverifikasi nilainya sebagai berikut:
printenv | grep ^ARM*
Poin utama:
- Seperti halnya variabel lingkungan apa pun, untuk mengakses nilai langganan Azure dari dalam skrip Terraform, gunakan sintaksis berikut:
${env.<environment_variable>}
. Misalnya, untuk mengakses nilaiARM_SUBSCRIPTION_ID
, tentukan${env.ARM_SUBSCRIPTION_ID}
. - Membuat dan menerapkan paket eksekusi Terraform menimbulkan perubahan pada langganan Azure yang terkait dengan perwakilan layanan. Fakta ini terkadang membingungkan jika Anda masuk ke satu langganan Azure dan variabel lingkungan mengarah ke langganan Azure kedua. Mari kita lihat contoh berikut untuk penjelasannya. Katakanlah Anda memiliki dua langganan Azure: SubA dan SubB. Jika langganan Azure saat ini adalah SubA (ditentukan melalui
az account show
) sementara variabel lingkungan mengarah ke SubB, setiap perubahan yang dibuat oleh Terraform ada di SubB. Oleh karena itu, Anda harus masuk ke langganan SubB Anda untuk menjalankan perintah Azure CLI atau perintah Azure PowerShell guna melihat perubahan Anda.
Tentukan info masuk perwakilan layanan dalam blok penyedia Terraform
Blok penyedia Azure mendefinisikan sintaksis yang memungkinkan Anda menentukan informasi autentikasi langganan Azure.
terraform {
required_providers {
azurerm = {
source = "hashicorp/azurerm"
version = "~>2.0"
}
}
}
provider "azurerm" {
features {}
subscription_id = "<azure_subscription_id>"
tenant_id = "<azure_subscription_tenant_id>"
client_id = "<service_principal_appid>"
client_secret = "<service_principal_password>"
}
# Your code goes here
Perhatian
Kemampuan untuk menentukan info masuk langganan Azure Anda dalam file konfigurasi Terraform bisa sangat mudah - terutama saat pengujian. Namun, tidak disarankan untuk menyimpan info masuk dalam file teks yang jelas yang dapat dilihat oleh individu yang tidak tepercaya.
Menerapkan kode Terraform
Catatan
Kode sampel untuk artikel ini terletak di repositori GitHub Azure Terraform. Anda dapat melihat file log yang berisi hasil pengujian dari terraform versi saat ini dan sebelumnya.
Buat direktori yang dapat Anda gunakan untuk menguji sampel kode Terraform dan menjadikannya direktori Anda saat ini.
Buat file bernama
providers.tf
dan masukkan kode berikut:terraform { required_version = ">=1.0" required_providers { azapi = { source = "azure/azapi" version = "~>1.5" } azurerm = { source = "hashicorp/azurerm" version = "~>3.0" } random = { source = "hashicorp/random" version = "~>3.0" } time = { source = "hashicorp/time" version = "0.9.1" } } } provider "azurerm" { features {} }
Buat file bernama
ssh.tf
dan masukkan kode berikut:resource "random_pet" "ssh_key_name" { prefix = "ssh" separator = "" } resource "azapi_resource_action" "ssh_public_key_gen" { type = "Microsoft.Compute/sshPublicKeys@2022-11-01" resource_id = azapi_resource.ssh_public_key.id action = "generateKeyPair" method = "POST" response_export_values = ["publicKey", "privateKey"] } resource "azapi_resource" "ssh_public_key" { type = "Microsoft.Compute/sshPublicKeys@2022-11-01" name = random_pet.ssh_key_name.id location = azurerm_resource_group.rg.location parent_id = azurerm_resource_group.rg.id } output "key_data" { value = jsondecode(azapi_resource_action.ssh_public_key_gen.output).publicKey }
Buat file bernama
main.tf
dan masukkan kode berikut:# Generate random resource group name resource "random_pet" "rg_name" { prefix = var.resource_group_name_prefix } resource "azurerm_resource_group" "rg" { location = var.resource_group_location name = random_pet.rg_name.id } resource "random_pet" "azurerm_kubernetes_cluster_name" { prefix = "cluster" } resource "random_pet" "azurerm_kubernetes_cluster_dns_prefix" { prefix = "dns" } resource "azurerm_kubernetes_cluster" "k8s" { location = azurerm_resource_group.rg.location name = random_pet.azurerm_kubernetes_cluster_name.id resource_group_name = azurerm_resource_group.rg.name dns_prefix = random_pet.azurerm_kubernetes_cluster_dns_prefix.id identity { type = "SystemAssigned" } default_node_pool { name = "agentpool" vm_size = "Standard_D2_v2" node_count = var.node_count } linux_profile { admin_username = var.username ssh_key { key_data = jsondecode(azapi_resource_action.ssh_public_key_gen.output).publicKey } } network_profile { network_plugin = "kubenet" load_balancer_sku = "standard" } }
Buat file bernama
variables.tf
dan masukkan kode berikut:variable "resource_group_location" { type = string default = "eastus" 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 "node_count" { type = number description = "The initial quantity of nodes for the node pool." default = 3 } variable "msi_id" { type = string description = "The Managed Service Identity ID. Set this value if you're running this example using Managed Identity as the authentication method." default = null } variable "username" { type = string description = "The admin username for the new cluster." default = "azureadmin" }
Buat file bernama
outputs.tf
dan masukkan kode berikut:output "resource_group_name" { value = azurerm_resource_group.rg.name } output "kubernetes_cluster_name" { value = azurerm_kubernetes_cluster.k8s.name } output "client_certificate" { value = azurerm_kubernetes_cluster.k8s.kube_config[0].client_certificate sensitive = true } output "client_key" { value = azurerm_kubernetes_cluster.k8s.kube_config[0].client_key sensitive = true } output "cluster_ca_certificate" { value = azurerm_kubernetes_cluster.k8s.kube_config[0].cluster_ca_certificate sensitive = true } output "cluster_password" { value = azurerm_kubernetes_cluster.k8s.kube_config[0].password sensitive = true } output "cluster_username" { value = azurerm_kubernetes_cluster.k8s.kube_config[0].username sensitive = true } output "host" { value = azurerm_kubernetes_cluster.k8s.kube_config[0].host sensitive = true } output "kube_config" { value = azurerm_kubernetes_cluster.k8s.kube_config_raw sensitive = true }
Inisialisasi Terraform
Jalankan terraform init untuk menginisialisasi penyebaran Terraform. Perintah ini mengunduh penyedia Azure yang diperlukan untuk mengelola sumber daya Azure Anda.
terraform init -upgrade
Poin utama:
- Parameter
-upgrade
meningkatkan plugin penyedia yang diperlukan ke versi terbaru yang sesuai dengan batasan versi konfigurasi.
Buat rencana eksekusi Terraform
Jalankan terraform plan untuk membuat rencana eksekusi.
terraform plan -out main.tfplan
Poin utama:
- Perintah
terraform plan
membuat rencana eksekusi, tetapi tidak menjalankannya. Perintah ini justru menentukan tindakan yang diperlukan untuk membuat konfigurasi yang ditentukan dalam file konfigurasi Anda. Pola ini memungkinkan Anda memastikan apakah rencana eksekusi telah sesuai dengan ekspektasi Anda sebelum membuat perubahan pada sumber daya aktual. - Parameter
-out
opsional memungkinkan Anda menentukan file output untuk rencana. Menggunakan parameter-out
memastikan bahwa rencana yang Anda tinjau benar-benar sesuai dengan yang diterapkan.
Terapkan rencana eksekusi Terraform
Jalankan terraform apply untuk menerapkan rencana eksekusi ke infrastruktur cloud Anda.
terraform apply main.tfplan
Poin utama:
- Contoh
terraform apply
perintah mengasumsikan Anda sebelumnya menjalankanterraform plan -out main.tfplan
. - Jika Anda menentukan nama file yang berbeda untuk parameter
-out
, gunakan nama file yang sama dalam panggilan keterraform apply
. - Jika Anda tidak menggunakan parameter
-out
, panggilterraform apply
tanpa parameter apa pun.
Memverifikasi hasil
Dapatkan nama grup sumber daya Azure menggunakan perintah berikut.
resource_group_name=$(terraform output -raw resource_group_name)
Tampilkan nama kluster Kubernetes baru Anda menggunakan perintah az aks list .
az aks list \ --resource-group $resource_group_name \ --query "[].{\"K8s cluster name\":name}" \ --output table
Dapatkan konfigurasi Kubernetes dari status Terraform dan simpan dalam file yang
kubectl
dapat dibaca menggunakan perintah berikut.echo "$(terraform output kube_config)" > ./azurek8s
Verifikasi bahwa perintah sebelumnya tidak menambahkan karakter EOT ASCII menggunakan perintah berikut.
cat ./azurek8s
Poin utama:
- Jika Anda melihat
<< EOT
di awal danEOT
di akhir, hapus karakter ini dari file. Jika tidak, Anda mungkin menerima pesan kesalahan berikut:error: error loading config file "./azurek8s": yaml: line 2: mapping values are not allowed in this context
- Jika Anda melihat
Atur variabel lingkungan sehingga
kubectl
dapat mengambil konfigurasi yang benar menggunakan perintah berikut.export KUBECONFIG=./azurek8s
Verifikasi kesehatan kluster menggunakan
kubectl get nodes
perintah .kubectl get nodes
Poin utama:
- Saat Anda membuat kluster AKS, pemantauan diaktifkan untuk menangkap metrik kesehatan untuk node kluster dan pod. Metrik kesehatan tersebut tersedia di portal Azure. Untuk informasi lebih lanjut tentang pemantauan kesehatan kontainer, lihat Memantau kesehatan Azure Kubernetes Service.
- Beberapa nilai kunci diklasifikasikan sebagai output saat Anda menerapkan rencana eksekusi Terraform. Misalnya, alamat host, nama pengguna kluster AKS, dan kata sandi kluster AKS adalah output.
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
kubectl apply
perintah 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
Ketika aplikasi berjalan, layanan Kubernetes mengekspos front end aplikasi ke internet. Diperlukan beberapa menit untuk menyelesaikan proses ini.
Periksa status pod yang disebarkan menggunakan
kubectl get pods
perintah . Buat semua pod sebelumRunning
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.
Membersihkan sumber daya
Menghapus sumber daya AKS
Ketika Anda tidak lagi membutuhkan sumber daya yang dibuat melalui Terraform, lakukan langkah-langkah berikut:
Jalankan terraform plan dan tentukan bendera
destroy
.terraform plan -destroy -out main.destroy.tfplan
Poin utama:
- Perintah
terraform plan
membuat rencana eksekusi, tetapi tidak menjalankannya. Perintah ini justru menentukan tindakan yang diperlukan untuk membuat konfigurasi yang ditentukan dalam file konfigurasi Anda. Pola ini memungkinkan Anda memastikan apakah rencana eksekusi telah sesuai dengan ekspektasi Anda sebelum membuat perubahan pada sumber daya aktual. - Parameter
-out
opsional memungkinkan Anda menentukan file output untuk rencana. Menggunakan parameter-out
memastikan bahwa rencana yang Anda tinjau benar-benar sesuai dengan yang diterapkan.
- Perintah
Jalankan terraform apply untuk menerapkan rencana eksekusi.
terraform apply main.destroy.tfplan
Menghapus perwakilan layanan
Dapatkan ID perwakilan layanan menggunakan perintah berikut.
sp=$(terraform output -raw sp)
Hapus perwakilan layanan menggunakan perintah az ad sp delete .
az ad sp delete --id $sp
- Menginstal Azure Developer CLI (AZD)
- Menginstal dan mengonfigurasi Terraform.
- Anda dapat meninjau kode aplikasi yang digunakan dalam repositori Azure-Samples/aks-store-demo.
Mengkloning templat Azure Developer CLI
Azure Developer CLI memungkinkan Anda mengunduh sampel dengan cepat dari repositori Azure-Samples . Dalam mulai cepat kami, Anda mengunduh aks-store-demo
aplikasi. Untuk informasi selengkapnya tentang kasus penggunaan umum, lihat azd
gambaran umum.
Kloning templat demo penyimpanan AKS dari repositori Azure-Samples menggunakan
azd init
perintah dengan--template
parameter .azd init --template Azure-Samples/aks-store-demo
Masukkan nama lingkungan untuk proyek Anda yang hanya menggunakan karakter alfanumerik dan tanda hubung, seperti aks-terraform-1.
Enter a new environment name: aks-terraform-1
Masuk ke akun Azure Cloud Anda
azd
Templat berisi semua kode yang diperlukan untuk membuat layanan, tetapi Anda perlu masuk ke akun Azure Anda untuk menghosting aplikasi di AKS.
Masuk ke akun Anda menggunakan
azd auth login
perintah .azd auth login
Salin kode perangkat yang muncul di output dan tekan enter untuk masuk.
Start by copying the next code: XXXXXXXXX Then press enter and continue to log in from your browser...
Penting
Jika Anda menggunakan komputer virtual di luar jaringan atau GitHub Codespace, kebijakan keamanan Azure tertentu menyebabkan konflik saat digunakan untuk masuk dengan
azd auth login
. Jika Anda mengalami masalah di sini, Anda dapat mengikuti solusi azd auth yang disediakan, yang melibatkan penggunaancurl
permintaan ke URL localhost tempat Anda dialihkan setelah menjalankanazd auth login
.Autentikasi dengan kredensial Anda di halaman masuk organisasi Anda.
Konfirmasikan bahwa Anda mencoba menyambungkan dari Azure CLI.
Verifikasi pesan "Autentikasi kode perangkat selesai. Masuk ke Azure." muncul di terminal asli Anda.
Waiting for you to complete authentication in the browser... Device code authentication completed. Logged in to Azure.
solusi azd auth
Solusi ini mengharuskan Anda menginstal Azure CLI .
Buka jendela terminal dan masuk dengan Azure CLI menggunakan
az login
perintah dengan parameter yang--scope
diatur kehttps://graph.microsoft.com/.default
.az login --scope https://graph.microsoft.com/.default
Anda harus diarahkan ke halaman autentikasi di tab baru untuk membuat token akses browser, seperti yang ditunjukkan dalam contoh berikut:
https://login.microsoftonline.com/organizations/oauth2/v2.0/authorize?clientid=<your_client_id>.
Salin URL localhost halaman web yang Anda terima setelah mencoba masuk dengan
azd auth login
.Di jendela terminal baru, gunakan permintaan berikut
curl
untuk masuk. Pastikan Anda mengganti<localhost>
tempat penampung dengan URL localhost yang Anda salin di langkah sebelumnya.curl <localhost>
Login yang berhasil menghasilkan halaman web HTML, seperti yang ditunjukkan dalam contoh berikut:
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <meta http-equiv="refresh" content="60;url=https://docs.microsoft.com/cli/azure/"> <title>Login successfully</title> <style> body { font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; } code { font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; display: inline-block; background-color: rgb(242, 242, 242); padding: 12px 16px; margin: 8px 0px; } </style> </head> <body> <h3>You have logged into Microsoft Azure!</h3> <p>You can close this window, or we will redirect you to the <a href="https://docs.microsoft.com/cli/azure/">Azure CLI documentation</a> in 1 minute.</p> <h3>Announcements</h3> <p>[Windows only] Azure CLI is collecting feedback on using the <a href="https://learn.microsoft.com/windows/uwp/security/web-account-manager">Web Account Manager</a> (WAM) broker for the login experience.</p> <p>You may opt-in to use WAM by running the following commands:</p> <code> az config set core.allow_broker=true<br> az account clear<br> az login </code> </body> </html>
Tutup terminal saat ini dan buka terminal asli. Anda akan melihat daftar JSON langganan Anda.
id
Salin bidang langganan yang ingin Anda gunakan.Atur
az account set
langganan Anda menggunakan perintah .az account set --subscription <subscription_id>
Membuat dan menyebarkan sumber daya untuk kluster Anda
Untuk menyebarkan aplikasi, Anda menggunakan azd up
perintah untuk membuat semua objek yang diperlukan untuk menjalankan aplikasi AKS Store.
- File
azure.yaml
mendefinisikan status kluster yang diinginkan, seperti gambar kontainer mana yang akan diambil dan menyertakan 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 Cosmos DB atau Azure Bus Layanan.
Menyebarkan sumber daya aplikasi
azd
Templat untuk mulai cepat ini membuat grup sumber daya baru dengan kluster AKS dan Azure Key Vault. Brankas kunci menyimpan rahasia klien dan menjalankan layanan di pets
namespace layanan.
Buat semua sumber daya aplikasi menggunakan
azd up
perintah .azd up
azd up
menjalankan semua kait di dalamazd-hooks
folder untuk melakukan pra-pendaftaran, provisi, dan menyebarkan layanan aplikasi.Kustomisasi kait untuk menambahkan kode kustom ke
azd
dalam tahap alur kerja. Untuk informasi selengkapnya, lihatazd
referensi hook .Pilih langganan Azure untuk penggunaan tagihan Anda.
? Select an Azure Subscription to use: [Use arrows to move, type to filter] > 1. My Azure Subscription (xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx)
Pilih wilayah untuk menyebarkan aplikasi Anda.
Select an Azure location to use: [Use arrows to move, type to filter] 1. (South America) Brazil Southeast (brazilsoutheast) 2. (US) Central US (centralus) 3. (US) East US (eastus) > 43. (US) East US 2 (eastus2) 4. (US) East US STG (eastusstg) 5. (US) North Central US (northcentralus) 6. (US) South Central US (southcentralus)
azd
secara otomatis menjalankan kait praprovisi dan pascaprovisi untuk membuat sumber daya untuk aplikasi Anda. Diperlukan beberapa menit untuk menyelesaikan proses ini. Setelah selesai, Anda akan melihat output yang mirip dengan contoh berikut:SUCCESS: Your workflow to provision and deploy to Azure completed in 9 minutes 40 seconds.
Hasilkan paket Terraform
Dalam templat Pengembang Azure Anda, /infra/terraform
folder berisi semua kode yang digunakan untuk menghasilkan paket Terraform.
Terraform menyebarkan dan menjalankan perintah menggunakan terraform apply
sebagai bagian azd
dari langkah provisi. Setelah selesai, Anda akan melihat output yang mirip dengan contoh berikut:
Plan: 5 to add, 0 to change, 0 to destroy.
...
Saved the plan to: /workspaces/aks-store-demo/.azure/aks-terraform-azd/infra/terraform/main.tfplan
Uji aplikasi
Ketika aplikasi berjalan, layanan Kubernetes mengekspos front end aplikasi ke internet. Diperlukan beberapa menit untuk menyelesaikan proses ini.
Atur namespace Anda sebagai namespace
pets
demo menggunakankubectl set-context
perintah .kubectl config set-context --current --namespace=pets
Periksa status pod yang disebarkan menggunakan
kubectl get pods
perintah . Pastikan semua pod sebelumRunning
melanjutkan.kubectl get pods
Periksa alamat IP publik untuk aplikasi store-front dan pantau kemajuan menggunakan
kubectl get service
perintah dengan--watch
argumen .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
.Contoh output 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
Setelah selesai dengan mulai cepat, bersihkan sumber daya yang tidak perlu untuk menghindari biaya Azure.
Hapus semua sumber daya yang dibuat dalam mulai cepat menggunakan
azd down
perintah .azd down
Konfirmasikan keputusan Anda untuk menghapus semua sumber daya yang digunakan dari langganan Anda dengan mengetik
y
dan menekanEnter
.? Total resources to delete: 14, are you sure you want to continue? (y/N)
Izinkan pembersihan untuk menggunakan kembali variabel mulai cepat jika berlaku dengan mengetik
y
dan menekanEnter
.[Warning]: These resources have soft delete enabled allowing them to be recovered for a period or time after deletion. During this period, their names can't be reused. In the future, you can use the argument --purge to skip this confirmation.
Memecahkan masalah Terraform pada Azure
Memecahkan masalah umum saat menggunakan Terraform di Azure.
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.