Docker - Kubernetes 的運作原理

你好,未來的科技巫師們!我很興奮能成為你們在 Kubernetes 這個令人興奮的世界中的導遊。作為一個教了多年計算機科學的人,我可以向你們保證,儘管 Kubernetes 聽起來像是科幻電影中的神秘生物,但它實際上是一個強大的工具,正在改變我們管理容器化應用程序的方式。那麼,我們就來深入了解一下吧!

Docker - Working of Kubernetes

Kubernetes 是什麼?

Kubernetes,通常縮寫為 K8s(因為 'K' 和 's' 之間有 8 個字母),是一個開源容器編鸺合唱平台。我知道這個說法有點難懂,所以我們來分解一下。

想象一下你經營著一個龐大的披薩送餐服務。你有許多訂單(應用程序)湧入,你需要有效地管理你的送餐司機(容器)。Kubernetes 就像你那個超級聰明的經理,決定哪個司機送哪個訂單,確保路上總是有足夠的司機,並且在司機的車故障時調入後備。

關鍵概念

在我們深入細節之前,讓我們先熟悉一些 Kubernetes 的關鍵概念:

  1. Pods:Kubernetes 中最小的可部署單位。
  2. Nodes:Kubernetes 群集中的工作機器。
  3. 群集:運行容器化應用程序的節點集合。
  4. 控制平面:負責管理群集的 Kubernetes 大腦。

Kubernetes 如何工作

現在,我們有了基本的原料,讓我們看看 Kubernetes 如何將它們混合成美味的技術蛋奶酥!

1. 控制平面

控制平面就像我們廚房中的主廚。它負責對群集進行全局決策,並偵測和對群集事件做出反應。

apiVersion: v1
kind: Pod
metadata:
name: control-plane-pod
spec:
containers:
- name: kube-apiserver
image: k8s.gcr.io/kube-apiserver:v1.21.0
- name: kube-controller-manager
image: k8s.gcr.io/kube-controller-manager:v1.21.0
- name: kube-scheduler
image: k8s.gcr.io/kube-scheduler:v1.21.0

這個 YAML 文件定義了一個包含控制平面主要組件的 Pod。在現實世界中,這些組件通常會在不同的機器上運行,以確保高可用性。

2. Nodes

節點是我們 Kubernetes 蜂巢中的工作蜂。它們是實際運行我們容器化應用程序的機器。

apiVersion: v1
kind: Node
metadata:
name: worker-node-1
spec:
podCIDR: 10.244.1.0/24
status:
capacity:
cpu: "2"
memory: 4Gi

這個 YAML 描述了一個具有 2 個 CPU 和 4GB 內存的節點。在實際情況中,你通常不會手動創建節點 - 它們會由你的雲服務供應商或本地基礎設施提供。

3. Pods

Pods 是魔術發生的地方!它們是 Kubernetes 中最小的可部署單位,通常包含一個或多個容器。

apiVersion: v1
kind: Pod
metadata:
name: my-awesome-app
spec:
containers:
- name: my-app-container
image: my-app:1.0
ports:
- containerPort: 8080

這個 YAML 定義了一個名為 "my-awesome-app" 的 Pod,其中有一個容器。該容器基於 "my-app:1.0" 圖像,並暴露了 8080 端口。

Kubernetes 中的實際應用

現在我們已經準備好原料,讓我們看看 Kubernetes 如何編鸺合唱它們!

  1. 你將應用程序提交給 Kubernetes(通常以 YAML 文件的形式)。
  2. 控制平面的 API 服務器接收到這個請求。
  3. 调度器決定哪個節點有足夠的資源來運行你的應用程序。
  4. 選定的節點上的 kubelet 創建 Pod 並啟動容器。
  5. 控制平面持續監控所有 Pod 和節點的狀態。

如果一個 Pod 失敗,Kubernetes 可以自動重新啟動它。如果一個節點失敗,Kubernetes 可以將在它上面運行的所有 Pod 重新調度到其他健康的節點上。這就像有一個超級專注的服務員隊伍,確保你的進餐體驗完美!

Kubernetes 方法

以下是一些常見的 Kubernetes 方法:

方法 描述
kubectl create 從文件或標準輸入創建資源
kubectl get 顯示一個或多個資源
kubectl describe 顯示關於資源的詳細信息
kubectl delete 刪除資源
kubectl apply 對資源應用配置
kubectl logs 打印 pod 中容器的日誌
kubectl exec 在容器中執行命令
kubectl port-forward 將一個或多個本地端口转发到 pod

結論

好了,各位!我們對 Kubernetes 進行了一次風馳電掣的旅行,從其基本組件到如何讓容器化應用程序運行順暢。記住,就像學習烹飪一個複雜的菜餚,掌握 Kubernetes 需要時間和練習。但是只要堅持不懈並保持好奇心,你會很快變得像專家一樣編鸺合唱容器!

當我們結束時,我想到一個學生曾經告訴我,“Kubernetes 就像馴養貓,但這些貓是容器,而 Kubernetes 是世界上最好的貓馴養師。”我自己也無法說得更好!

繼續探索,繼續學習,最重要的是,與科技一起玩得開心。直到下一次,快樂的容器化吧!

Credits: Image by storyset