1 Kubernetes一鍵部署利器:kubeadm
1.1 kubeadm命令
簡單總結(jié)可以通過兩條命令完成k8s集群的部署:
# 創(chuàng)建一個Master節(jié)點$ kubeadm init# 將一個Node節(jié)點加入到當(dāng)前集群中$ kubeadmjoin
1.2 kubeadm init工作流程
在機器上手動安裝 kubeadm、kubelet 和 kubectl這三個二進制文件。
把 kubelet 直接運行在宿主機上,然后使用容器部署其他的 Kubernetes 組件。(除了跟容器運行時打交道外,kubelet 在配置容器網(wǎng)絡(luò)、管理容器數(shù)據(jù)卷時,都需要直接操作宿主機,在容器內(nèi)實現(xiàn)困難)
kubeadm 首先要做的,是一系列的檢查工作,以確定這臺機器可以用來部署 Kubernetes。這一步檢查,我們稱為“Preflight Checks”。
在通過了 Preflight Checks 之后,kubeadm 要為你做的,是生成 Kubernetes 對外提供服務(wù)所需的各種證書和對應(yīng)的目錄。
證書目錄:
/etc/kubernetes/pki/ca.{crt,key}
證書生成后,kubeadm 接下來會為其他組件生成訪問 kube-apiserver 所需的配置文件。
配置文件路徑:
/etc/kubernetes/xxx.conf
kubeadm 會為 Master 組件生成 Pod 配置文件。包括kube-apiserver、kube-controller-manager、kube-scheduler,而它們都會被使用 Pod 的方式部署起來。
這時,Kubernetes 集群尚不存在, kubeadm 不會直接執(zhí)行docker run來啟動這些容器,在Kubernetes 中,有一種特殊的容器啟動方法叫做“Static Pod”。它允許你把要部署的Pod 的 YAML 文件放在一個指定的目錄里。這樣,當(dāng)這臺機器上的 kubelet 啟動時,它會自動檢查這個目錄,加載所有的 Pod YAML 文件,然后在這臺機器上啟動它們。
在 kubeadm 中,Master 組件的 YAML 文件會被生成在?/etc/kubernetes/manifests?路徑下。
kubeadm 還會再生成一個 Etcd 的 Pod YAML 文件,用來通過同樣的Static Pod 的方式啟動 Etcd。
kubeadm 會為集群生成一個 bootstrap token,在后面,只要持有這個token,任何一個安裝了 kubelet 和 kubadm 的節(jié)點,都可以通過 kubeadm join 加入到這個集群當(dāng)中。
kubeadm生成cluster-info(包括ca.crt 等 Master 節(jié)點的重要信息)的ConfigMap保存在Etcd中。
kubeadm安裝默認(rèn)插件( kube-proxy 和 DNS),它們分別用來提供整個集群的服務(wù)發(fā)現(xiàn)和 DNS 功能,創(chuàng)建兩個對應(yīng)鏡像的Pod即可。
1.3 kubeadm join 的工作流程
kubeadm 至少需要發(fā)起一次“不安全模式”的訪問到 kube-apiserver,從而拿到保存在 ConfigMap 中的 cluster-info(它保存了 APIServer 的授權(quán)信息)。只要有了 cluster-info 里的 kube-apiserver 的地址、端口、證書,kubelet 就可以以“安全模式”連接到 apiserver 上,這樣一個新的節(jié)點就部署完成了。
1.4 配置 kubeadm 的部署參數(shù)
kubeadm init --config kubeadm.yaml