Day 5: Kubernetes 基本架構及安裝
Day 6: 使用 kubectl 指令管理 Kubernetes 集群
Day 7: Kubernetes Pod 與 Deployment 深入解析
Day 8: Kubernetes Service 與負載均衡機制
Day 9: Kubernetes Persistent Volumes (PV) 與 Persistent Volume Claims (PVC)
kubectl 是 Kubernetes 的命令行工具,用於與 Kubernetes API 交互,管理和操作 Kubernetes 集群。通過 kubectl,用戶可以部署應用程序、檢查資源狀態、查看日誌、調試問題,並進行各種集群管理任務。它是使用 Kubernetes 的核心工具,簡化了集群運維和管理。
還記得上一篇安裝的k8s三件套嗎?
kubeadm:用於初始化和配置 Kubernetes 集群的工具。
kubelet:運行在每個 Node 上的代理,負責管理 Pod 和容器。
kubectl:與 Kubernetes API 交互的命令行工具,用於管理集群。
所以接下來有關k8s的操作基本上都是圍繞著kubectl開頭的指令喔~
關於後面帶的參數
-n:指定在哪個namespace底下
--all-namespaces:查詢所有namespaces底下的內容
-o wide:查詢詳情
#查看node
kubectl get node
#查看node及詳情
kubectl get node -o wide
#查看pod
kubectl get pod -n default
#查看所有pod
kubectl get pod --all-namespaces
#查看service
kubectl get services
#查看deployment
kubectl get deployment
現在都空空的齁,那就來部署一個服務試試看吧
雖然可以直接運行一個pod不過沒有人這樣玩
基本上都是依賴一個deployment部署一個服務為單位
Deployment 提供了一種聲明式配置方式,你可以定義應用程序的期望狀態,而 Kubernetes 會自動調整資源以達到這個狀態。這簡化了集群管理,並確保應用程序始終處於理想狀態。
Pod 本身是短暫的,可能因為節點故障或其他原因被刪除或重啟。使用 Deployment 則可以確保當一個 Pod 崩潰或被刪除時,自動重新創建新的 Pod,保持應用程序的高可用性。
以下採用現成的示範起pod,明天再來手寫
#建立deployment
kubectl create deployment apache --image=httpd
顯示如下
test@test:~$ kubectl get pod
NAME READY STATUS RESTARTS AGE
apache-7f6fddb7df-b8qvj 1/1 Running 0 21s
再來需要暴露端口,才能從集群外部訪問到這個apache網站
kubectl expose deployment apache --port=80 --target-port=80 --type=NodePort
這時候就能查看映射出來的端口是多少,記下80:後面這個數字
kubectl get services apache
再來打開瀏覽器訪問看看
http://localhost:31611
或
http://Node-IP:NodePort/
至此就完成了一個k8s的簡易部署
除了通過kubectl get pod可以查看到pod為running狀態
通過瀏覽器訪問也能查看apache服務的運作是正常的
#查看pod,並記下pod的全名
kubectl get pod
#查看pod日誌
kubectl logs apache-7f6fddb7df-b8qvj
#進入容器(如果你要排查應用層的錯誤)
kubectl exec -it apache-7f6fddb7df-b8qvj -- /bin/bash
#只刪除pod
kubectl delete pod apache-7f6fddb7df-b8qvj
#刪除部署文件
kubectl delete deployment apache
因為如果你只嘗試kubectl delete pod的話
你會發現該pod進入pending狀態及terminating狀態之後
若發現deployment文件還存在的話,就會再自動建立一個pod維持高可用性喔
因此單單一個kubectl delete pod也會被拿來當作「重啟」的指令
最常見到的就是pod起不來
卡在terminating, waiting, pending, ImagePullBackOff...等狀態
假設健康檢查失敗
那麼在kubectl describe的時候會出現健康檢查失敗的事件
假設容器本身的運行就有問題
那麼在kubectl logs的時候可以查看運行這個pod之後發生了些什麼
#查看pod詳情,是否有錯誤事件發生
kubectl describe pod apache-7f6fddb7df-b8qvj
#查看pod日誌,是否服務運行或初始化失敗
kubectl logs -f apache-7f6fddb7df-b8qvj
至此,在操作k8s的方面就能慢慢累積出熟悉經驗~