從本章開始,我們將通過實踐深入學習 Kubernetes 的各種特性。作為容器編排引擎,最重要也是最基本的功能當然是運行容器化應用,這就是本章的內容。
Deployment
前面我們已經了解到,Kubernetes 通過各種 Controller 來管理 Pod 的生命周期。為了滿足不同業務場景,Kubernetes 開發了 Deployment、ReplicaSet、DaemonSet、StatefuleSet、Job 等多種 Controller。我們首先學習最常用的 Deployment。
先從例子開始,運行一個 Deployment:
kubectl run nginx-deployment --image=nginx:1.7.9 --replicas=2
上面的命令將部署包含兩個副本的 Deployment nginx-deployment
,容器的 image 為 nginx:1.7.9
。
下面詳細分析 Kubernetes 都做了些什么工作。
kubectl get deployment
命令可以查看 nginx-deployment
的狀態,輸出顯示兩個副本正常運行。
接下來我們用 kubectl describe deployment
了解更詳細的信息。
大部分內容都是自解釋的,我們重點看最下面部分。這里告訴我們創建了一個 ReplicaSet nginx-deployment-1260880958
,Events
是 Deployment 的日志,記錄了 ReplicaSet 的啟動過程。
通過上面的分析,也驗證了 Deployment 通過 ReplicaSet 來管理 Pod 的事實。接着我們將注意力切換到 nginx-deployment-1260880958
,執行 kubectl describe replicaset
:
兩個副本已經就緒,用 kubectl describe replicaset
查看詳細信息:
Controlled By
指明此 ReplicaSet 是由 Deployment nginx-deployment
創建。Events
記錄了兩個副本 Pod 的創建。接着我們來看 Pod,執行 kubectl get pod
:
兩個副本 Pod 都處於 Running
狀態,用 kubectl describe pod
查看更詳細的信息:
Controlled By
指明此 Pod 是由 ReplicaSet nginx-deployment-1260880958
創建。Events
記錄了 Pod 的啟動過程。如果操作失敗(比如 image 不存在),也能在這里查看到原因。
總結一下這個過程:
-
用戶通過
kubectl
創建 Deployment。 -
Deployment 創建 ReplicaSet。
-
ReplicaSet 創建 Pod。
從上圖也可以看出,對象的命名方式是:子對象的名字
= 父對象名字
+ 隨機字符串或數字
。
本節我們是通過 kubectl run
創建的 Deployment,下一節學習另一種更常用的方法。