วิธี Deploy Azure Container Registry (ACR) ไปยัง Azure Kubernetes Service (AKS) แบบง่ายๆ ??

ThikOn Wachiraarunwong
PranWorks
Published in
2 min readAug 8, 2018

สิ่งที่ควรจะเริ่มต้นก่อนที่จะ Deploy คือเข้าไปสร้างและกำหนดค่า Config ต่างๆ บน Azure Portal ก่อน

  1. Azure Container Registry : ขั้นตอนนี้เราสร้าง Image จากสิ่งที่เราพัฒนา และได้ทำการ Push เข้าไปเก็บไว้ใน Repository ของ Azure เป็นที่เรียบร้อยแล้ว
  2. Azure Kubernetes Service: สร้าง “Kubernetes Service” บน Azure Portal แล้ว (Scaling เลือกตามขนาดที่เราจะใช้งานได้เลย)

เมื่อผ่านขั้นตอนดังกล่าวแล้วก็มาลุยกันเลย ..

5 นาทีปลอมชัดๆ

# เริ่มต้นด้วยการ 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 ได้แล้ว

--

--