วันนี้มีเรื่องเร่งด่วน เกี่ยวกับ การ scale out Amazon EKS ก็เลยมาเขียนไว้ กันลืม .. และเป็นการแบ่งปันความรู้ เผื่อเพื่อนๆ ท่านอื่น เจอปัญหาแบบผม และต้องการแก้ไข ให้เร็วที่สุด ..
Elastic Kubernetes Service (Amazon EKS) เป็นอีก service นึงบน AWS ที่เป็นที่นิยมใช้งานกัน ทำให้เราไม่ต้องยุ่งยาก ในการสร้าง kubernetes (k8s) cluster เอง .. โดยเราสามารถ create k8s cluster ของเราขึ้นมาใช้ได้ง่ายๆ ดังนี้ ..
0. Create EKS Cluster
eksctl create cluster \
--name tono-eks \
--version 1.19 \
--region ap-southeast-1 \
--nodegroup-name t3-medium \
--node-type t3.medium \
--nodes 3 \
--nodes-min 1 \
--nodes-max 4 \
--ssh-access=true \
--ssh-public-key tono-eks \
--managed --profile tono-admin
0.1 Update kubernetes config
จากนั้น ให้เราทำการ update kubernetes config (~/.kube/config) ด้วยคำสั่ง ..
aws eks --region ap-southeast-1 update-kubeconfig --name tono-eks --profile tono-admin
เพียงเท่านี้ เราก็จะมี k8s cluster ของเราไว้ใช้งานแล้วครับ .. ซึ่งถ้าเรา install เองแบบ k8s hard way จะยุ่งยากมากกกกกก (ก.ไก่ ล้านตัว) +___+
*** เพิ่มเติม –profile tono-admin คือให้ ไปใช้ profile ที่ชื่อ tono-admin ที่เรา config ไว้ใน ~/.aws/credentials
แต่เรื่องมันไม่จบเพียงเท่านี้ครับ .. เมื่อเราใช้ไปสักพักนึง EKS Cluster ที่เราสร้างขึ้นมาใช้งาน อาจจะไม่เพียงพอที่จะรองรับ load สูงๆ ได้ .. ที่หน้า console ของ AWS EKS เอง จะมีแค่ให้เลือก เพิ่มจำนวน worker node เท่านั้น ไม่สามารถ แก้ไข instance type เพื่อเพิ่ม spec ได้โดยตรง .. (ทำได้ แต่ต้องไปแก้ Auto Scaling groups ซึ่งยุ่งยาก พอสมควร) แต่เรามีวิธีการใช้ CLI eksctl ในการปรับแต่ง EKS Cluster ของเรา ง่ายๆ ดังนี้ครับ ..
ตัวอย่าง ผมจะเปลี่ยนจากเดิม ที่ใช้ instance type จาก t3.medium เป็น t3.xlarge และ version 1.19 –> 1.20 นะครับ .. ก็จะมี step ดังต่อไปนี้ ..
1. Check EKS node group
eksctl get nodegroups --cluster=tono-eks --profile tono-admin
CLUSTER NODEGROUP STATUS CREATED MIN SIZE MAX SIZE DESIRED CAPACITY INSTANCE TYPE IMAGE ID ASG NAME
tono-eks t3-medium ACTIVE 2021-04-01T04:26:02Z 1 4 3 t3.medium AL2_x86_64 eks-cabc45d7-245e-c62e-ca22-bba57282fd0a
จะเห็นว่า ตอนนี้ spec ของ EKS Cluster เรา มีรายละเอียดดังด้านบน
2. Create new node group
eksctl create nodegroup \
--cluster tono-eks \
--version 1.20 \
--name t3-xlarge \
--node-type t3.xlarge \
--nodes 3 \
--nodes-min 1 \
--nodes-max 4 \
--node-ami auto --profile tono-admin
รอจนเสร็จ จะขึ้น all nodegroups have up-to-date configuration
3. Delete old node group
eksctl delete nodegroup --cluster tono-eks --name t3-medium --profile tono-admin
รอจนเสร็จ จะขึ้น deleted 1 nodegroup(s) from cluster “tono-eks”
จากนั้นเราก็จะได้ EKS Cluster เป็น worker node ชุดใหม่ ครับ ดังรูป ..
หรือถ้าไม่มี Lens (k8s monitoring tools) ไว้ดู status ของ EKS Cluster แบบผม ก็สามารถใช้ CLI kubectl ได้ครับ ดังนี้
4. Show EKS nodes
kubectl get node
NAME STATUS ROLES AGE VERSION
ip-192-168-31-151.ap-southeast-1.compute.internal Ready 13m v1.20.4-eks-6b7464
ip-192-168-54-97.ap-southeast-1.compute.internal Ready 13m v1.20.4-eks-6b7464
ip-192-168-74-140.ap-southeast-1.compute.internal Ready 13m v1.20.4-eks-6b7464
ปล. สำหรับท่านที่ใช้ k8s แล้วต้องการความสะดวก ในการ monitoring แนะนำ Lens ครับ สะดวกมากกว่าใช้ CLI (kubectl)
Lens: https://k8slens.dev/
เรียบร้อยละครับ เพียงเท่านี้ เราก็สามารถ เพิ่ม spec หรือ scale out EKS Cluster ของเรา ให้รองรับ load สูงๆ ได้แบบง่ายๆ และรวดเร็ว ทันใช้งาน ครับ 🙂
รายละเอียดเพิ่มเติม: https://docs.aws.amazon.com/eks/latest/userguide/migrate-stack.html