kubeadm工作機制分析
介紹
kubeadm一共提供了5個子命令:
- kubeadm init
- kubeadm join
- kubeadm token
- kubeadm reset
- kubeadm version
這個可以在k8s v1.5.0 程式碼中cmd/kubeadm/app/cmd/cmd.go:29看到:
-
func NewKubeadmCommand(f cmdutil.Factory, in io.Reader, out, err io.Writer) *cobra.Command {
-
cmds := &cobra.Command{
-
Use: "kubeadm",
-
Short: "kubeadm: easily bootstrap a secure Kubernetes cluster",
-
...
-
}
-
cmds.ResetFlags()
-
cmds.SetGlobalNormalizationFunc(flag.WarnWordSepNormalizeFunc)
-
cmds.AddCommand(NewCmdInit(out))
-
cmds.AddCommand(NewCmdJoin(out))
-
cmds.AddCommand(NewCmdReset(out))
-
cmds.AddCommand(NewCmdToken(out))
-
cmds.AddCommand(NewCmdVersion(out))
-
return cmds
-
}
其中kubeadm init 和join兩個子命令是最為關鍵的。通過在master上執行kubeadm init,完成master的初始化,然後再在其他node上執行kube join將node加入到cluster,即可完成一套安全叢集的搭建。
更多關於kubeadm的介紹和入門知識,請參考一下官方文件:
廢話不多說,通過閱讀kubernetes v1.5.0原始碼後,下面分別給出kube init和join兩個子命令的工作流程圖,據此你就能瞭解其工作機制。
kubeadm init工作機制
kubeadm join工作機制
總結
-
kubeadm init主要工作:
- 建立叢集安全相關的的key、certs和conf檔案。
- 建立kube-apiserver、kube-controller-manager、kube-scheduler、etcd(如果沒有配置external etcd)這些static pod的json格式的manifest檔案,kubelet負責啟動這些master元件。
- 通過addons方式啟動kube-discovery deployment、kube-proxy daemonSet、kube-dns deployment。
-
kubeadm join主要負責建立kubelet.conf,使kubelet能與API Server建立連線:
- 訪問kube-discovery服務獲取cluster info(包含cluster ca證書、API Server endpoint列表和token。
- 利用定的token,檢驗cluster info的簽名。
- 檢驗成功後,再與API Server建立連線,請求API Server為該node建立證書。
- 根據獲取到的證書建立kubelet.conf。