本文是在嘗試搭建 Kubernetes 學習環境過程中的對一些部署原理的整理
Kubernetes 的部署:
Kubernetes有很多組件,每個組件都是一個需要被執行的、單獨的二進制文件。
- 一種部署方式:將這些二進制文件傳輸到指定的機器當中,然後編寫控制腳本來啓停這些組件。
- 另一種方式:將每個組件做一個容器鏡像,然後在每臺宿主機用docker run指令啓動這些組件容器。
kubeadm 部署方式:
由於 kubelet 不僅要和容器運行時打交道,還需要直接操作宿主機,比如配置容器網絡、管理容器數據卷等,所以容器裏運行 kubelet 會很麻煩。
所以,kubeadm 把 kubelet 直接運行在宿主機上,然後使用容器部署其他的 Kubernetes 組件。
kubeadm 部署流程:
-
首先在機器上手動安裝 docker、kubeadm、kubelet、kubectl 幾個二進制文件;然後才能再容器化部署其他 Kubernetes 組件。
-
kubeadm init
(1)檢查工作(Preflight Checks):檢查內核版本、Cgroups模塊可用性、組件版本、工作端口占用情況、Docker等依賴軟件安裝情況……
(2)生成對外提供服務的證書及對應的目錄
(3)生成其他組件訪問 kube-apiserver 所需的配置文件
(4)爲 Master 組件生成 Pod 配置文件:利用這些配置文件,通過 Kubernetes 中特殊的容器啓動方法“Static Pod”(kubelet 啓動時自動加載固定目錄的 Pod YAML 文件並啓動)便可以 Pod 方式部署起 kube-apiserver、kube-controller-manager、kube-scheduler 三個 Master 組件了。後面還會生成 Etcd 的 Pod YAML 文件。
(5)爲集羣生成一個 bootstrap token :後面想要加入集羣的機器想和 apiserver 打交道,需要獲取相應的證書文件,所以 bootstrap token 到時候就扮演這樣一個安全驗證的角色。
(6)安裝默認插件,如 kube-proxy 和 DNS,分別提供集羣的服務發現和 DNS 功能。 -
kubeadm join
kubeadm init 生成 bootstrap token 之後,可以在任意一臺安裝了 kubelet 和 kubeadm 的機器上執行 kubeadm join 加入集羣的了。
minikube :
用來快捷地在本地搭建一套單節點的 Kubernetes 集羣,適合入門測試開發使用。
具體可以運行 minikube start 看看主要做了那些事:
- 創建虛擬機 VM (由於我這裏是已經在 VM 中運行的 minikube,所以採用 --vm-driver=none 方式,便不需要格外的創建虛擬機了)
- 在虛擬機配置環境
- 下載 kubeadm 和 kubelet 工具
- 拉取鏡像並啓動 Kubernetes (這裏是通過 kubeadm 部署實現)
- 配置主機環境,主要包括各組件訪問授權、健康檢查等工作
- 在用戶操作系統配置 kubectl
如圖:
具體關於 minikube 的搭建步驟可以查看:《VM中利用minikube搭建單節點Kubernetes集羣(國內環境流暢)》
筆記《深入剖析Kubernetes - 張磊 | 極客時間》
參考:10 | Kubernetes一鍵部署利器:kubeadm