แบบฝึกหัด - สํารวจการทํางานของคลัสเตอร์ Kubernetes
มีหลายตัวเลือกที่พร้อมใช้งานเมื่อคุณเรียกใช้ Kubernetes ภายในเครื่อง คุณสามารถติดตั้ง Kubernetes บนเครื่องจริงหรือเครื่องเสมือน (VM) หรือใช้โซลูชันบนระบบคลาวด์ เช่น Azure Kubernetes Service (AKS)
เป้าหมายของคุณในแบบฝึกหัดนี้คือการสํารวจการติดตั้ง Kubernetes ด้วยคลัสเตอร์โหนดเดียว ในแบบฝึกหัดนี้ คุณจะได้เรียนรู้วิธีการกําหนดค่าและติดตั้ง MicroK8s สภาพแวดล้อมที่ง่ายต่อการตั้งค่าและการฉีกขาด จากนั้น คุณสามารถปรับใช้บริการ Kubernetes และปรับมาตราส่วนออกไปยังหลายอินสแตนซ์เพื่อโฮสต์เว็บไซต์
โน้ต
แบบฝึกหัดนี้เป็นทางเลือกและมีขั้นตอนที่แสดงวิธีการลบและถอนการติดตั้งซอฟต์แวร์และทรัพยากรที่คุณใช้ในแบบฝึกหัด
โปรดทราบว่ามีตัวเลือกอื่นๆ เช่น MiniKube และ Kubernetes รองรับใน Docker เพื่อทําสิ่งเดียวกัน
MicroK8s คืออะไร
MicroK8s เป็นตัวเลือกสําหรับการปรับใช้คลัสเตอร์ Kubernetes โหนดเดียวเป็นแพคเกจเดียวเพื่อกําหนดเป้าหมายเวิร์กสเตชันและอุปกรณ์ Internet of Things (IoT) Canonical ผู้สร้าง Ubuntu Linux เดิมพัฒนาและรักษา MicroK8s
คุณสามารถติดตั้ง MicroK8s บน Linux, Windows และ macOS ได้ อย่างไรก็ตาม คําแนะนําในการติดตั้งจะแตกต่างกันเล็กน้อยสําหรับแต่ละระบบปฏิบัติการ เลือกตัวเลือกที่เหมาะกับสภาพแวดล้อมของคุณที่สุด
ติดตั้ง MicroK8s บน Linux
การติดตั้ง Linux ของ MicroK8s เป็นตัวเลือกการติดตั้งที่มีจํานวนขั้นตอนต่ําสุด สลับไปยังหน้าต่างเทอร์มินัลและเรียกใช้คําสั่งในคําแนะนําต่อไปนี้:
ติดตั้งแอปสแนปช็อต MicroK8s ขั้นตอนนี้อาจใช้เวลาสักครู่เพื่อให้เสร็จสมบูรณ์ ทั้งนี้ขึ้นอยู่กับความเร็วของการเชื่อมต่ออินเทอร์เน็ตและเดสก์ท็อปของคุณ
sudo snap install microk8s --classicการติดตั้งสําเร็จจะแสดงข้อความต่อไปนี้
2020-03-16T12:50:59+02:00 INFO Waiting for restart... microk8s v1.17.3 from Canonical✓ installed
ขณะนี้คุณพร้อมที่จะติดตั้ง Add-on บนคลัสเตอร์แล้ว
ติดตั้ง MicroK8s บน Windows
เมื่อต้องการเรียกใช้ MicroK8s บน Windows ให้ใช้ Multipass Multipass เป็นผู้จัดการ VM น้ําหนักเบาสําหรับ Linux, Windows และ macOS
ดาวน์โหลดและติดตั้ง Multipass รุ่นล่าสุดสําหรับ Windows จาก GitHub
ในคอนโซลคําสั่ง ให้เรียกใช้คําสั่งเปิดใช้งาน Multipass เพื่อกําหนดค่าและเรียกใช้รูปภาพ microk8s-vm ขั้นตอนนี้อาจใช้เวลาสักครู่เพื่อให้เสร็จสมบูรณ์ ทั้งนี้ขึ้นอยู่กับความเร็วของการเชื่อมต่ออินเทอร์เน็ตและเดสก์ท็อปของคุณ
multipass launch --name microk8s-vm --memory 4G --disk 40Gหลังจากที่คุณได้รับการยืนยันการเปิดใช้สําหรับ microk8s-vm แล้ว ให้เรียกใช้คําสั่ง
multipass shell microk8s-vmเพื่อเข้าถึงอินสแตนซ์ของ VMmultipass shell microk8s-vmเมื่อมัลติพาสทํางานคุณสามารถเข้าถึง Ubuntu VM เพื่อโฮสต์คลัสเตอร์ของคุณและติดตั้ง MicroK8s
ติดตั้งแอปสแนปช็อต MicroK8s ขั้นตอนนี้อาจใช้เวลาสักครู่เพื่อให้เสร็จสมบูรณ์ ทั้งนี้ขึ้นอยู่กับความเร็วของการเชื่อมต่ออินเทอร์เน็ตและเดสก์ท็อปของคุณ
sudo snap install microk8s --classicการติดตั้งสําเร็จจะแสดงข้อความต่อไปนี้:
2020-03-16T12:50:59+02:00 INFO Waiting for restart... microk8s v1.17.3 from Canonical✓ installed
ขณะนี้คุณพร้อมที่จะติดตั้ง Add-on บนคลัสเตอร์แล้ว
ติดตั้ง MicroK8s บน macOS
เมื่อต้องการเรียกใช้ MicroK8s บน macOS ให้ใช้ Multipass Multipass เป็นผู้จัดการ VM น้ําหนักเบาสําหรับ Linux, Windows และ macOS
คุณมีสองตัวเลือกในการติดตั้ง Multipass บน macOS ดาวน์โหลดและติดตั้ง Multipass รุ่นล่าสุดสําหรับ macOS จาก GitHubหรือติดตั้ง Multipass ด้วยคําสั่ง
brew cask install multipassให้ใช้ Homebrewbrew install --cask multipassในคอนโซลคําสั่ง ให้เรียกใช้คําสั่งเปิดใช้งาน Multipass เพื่อกําหนดค่าและเรียกใช้รูปภาพ microk8s-vm ขั้นตอนนี้อาจใช้เวลาสักครู่เพื่อให้เสร็จสมบูรณ์ ทั้งนี้ขึ้นอยู่กับความเร็วของการเชื่อมต่ออินเทอร์เน็ตและเดสก์ท็อปของคุณ
multipass launch --name microk8s-vm --memory 4G --disk 40Gหลังจากที่คุณได้รับการยืนยันการเปิดใช้สําหรับ microk8s-vm แล้ว ให้เรียกใช้คําสั่ง
multipass shell microk8s-vmเพื่อป้อนอินสแตนซ์ของ VMmultipass shell microk8s-vmในขั้นตอนนี้ คุณสามารถเข้าถึง Ubuntu VM เพื่อโฮสต์คลัสเตอร์ของคุณ คุณยังต้องติดตั้ง MicroK8s ทําตามขั้นตอนเหล่านี้
ติดตั้งแอปสแนปช็อต MicroK8s ขั้นตอนนี้อาจใช้เวลาสักครู่เพื่อให้เสร็จสมบูรณ์ ทั้งนี้ขึ้นอยู่กับความเร็วของการเชื่อมต่ออินเทอร์เน็ตและเดสก์ท็อปของคุณ
sudo snap install microk8s --classicการติดตั้งสําเร็จจะแสดงข้อความต่อไปนี้:
2020-03-16T12:50:59+02:00 INFO Waiting for restart... microk8s v1.17.3 from Canonical✓ installed
ขณะนี้คุณพร้อมที่จะติดตั้ง Add-on บนคลัสเตอร์แล้ว
เตรียมคลัสเตอร์
เมื่อต้องการดูสถานะของ Add-on ที่ติดตั้งไว้บนคลัสเตอร์ของคุณ เรียกใช้คําสั่ง status ใน MicroK8s Add-on เหล่านี้มีบริการมากมาย บางส่วนที่คุณครอบคลุมก่อนหน้านี้ ตัวอย่างหนึ่งคือ ฟังก์ชัน DNS
เมื่อต้องการตรวจสอบสถานะของการติดตั้ง ให้เรียกใช้คําสั่ง
microk8s.status --wait-readysudo microk8s.status --wait-readyโปรดสังเกตว่า มี Add-on หลายตัวที่ถูกปิดใช้งานบนคลัสเตอร์ของคุณ ไม่ต้องกังวลเกี่ยวกับ Add-on ที่คุณไม่รู้จัก
microk8s is running addons: cilium: disabled dashboard: disabled dns: disabled fluentd: disabled gpu: disabled helm3: disabled helm: disabled ingress: disabled istio: disabled jaeger: disabled juju: disabled knative: disabled kubeflow: disabled linkerd: disabled metallb: disabled metrics-server: disabled prometheus: disabled rbac: disabled registry: disabled storage: disabledจากรายการ คุณจําเป็นต้องเปิดใช้งาน ADD-on DNS, แดชบอร์ด และรีจิสทรี ต่อไปนี้คือวัตถุประสงค์ของแต่ละ Add-on:
Add-ons วัตถุประสงค์ DNS ของ ปรับใช้บริการ coreDNSแดชบอร์ด ปรับใช้บริการ kubernetes-dashboardและบริการอื่น ๆ ที่สนับสนุนฟังก์ชันการทํางานของบริการ ซึ่งเป็น UI บนเว็บสําหรับคลัสเตอร์ Kubernetes สําหรับใช้งานทั่วไปรีจิสทรีของ ปรับใช้รีจิสทรีส่วนตัวและบริการต่างๆ ที่สนับสนุนฟังก์ชันการทํางานของรีจิสทรีนั้น เมื่อต้องการเก็บคอนเทนเนอร์ส่วนตัว ให้ใช้รีจิสทรีนี้ เมื่อต้องการติดตั้ง Add-on ให้เรียกใช้คําสั่งต่อไปนี้
sudo microk8s.enable dns dashboard registry
ตอนนี้คุณพร้อมที่จะเข้าถึงคลัสเตอร์ของคุณด้วย kubectl
สํารวจคลัสเตอร์ Kubernetes
MicroK8s มีเวอร์ชัน kubectl ที่คุณสามารถใช้เพื่อโต้ตอบกับคลัสเตอร์ Kubernetes ใหม่ของคุณได้ สําเนา kubectl นี้ช่วยให้คุณมีการติดตั้งแบบขนานของอินสแตนซ์ kubectl ทั่วทั้งระบบอื่นโดยไม่ส่งผลกระทบต่อฟังก์ชันการทํางานของอินสแตนซ์
เรียกใช้คําสั่ง
snap aliasเป็นนามแฝงmicrok8s.kubectlเพื่อkubectlขั้นตอนนี้ทําให้การใช้งานง่ายขึ้นsudo snap alias microk8s.kubectl kubectlผลลัพธ์ต่อไปนี้จะปรากฏขึ้นเมื่อคําสั่งเสร็จสิ้น:
Added: - microk8s.kubectl as kubectl
แสดงข้อมูลโหนดคลัสเตอร์
ระลึกไว้จากก่อนหน้านี้ว่าคลัสเตอร์ Kubernetes อยู่นอกเหนือแผนการควบคุมและโหนดผู้ปฏิบัติงาน เรามาสํารวจคลัสเตอร์ใหม่เพื่อดูว่ามีการติดตั้งอะไรบ้าง
ตรวจสอบโหนดที่กําลังทํางานในคลัสเตอร์ของคุณ
คุณทราบว่า MicroK8s คือการติดตั้งคลัสเตอร์โหนดเดียว ดังนั้นคุณคาดว่าจะเห็นโหนดเดียวเท่านั้น อย่างไรก็ตามโปรดทราบว่าโหนดนี้เป็นทั้งเครื่องบินควบคุมและโหนดผู้ปฏิบัติงานในคลัสเตอร์ ยืนยันการกําหนดค่านี้โดยการเรียกใช้คําสั่ง
kubectl get nodesเมื่อต้องการเรียกใช้ข้อมูลเกี่ยวกับทรัพยากรทั้งหมดในคลัสเตอร์ของคุณ ให้เรียกใช้คําสั่งkubectl get:sudo kubectl get nodesผลลัพธ์จะคล้ายกับตัวอย่างต่อไปนี้ ซึ่งแสดงให้เห็นว่ามีโหนดเดียวเท่านั้นในคลัสเตอร์ที่มีชื่อ
microk8s-vmโปรดสังเกตว่าโหนดอยู่ในสถานะพร้อม สถานะพร้อมระบุว่าแผนควบคุมอาจจัดกําหนดการปริมาณงานบนโหนดนี้NAME STATUS ROLES AGE VERSION microk8s-vm Ready <none> 35m v1.17.3คุณสามารถรับข้อมูลเพิ่มเติมสําหรับทรัพยากรเฉพาะที่ร้องขอได้ ตัวอย่างเช่น สมมติว่าคุณจําเป็นต้องค้นหาที่อยู่ IP ของโหนด เมื่อต้องการดึงข้อมูลพิเศษจากเซิร์ฟเวอร์ API ให้เรียกใช้พารามิเตอร์
-o wide:sudo kubectl get nodes -o wideผลลัพธ์จะคล้ายกับตัวอย่างต่อไปนี้ โปรดสังเกตว่าตอนนี้คุณสามารถดูที่อยู่ IP ภายในของโหนด ระบบปฏิบัติการที่ทํางานบนโหนด เวอร์ชันเคอร์เนล และรันไทม์คอนเทนเนอร์ได้แล้ว
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME microk8s-vm Ready <none> 36m v1.17.3 192.168.56.132 <none> Ubuntu 18.04.4 LTS 4.15.0-88-generic containerd://1.2.5ขั้นตอนถัดไปคือการสํารวจบริการที่ทํางานบนคลัสเตอร์ของคุณ เช่นเดียวกับโหนด ในการค้นหาข้อมูลเกี่ยวกับบริการที่ทํางานบนคลัสเตอร์ เรียกใช้คําสั่ง
kubectl getsudo kubectl get services -o wideผลลัพธ์จะคล้ายกับตัวอย่างต่อไปนี้ แต่โปรดสังเกตว่ามีรายการบริการเดียวเท่านั้น คุณได้ติดตั้ง Add-on บนคลัสเตอร์ก่อนหน้านี้ และคุณคาดว่าจะเห็นบริการเหล่านี้เช่นกัน
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR kubernetes ClusterIP 10.152.183.1 <none> 443/TCP 37m <none>เหตุผลสําหรับรายการบริการเดียวคือ Kubernetes ใช้แนวคิดที่เรียกว่า namespaces การแบ่งคลัสเตอร์ออกเป็นคลัสเตอร์เสมือนหลายตัวอย่างมีตรรกะ
หากต้องการดึงข้อมูลบริการทั้งหมดใน namespaces ทั้งหมด ให้ส่งผ่านพารามิเตอร์
--all-namespaces:sudo kubectl get services -o wide --all-namespacesผลลัพธ์จะคล้ายกับตัวอย่างต่อไปนี้ โปรดสังเกตว่า คุณมี namespace สามรายการในคลัสเตอร์ของคุณ ซึ่งเป็นค่าเริ่มต้น
container-registryและkube-systemnamespace ที่นี่ คุณสามารถดูอินสแตนซ์registry,kube-dnsและkubernetes-dashboardที่คุณติดตั้ง นอกจากนี้ยังมีบริการสนับสนุนที่ติดตั้งควบคู่ไปกับ Add-on บางส่วนNAMESPACE NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR container-registry registry NodePort 10.152.183.36 <none> 5000:32000/TCP 28m app=registry default kubernetes ClusterIP 10.152.183.1 <none> 443/TCP 37m <none> kube-system dashboard-metrics-scraper ClusterIP 10.152.183.130 <none> 8000/TCP 28m k8s-app=dashboard-metrics-scraper kube-system heapster ClusterIP 10.152.183.115 <none> 80/TCP 28m k8s-app=heapster kube-system kube-dns ClusterIP 10.152.183.10 <none> 53/UDP,53/TCP,9153/TCP 28m k8s-app=kube-dns kube-system kubernetes-dashboard ClusterIP 10.152.183.132 <none> 443/TCP 28m k8s-app=kubernetes-dashboard kube-system monitoring-grafana ClusterIP 10.152.183.88 <none> 80/TCP 28m k8s-app=influxGrafana kube-system monitoring-influxdb ClusterIP 10.152.183.232 <none> 8083/TCP,8086/TCP 28m k8s-app=influxGrafanaตอนนี้คุณสามารถดูบริการที่ทํางานบนคลัสเตอร์ คุณสามารถกําหนดตารางเวลาปริมาณงานบนโหนดผู้ปฏิบัติงาน
ติดตั้งเว็บเซิร์ฟเวอร์บนคลัสเตอร์
คุณต้องการกําหนดเวลาเว็บเซิร์ฟเวอร์บนคลัสเตอร์เพื่อให้บริการเว็บไซต์ให้กับลูกค้าของคุณ คุณสามารถเลือกได้จากหลายตัวเลือก สําหรับตัวอย่างนี้ คุณใช้ NGINX
เรียกคืนจากก่อนหน้านี้ว่าคุณสามารถใช้ไฟล์รายชื่อแฟ้ม pod เพื่ออธิบาย pod ของคุณ ชุดแบบจําลอง และการปรับใช้เพื่อกําหนดปริมาณงาน เนื่องจากคุณยังไม่ได้ครอบคลุมรายละเอียดของไฟล์เหล่านี้ คุณจึงเรียกใช้ kubectl เพื่อส่งผ่านข้อมูลไปยังเซิร์ฟเวอร์ API โดยตรง
แม้ว่าการใช้ kubectl นั้นมีประโยชน์ แต่การใช้ไฟล์แสดงรายการเป็นแนวทางปฏิบัติที่ดีที่สุด ไฟล์แสดงรายการช่วยให้คุณสามารถย้อนกลับหรือย้อนกลับการปรับใช้ได้อย่างง่ายดายในคลัสเตอร์ของคุณ ไฟล์เหล่านี้ยังช่วยให้จัดทําเอกสารการกําหนดค่าของคลัสเตอร์
หากต้องการสร้างการปรับใช้ NGINX ของคุณ ให้เรียกใช้คําสั่ง
kubectl create deploymentระบุชื่อของการปรับใช้และรูปภาพคอนเทนเนอร์เพื่อสร้างอินสแตนซ์เดียวของ podsudo kubectl create deployment nginx --image=nginxผลลัพธ์จะคล้ายกับตัวอย่างต่อไปนี้:
deployment.apps/nginx createdเมื่อต้องการดึงข้อมูลเกี่ยวกับการปรับใช้ของคุณ ให้เรียกใช้
kubectl get deployments:sudo kubectl get deploymentsผลลัพธ์จะคล้ายกับตัวอย่างต่อไปนี้ โปรดสังเกตว่าชื่อของการปรับใช้ตรงกับชื่อที่คุณกําหนดและการปรับใช้หนึ่งรายการที่มีชื่อนี้อยู่ในสถานะพร้อมและพร้อมใช้งาน
NAME READY UP-TO-DATE AVAILABLE AGE nginx 1/1 1 1 18sการปรับใช้สร้าง pod ขึ้น หากต้องการดึงข้อมูลเกี่ยวกับ pods ของคลัสเตอร์ของคุณ ให้เรียกใช้คําสั่ง
kubectl get pods:sudo kubectl get podsผลลัพธ์จะคล้ายกับตัวอย่างต่อไปนี้ โปรดสังเกตว่าชื่อของ pod คือค่าที่สร้างขึ้นขึ้นต้นด้วยชื่อของการปรับใช้ และ pod มีสถานะ Running
NAME READY STATUS RESTARTS AGE nginx-86c57db685-dj6lz 1/1 Running 0 33s
ทดสอบการติดตั้งเว็บไซต์
ทดสอบการติดตั้ง NGINX โดยการเชื่อมต่อไปยังเว็บเซิร์ฟเวอร์ผ่านที่อยู่ IP ของ pod
หากต้องการค้นหาที่อยู่ของ pod ให้ส่งผ่านพารามิเตอร์
-o wide:sudo kubectl get pods -o wideผลลัพธ์จะคล้ายกับตัวอย่างต่อไปนี้ โปรดสังเกตว่าคําสั่งส่งกลับทั้งที่อยู่ IP ของโหนด และชื่อโหนดที่มีการกําหนดเวลาปริมาณงาน
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES nginx-86c57db685-dj6lz 1/1 Running 0 4m17s 10.1.83.10 microk8s-vm <none> <none>หากต้องการเข้าถึงเว็บไซต์ ให้เรียกใช้
wgetบน IP ที่แสดงไว้ก่อนหน้า:wget <POD_IP>ผลลัพธ์จะคล้ายกับตัวอย่างต่อไปนี้:
--2020-03-16 13:34:17-- http://10.1.83.10/ Connecting to 10.1.83.10:80... connected. HTTP request sent, awaiting response... 200 OK Length: 612 [text/html] Saving to: 'index.html' index.html 100%[==============================================================================================>] 612 --.-KB/s in 0s 2020-03-16 13:34:17 (150 MB/s) - 'index.html' saved [612/612]
ปรับขนาดการปรับใช้เว็บเซิร์ฟเวอร์บนคลัสเตอร์
สมมติว่าคุณเห็นการเพิ่มผู้ใช้ที่เข้าถึงเว็บไซต์ของคุณอย่างกะทันหันและเว็บไซต์จะเริ่มล้มเหลวเนื่องจากการโหลด คุณสามารถปรับใช้อินสแตนซ์เพิ่มเติมของไซต์ในคลัสเตอร์ของคุณ และแยกการโหลดข้ามอินสแตนซ์ได้
หากต้องการปรับขนาดจํานวนแบบจําลองในการปรับใช้ของคุณ ให้เรียกใช้คําสั่ง kubectl scale คุณระบุจํานวนแบบจําลองที่คุณต้องการและชื่อของการปรับใช้
หากต้องการปรับมาตราส่วนของ NGINX ทั้งหมดเป็นสามให้เรียกใช้คําสั่ง
kubectl scale:sudo kubectl scale --replicas=3 deployments/nginxผลลัพธ์จะคล้ายกับตัวอย่างต่อไปนี้:
deployment.apps/nginx scaledคําสั่งสเกลช่วยให้คุณสามารถปรับขนาดอินสแตนซ์นับขึ้นหรือลง
หากต้องการตรวจสอบจํานวน pods ที่ทํางานอยู่ ให้เรียกใช้คําสั่ง
kubectl getและส่งผ่านพารามิเตอร์-o wideอีกครั้ง:sudo kubectl get pods -o wideผลลัพธ์จะคล้ายกับตัวอย่างต่อไปนี้ โปรดสังเกตว่าตอนนี้คุณเห็น pods ที่ทํางานอยู่สามตัว ซึ่งแต่ละตัวมีที่อยู่ IP ที่ไม่ซ้ํากัน
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES nginx-86c57db685-dj6lz 1/1 Running 0 7m57s 10.1.83.10 microk8s-vm <none> <none> nginx-86c57db685-lzrwp 1/1 Running 0 9s 10.1.83.12 microk8s-vm <none> <none> nginx-86c57db685-m7vdd 1/1 Running 0 9s 10.1.83.11 microk8s-vm <none> <none> ubuntu@microk8s-vm:~$
คุณจะต้องใช้การกําหนดค่าเพิ่มเติมหลายอย่างกับคลัสเตอร์เพื่อแสดงเว็บไซต์ของคุณอย่างมีประสิทธิภาพในฐานะเว็บไซต์ที่เชื่อมต่อกับสาธารณะ ตัวอย่างเช่น การติดตั้งตัวปรับสมดุลการโหลดและการแมปที่อยู่ IP ของโหนด การกําหนดค่าชนิดนี้เป็นส่วนหนึ่งของลักษณะขั้นสูงที่คุณจะสํารวจในอนาคต โดยสรุปมีคําแนะนําหากคุณเลือกที่จะถอนการติดตั้งและล้าง VM ของคุณ