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.
Mulai menggunakan Azure Linux Container Host dengan menggunakan Azure CLI untuk menyebarkan Azure Linux Container Host untuk kluster AKS.
Dalam panduan memulai cepat ini, Anda mempelajari cara:
- Instal Kubernetes CLI,
kubectl. - Buat grup sumber daya Azure.
- Membuat dan menyebarkan kluster Azure Linux Container Host.
- Konfigurasikan
kubectluntuk menyambungkan ke kluster Azure Linux Container Host Anda. - Sebarkan contoh aplikasi multi-kontainer ke kluster.
Prerequisites
-
Jika Anda tidak memiliki akun Azure, buat akun gratis sebelum memulai.
Gunakan lingkungan Bash di Azure Cloud Shell. Untuk informasi selengkapnya, lihat Mulai Cepat Azure Cloud Shell - Bash.
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 penginstalan lokal, masuk ke Azure CLI menggunakan perintah
az login. Untuk menyelesaikan proses autentikasi, ikuti langkah-langkah yang ditampilkan di terminal Anda. Untuk opsi masuk lainnya, lihat Masuk dengan Azure CLI. - Saat diminta, instal ekstensi Azure CLI saat pertama kali digunakan. Untuk informasi selengkapnya tentang ekstensi, lihat Menggunakan ekstensi dengan Azure CLI.
- Jalankan
az versionuntuk menemukan versi dan pustaka dependen yang diinstal. Untuk meningkatkan ke versi terbaru, jalankanaz upgrade.
- Jika Anda menggunakan penginstalan lokal, masuk ke Azure CLI menggunakan perintah
Mengatur variabel lingkungan
Atur variabel lingkungan berikut untuk membuat nama sumber daya unik untuk setiap penyebaran:
export RESOURCE_GROUP="<your-resource-group-name>"
export REGION="<your-region>"
export CLUSTER_NAME="<your-cluster-name>"
Buat grup sumber daya
Grup sumber daya Azure adalah grup logis tempat sumber daya Azure disebarkan dan dikelola. Saat membuat grup sumber daya di Azure, Anda diharuskan menentukan lokasi. Lokasi ini adalah lokasi penyimpanan metadata grup sumber daya Anda dan tempat sumber daya Anda berjalan di Azure jika Anda tidak menentukan wilayah lain saat membuat sumber daya.
Buat grup sumber daya menggunakan perintah az group create.
az group create --name $RESOURCE_GROUP --location $REGION
Contoh output:
{
"id": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/$RESOURCE_GROUP",
"location": "$REGION",
"managedBy": null,
"name": "$RESOURCE_GROUP",
"properties": {
"provisioningState": "Succeeded"
},
"tags": null,
"type": "Microsoft.Resources/resourceGroups"
}
Membuat kluster Host Kontainer Azure Linux
Buat kluster AKS Azure Linux Container Host menggunakan perintah az aks create dengan parameter --os-sku diatur ke AzureLinux.
az aks create --name $CLUSTER_NAME --resource-group $RESOURCE_GROUP --os-sku AzureLinux
Setelah beberapa menit, perintah selesai dan kembalikan informasi berformat JSON tentang kluster.
Menyambungkan ke kluster
Untuk mengelola kluster Kubernetes, gunakan klien baris perintah Kubernetes, kubectl.
kubectl sudah diinstal jika Anda menggunakan Azure Cloud Shell. Untuk menginstal kubectl secara lokal, gunakan az aks install-cli perintah .
Konfigurasikan
kubectluntuk terhubung ke kluster Kubernetes menggunakan perintahaz aks get-credentials. Perintah ini mengunduh kredensial dan mengonfigurasi CLI Kubernetes agar menggunakannya.az aks get-credentials --resource-group $RESOURCE_GROUP --name $CLUSTER_NAMEVerifikasi koneksi ke kluster Anda menggunakan
kubectl getperintah . Perintah ini menampilkan daftar node kluster.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 status kluster yang diinginkan, seperti citra 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.
Note
Kami tidak merekomendasikan untuk menjalankan kontainer stateful, seperti Rabbit MQ, tanpa menggunakan penyimpanan persisten untuk produksi. Ini digunakan di sini untuk kesederhanaan, tetapi sebaiknya gunakan layanan terkelola, seperti Azure Cosmos DB atau Azure Service Bus.
Buat file bernama
aks-store-quickstart.yamldan salin dalam manifes berikut:apiVersion: apps/v1 kind: StatefulSet metadata: name: rabbitmq spec: serviceName: rabbitmq 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 startupProbe: httpGet: path: /health port: 3000 failureThreshold: 5 initialDelaySeconds: 20 periodSeconds: 10 readinessProbe: httpGet: path: /health port: 3000 failureThreshold: 3 initialDelaySeconds: 3 periodSeconds: 5 livenessProbe: httpGet: path: /health port: 3000 failureThreshold: 5 initialDelaySeconds: 3 periodSeconds: 3 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 env: - name: AI_SERVICE_URL value: "http://ai-service:5001/" resources: requests: cpu: 1m memory: 1Mi limits: cpu: 2m memory: 20Mi readinessProbe: httpGet: path: /health port: 3002 failureThreshold: 3 initialDelaySeconds: 3 periodSeconds: 5 livenessProbe: httpGet: path: /health port: 3002 failureThreshold: 5 initialDelaySeconds: 3 periodSeconds: 3 --- 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 startupProbe: httpGet: path: /health port: 8080 failureThreshold: 3 initialDelaySeconds: 5 periodSeconds: 5 readinessProbe: httpGet: path: /health port: 8080 failureThreshold: 3 initialDelaySeconds: 3 periodSeconds: 3 livenessProbe: httpGet: path: /health port: 8080 failureThreshold: 5 initialDelaySeconds: 3 periodSeconds: 3 --- apiVersion: v1 kind: Service metadata: name: store-front spec: ports: - port: 80 targetPort: 8080 selector: app: store-front type: LoadBalancerJika 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 applyperintah dan tentukan nama manifes YAML Anda.kubectl apply -f aks-store-quickstart.yaml
Uji aplikasi
Anda dapat memvalidasi bahwa aplikasi berjalan dengan mengunjungi alamat IP publik atau URL aplikasi.
Dapatkan URL aplikasi menggunakan perintah berikut:
runtime="5 minutes"
endtime=$(date -ud "$runtime" +%s)
while [[ $(date -u +%s) -le $endtime ]]
do
STATUS=$(kubectl get pods -l app=store-front -o 'jsonpath={..status.conditions[?(@.type=="Ready")].status}')
echo $STATUS
if [ "$STATUS" == 'True' ]
then
export IP_ADDRESS=$(kubectl get service store-front --output 'jsonpath={..status.loadBalancer.ingress[0].ip}')
echo "Service IP Address: $IP_ADDRESS"
break
else
sleep 10
fi
done
curl $IP_ADDRESS
Hasil:
<!doctype html>
<html lang="">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width,initial-scale=1">
<link rel="icon" href="/favicon.ico">
<title>store-front</title>
<script defer="defer" src="/js/chunk-vendors.df69ae47.js"></script>
<script defer="defer" src="/js/app.7e8cfbb2.js"></script>
<link href="/css/app.a5dc49f6.css" rel="stylesheet">
</head>
<body>
<div id="app"></div>
</body>
</html>
echo "You can now visit your web server at $IP_ADDRESS"
Hapus kluster tersebut
Jika Anda tidak lagi membutuhkannya, Anda dapat membersihkan sumber daya yang tidak perlu untuk menghindari biaya Azure.
Hapus grup sumber daya Azure dan semua sumber daya terkait menggunakan perintah az group delete.
az group delete --name $RESOURCE_GROUP --yes --no-wait
Konten terkait
Dalam panduan cepat ini, Anda menerapkan kluster Azure Linux Container Host. Untuk mempelajari selengkapnya tentang Azure Linux Container Host, lihat sumber daya berikut: