วิธี Deploy Azure Container Registry (ACR) ไปยัง Azure Kubernetes Service (AKS) แบบง่ายๆ ??
สิ่งที่ควรจะเริ่มต้นก่อนที่จะ Deploy คือเข้าไปสร้างและกำหนดค่า Config ต่างๆ บน Azure Portal ก่อน
- Azure Container Registry : ขั้นตอนนี้เราสร้าง Image จากสิ่งที่เราพัฒนา และได้ทำการ Push เข้าไปเก็บไว้ใน Repository ของ Azure เป็นที่เรียบร้อยแล้ว
- Azure Kubernetes Service: สร้าง “Kubernetes Service” บน Azure Portal แล้ว (Scaling เลือกตามขนาดที่เราจะใช้งานได้เลย)
เมื่อผ่านขั้นตอนดังกล่าวแล้วก็มาลุยกันเลย ..
# เริ่มต้นด้วยการ Login ไปยัง Azure Container Registry
az acr login -n [ACR NAME]
# เรียกดู Key ที่เราได้จาก ACR
az acr credential show -n [ACR NAME]
docker login [ACR NAME].azurecr.io -u [ACR NAME] -p [PASSWORD FROM UPPER]
หมายเหตุ: แนะนำให้ save เก็บไว้ที่อื่นก่อนจะได้ไม่ต้องพิมพ์อีก
กระโดดข้ามไปยังฝั่ง Azure Kubernetes Service ขั้นตอนแรกให้ติดตั้ง kubectl ก่อน
az aks install-cli
ถ้ามัน error หรือไม่ได้ก็ไปขโมย url ด้านในมา Download เองเลย
# เรียกดูข้อมูลต่างๆ จาก Cluster ที่สร้างไว้บน Azure และคำสั่งเรียกดู pool ที่กำลังทำงานอยู่
az aks get-credentials -g [RESOURCE GROUP NAME] -n [AKS NAME]
kubectl get nodes
# เมื่อทุกอย่างพร้อมแล้วก็มาเพิ่มสิทธิการ pull image ให้กับ AKS บน ACR ถ้าไม่ทำขั้นตอนนี้เราจะไม่สามารถสร้าง pods ที่สามารถ pull image ได้จะติด error ที่เกี่ยวข้องกับ Image
kubectl create secret docker-registry [SECRET NAME FROM AZ LOGIN] --docker-server=[ACR NAME].azurecr.io --docker-username=[ACR NAME] --docker-password=[PASSWORD FROM AZ LOGIN] --docker-email=[EMAIL ON ACTIVE DIRECTORY]
#เมื่อทำ command ทุกคำสั่งที่ผ่านมาแล้วเราสามารถเช็ค secret key ที่ได้ด้วยคำสั่ง
kubectl describe secret
ทำมาตั้งนานพึ่งจะให้ pull image จาก ACR บน AKS ได้..หลังจากนี้จะเป็นการ Deploy ขึ้นไปยัง Kubernetes
#สร้างไฟล์ [deployment name].yml
apiVersion: apps/v1
kind: Deployment
metadata:
name: sample-api
spec:
replicas: 1
template:
metadata:
labels:
app: sample-api
spec:
containers:
- name: sample-api
image: [ACR NAME].azurecr.io/[REPOSITORY NAME]:[VERSION]
ports:
- containerPort: 80
imagePullSecrets:
- name: [SECRET NAME FROM AZ LOGIN]
---
apiVersion: v1
kind: Service
metadata:
name: sample-api
spec:
type: LoadBalancer
ports:
- port: 80
selector:
app: sample-api
ก่อนที่จะใช้คำสั่งถัดไปให้ไปยัง Directory ที่ไฟล์ดังกล่าวอยู่และใช้คำสั่ง เพื่อสร้าง
kubectl create -f [DEPLOY FILE NAME].yml
รอสั้กครู่…
kubectl get service
kubectl get pods
เพื่อดู สถานะของ service และ pods ที่เราสร้างว่า พร้อมหรือยัง แล้ว…ถ้ามี Image ใหม่ละจะ Update อย่างไร
kubectl set image deployment/[APP NAME IN *.YML FILE] [IMAGE NAME]=[ACR NAME].azurecr.io/[IMAGE NAME]:[NEW VERSION]
เท่านี้ก็ Deploy เจ้า Container ขึ้นไปยัง Kubernetes Service ที่อยู่บน Azure ได้แล้ว