การรัน Kubernetes บนเครื่องตัวเอง
ไอเดียหลักในหนึ่งประโยค
หัวข้อที่มีชื่อว่า “ไอเดียหลักในหนึ่งประโยค”คุณไม่จำเป็นต้องมี data center เพื่อเรียน Kubernetes เครื่องมืออย่าง kind, minikube และ k3d ให้คุณได้ cluster จริงที่รองรับหลาย node รันอยู่บนเครื่องของคุณเองทั้งหมด
ตัวเลือก local cluster
หัวข้อที่มีชื่อว่า “ตัวเลือก local cluster”เครื่องมือสามตัวนี้ครอบคลุมการพัฒนาและเรียนรู้ Kubernetes บนเครื่องตัวเองเกือบทั้งหมด
- kind (Kubernetes IN Docker) รัน node แต่ละตัวของ cluster เป็น Docker container สร้างและลบเร็ว จึงเหมาะกับ CI pipeline และเหมาะกับการเรียนตามคอร์สแบบนี้
- minikube รัน cluster แบบ single หรือ multi-node ข้างใน VM หรือ container driver ที่คุณเลือก มาพร้อม ecosystem ของ addon (dashboard, ingress, metrics) ที่เปิดใช้ได้ด้วยคำสั่งเดียวต่อตัว
- k3d รัน k3s ที่เป็น Kubernetes distribution แบบ lightweight ที่ผ่าน certified อยู่ข้างใน Docker container แนวคิดคล้าย kind แต่สร้างขึ้นรอบ footprint ที่เล็กกว่าของ k3s
ทั้งสามตัวมีไว้เพื่อทำให้การพัฒนาและเรียนรู้บนเครื่องตัวเองเร็วและทิ้งได้ ไม่มีตัวไหนตั้งใจให้ใช้บน production เลย production cluster จะสร้างด้วยเครื่องมืออย่าง kubeadm หรือจัดเตรียมโดย managed cloud service บนเครื่องจริงหรือ virtual machine ที่มี networking, storage และ high availability ที่เหมาะสม
Cluster แรกและ Pod แรกของคุณ
หัวข้อที่มีชื่อว่า “Cluster แรกและ Pod แรกของคุณ”สร้าง local cluster แล้วลองสำรวจดูสักหน่อย
kind create clusterkubectl cluster-infokubectl get nodeskubectl cluster-info ยืนยันว่าคุณเข้าถึง API server ได้ และแสดงว่า core service รันอยู่ที่ไหน ส่วน kubectl get nodes แสดงรายการ node ใน cluster พร้อมสถานะ Ready ของตัวเอง สิ่งแรกที่ควรเช็คทุกครั้งที่รู้สึกว่ามีอะไรผิดปกติ
พอมี cluster แล้ว ให้รัน Pod แล้วเข้าถึง Pod นั้นจาก laptop ของคุณ
kubectl run nginx --image=nginxkubectl get podskubectl port-forward pod/nginx 8080:80kubectl run เป็นวิธีแบบ imperative เร็ว ๆ ในการสร้าง Pod เดียวที่รัน container ตัวเดียว มีประโยชน์เวลาจะ smoke-test image สักตัว kubectl port-forward เปิด tunnel จาก port บนเครื่องของคุณไปยัง port ข้างใน Pod ทำให้ http://localhost:8080 เข้าถึง nginx ที่รันอยู่ใน cluster ได้เลยโดยไม่ต้องมี Service หรือ Ingress เลย สะดวกมากสำหรับขั้นตอนแรก ๆ ของการ debug หรือลองอะไรเล่น ๆ
Namespace คือการแบ่ง cluster
หัวข้อที่มีชื่อว่า “Namespace คือการแบ่ง cluster”namespace คือวิธีแบ่ง cluster เดียวออกเป็นขอบเขตแยกกันสำหรับชื่อ, การเข้าถึง และ resource limit ทุก cluster มาพร้อม namespace พื้นฐานอยู่แล้วไม่กี่ตัว
default— ที่ที่ object จะไปอยู่ถ้าคุณไม่ระบุ namespacekube-system— สงวนไว้สำหรับ component ที่ control plane จัดการเอง เช่น CoreDNS และ Pod ของ kube-proxy เอง ปกติคุณแค่มาดู ไม่ต้องไปแตะkube-public— ผู้ใช้ทุกคนอ่านได้ (รวมถึงคนที่ไม่ authenticate) ใช้เก็บข้อมูล cluster ที่ควรเปิดเผยต่อสาธารณะ
แสดงรายการ namespace แล้วสร้างของคุณเองสำหรับโปรเจกต์
kubectl get namespaceskubectl create namespace my-appflowchart TB
laptop["Your laptop"] --> docker["Docker"]
subgraph cluster["kind cluster"]
cp["control-plane node (container)"]
w1["worker node (container)"]
w2["worker node (container)"]
end
docker --> cluster