Kubernetes หรือที่เรียกกันทั่วไปว่า K8s ได้รับแรงผลักดันอย่างมากในชุมชน DevOps เนื่องจากความสามารถอันแข็งแกร่งในการจัดการแอปพลิเคชันคอนเทนเนอร์ตามขนาดในการทำแอพ ความลับของ Kubernetes คือสถาปัตยกรรมและแนวคิดเกี่ยวกับปริมาณงาน (Workloads) เมื่อคุณได้เข้าสู่โลกของ Docker แล้ว คุณก็ได้เห็นว่าแอปพลิเคชันสามารถ “containerized” ได้อย่างไร ตอนนี้ ลองนึกภาพระบบนิเวศที่ให้คุณจัดการคอนเทนเนอร์เหล่านี้ เพื่อให้แน่ใจว่าคอนเทนเนอร์สื่อสารได้อย่างมีประสิทธิภาพ ปรับขยายได้ และทนทานต่อข้อผิดพลาดในการทำแอพ นี่คือจุดที่ Kubernetes เปล่งประกาย
บทความนี้จะเจาะลึกเกี่ยวกับปริมาณงาน (Workloads) ของ Kubernetes โดยมุ่งเน้นที่การปรับใช้และการจัดการแอปพลิเคชันในการทำแอพภายในแพลตฟอร์มการจัดการที่มีประสิทธิภาพนี้
1. ทำความเข้าใจเกี่ยวกับปริมาณงาน (Workloads) Kubernetes
ภาระงาน (Workloads) คือออบเจ็กต์ Kubernetes ที่กำหนดกฎการปรับใช้สำหรับคอนเทนเนอร์ทั่วทั้งคลัสเตอร์ วัตถุประสงค์หลักของปริมาณงาน (Workloads) Kubernetes คือเพื่อให้แน่ใจว่าสำเนาแอปพลิเคชันตามจำนวนที่ระบุทำงานเพื่อให้ตรงกับระดับบริการที่จำเป็น
มีปริมาณงาน (Workloads) หลายประเภทใน Kubernetes ได้แก่ Pods, Deployments, ReplicaSets, StatefulSets, DaemonSets, Jobs และ CronJobs
- Pods:ออบเจ็กต์ Kubernetes ที่เล็กที่สุดและเรียบง่ายที่สุด พ็อดแสดงถึงอินสแตนซ์เดียวของกระบวนการที่กำลังทำงานอยู่ในคลัสเตอร์ และสามารถมีหนึ่งหรือหลายคอนเทนเนอร์ได้
- Deployments:อ็อบเจ็กต์นี้อธิบายสถานะที่ต้องการสำหรับ Pods หรือ ReplicaSets นอกจากนี้ยังสามารถอัปเดต Pods และตัวจำลองได้อีกด้วย
- ReplicaSets:ระดับถัดไปที่เพิ่มจาก Pods คือ ReplicaSet ช่วยให้มั่นใจได้ว่าจำนวนของแบบจำลอง Pod ที่ระบุจะทำงานในเวลาใดก็ตาม
- StatefulSets:เวิร์กโหลดนี้ใช้สำหรับแอปพลิเคชันที่ต้องการตัวระบุเครือข่ายที่เสถียร พื้นที่เก็บข้อมูลถาวรที่เสถียร และการปรับใช้และการปรับขนาดที่สง่างาม
- DaemonSets: DaemonSet ช่วยให้แน่ใจว่าโหนดทั้งหมดหรือโหนดเฉพาะรันสำเนาของ Pod เมื่อมีการเพิ่มหรือลบโหนด ระบบจะปรับ Pods ให้สอดคล้องกัน
- Jobs:งานสร้างพ็อดตั้งแต่หนึ่งพ็อดขึ้นไปและตรวจสอบให้แน่ใจว่าจำนวนพ็อดสำเร็จตามจำนวนที่กำหนด
- CronJobs:สิ่งนี้จัดการงานตามเวลา ชวนให้นึกถึงยูทิลิตี้ cron ในระบบปฏิบัติการแบบ Unix
2. การปรับใช้ (Deploying) แอปพลิเคชันโดยใช้ Kubernetes
ลองนำแนวคิดเหล่านี้ไปใช้จริงโดยปรับใช้แอปง่ายๆ เราจะใช้แอปพลิเคชัน Node.js ที่บรรจุด้วย Docker สำหรับคำแนะนำนี้
apiVersion: apps/v1
kind: Deployment
metadata:
name: nodejs-deployment
spec:
replicas: 3
selector:
matchLabels:
app: nodejs
template:
metadata:
labels:
app: nodejs
spec:
containers:
- name: nodejs
image: node:14
ports:
- containerPort: 8080
ไฟล์ YAML นี้ประกาศการปรับใช้ที่ควบคุมพ็อดที่จำลองแล้วสามรายการ แต่ละ Pod จะเรียกใช้คอนเทนเนอร์เดียวที่ดึงมาจากnode:14
อิมเมจ ซึ่งเป็นอิมเมจ Docker อย่างเป็นทางการสำหรับ Node.js
เมื่อคุณเขียนรายการการปรับใช้ของคุณแล้ว คุณสามารถใช้คำสั่ง kubectl apply
เพื่อสร้างการปรับใช้:
$ kubectl apply -f nodejs-deployment.yaml
เอาต์พุตคำสั่งตรวจสอบการสร้างการปรับใช้:
deployment.apps/nodejs-deployment created
การปรับใช้จะสร้างและจัดการ ReplicaSet โดยอัตโนมัติซึ่งจะสร้างพ็อด คุณสามารถตรวจสอบทรัพยากรเหล่านี้ได้ด้วยคำสั่ง kubectl
ต่อไปนี้:
$ kubectl get deployments
$ kubectl get replicasets
$ kubectl get pods
3. การทำงานกับการปรับใช้ (Deployments) StatefulSets DaemonSets
การปรับใช้ StatefulSets และ DaemonSets แสดงถึงเวิร์กโหลด Kubernetes หลักสามประเภท และเป็นเครื่องมือในการจัดการสถานะที่ต้องการของแอปพลิเคชัน
การปรับใช้จะจัดการแอปพลิเคชันไร้สัญชาติและรักษาจำนวนแบบจำลอง (copies) ของแอปพลิเคชันเหล่านี้ตามจำนวนที่กำหนด เหมาะอย่างยิ่งสำหรับแอปพลิเคชันไร้สัญชาติที่สามารถปรับขนาดในแนวนอนและสามารถทนต่อการรีสตาร์ทเนื่องจากไม่รักษาสถานะใด ๆ ระหว่างเซสชัน
ในทางกลับกัน StatefulSets ได้รับการออกแบบมาสำหรับแอปพลิเคชันที่มีสถานะซึ่งต้องการตัวระบุเครือข่ายที่ไม่ซ้ำใคร พื้นที่เก็บข้อมูลถาวรที่เสถียร และการสั่งซื้อ การปรับใช้และการปรับขนาดที่สง่างาม
DaemonSets ทำให้แน่ใจว่าทุกโหนดในคลัสเตอร์ของคุณเรียกใช้สำเนาของพ็อดเฉพาะ หากมีการเพิ่มโหนดใหม่ไปยังคลัสเตอร์ DaemonSet จะเพิ่มพ็อดที่จำเป็นให้กับโหนดเหล่านั้น หากโหนดถูกลบออกจากคลัสเตอร์ พ็อดเหล่านั้นจะถูกรวบรวมขยะ
4. การเปิดตัว (Rollout) และการย้อนกลับ (Rollback) ของการปรับใช้ (Deployments)
หนึ่งในคุณสมบัติที่ทรงพลังของ Kubernetes คือความสามารถในการเปิดตัวการอัปเดตแอปพลิเคชันของคุณได้อย่างราบรื่น ทำให้มั่นใจได้ว่าจะไม่มีการหยุดทำงาน
เมื่อคุณอัปเดตการปรับใช้ Kubernetes จะจัดการ “rolling update” ตามค่าเริ่มต้น ในระหว่างการอัปเดตแบบต่อเนื่อง การทำให้ใช้งานได้ค่อยๆ แทนที่ Pod ของเวอร์ชันเก่าด้วย Pod ของเวอร์ชันใหม่ หากมีการเปิดเผยการปรับใช้ต่อสาธารณะ บริการจะโหลดสมดุลการรับส่งข้อมูลเฉพาะกับ Pod ที่มีในระหว่างการอัปเดต
การเปิดตัวสามารถทริกเกอร์ได้โดยการอัปเดตเทมเพลต Pod ของการทำให้ใช้งานได้ โดยทั่วไปเพื่อเปลี่ยนอิมเมจคอนเทนเนอร์ที่อยู่ข้างใต้
หากมีข้อผิดพลาดในการเปิดตัว Kubernetes จะมีคุณลักษณะการย้อนกลับ คุณสามารถดูประวัติการเปิดตัวและย้อนกลับไปยังการแก้ไขก่อนหน้าในประวัติ
5. งาน (Jobs) และ CronJobs
ในขณะที่ Deployments, StatefulSets และ DaemonSets จัดการแอปพลิเคชันที่ใช้เวลานาน Jobs จะจัดการแอปพลิเคชันที่มีอายุสั้นและเรียกใช้จนจบ หากงานล้มเหลว Kubernetes สามารถลองใหม่ได้
CronJobs เป็นงานตามเวลา ชวนให้นึกถึงยูทิลิตี้ cron ในระบบปฏิบัติการแบบ Unix CronJob เรียกใช้งานตามตารางเวลาที่กำหนดในรูปแบบ Cron ซึ่งมีประโยชน์สำหรับการเรียกใช้งานตามกำหนดเวลาปกติ เช่น การสำรองข้อมูลหรือการส่งอีเมล
Kubernetes มีทรัพยากรปริมาณงาน (Workloads) ที่หลากหลายสำหรับการทำแอพ โดยแต่ละแอปพลิเคชันมีจุดประสงค์ที่แตกต่างกัน การควบคุมทรัพยากรเหล่านี้ช่วยให้คุณสามารถปรับใช้ ปรับขนาด และจัดการแอปพลิเคชันที่มีความพร้อมใช้งานสูงในการทำแอพ ทำให้มั่นใจได้ถึงความทนทานต่อข้อผิดพลาดและการอัปเดตที่ราบรื่น การทำความเข้าใจแนวคิดเหล่านี้เป็นพื้นฐานในการเรียนรู้ Kubernetes และยอมรับกระบวนทัศน์ใหม่ของการจัดคอนเทนเนอร์ในการทำแอพ