1. 程式人生 > >kubeadm工作機制分析

kubeadm工作機制分析

介紹

kubeadm一共提供了5個子命令:

  • kubeadm init
  • kubeadm join
  • kubeadm token
  • kubeadm reset
  • kubeadm version

這個可以在k8s v1.5.0 程式碼中cmd/kubeadm/app/cmd/cmd.go:29看到:

 
  1. func NewKubeadmCommand(f cmdutil.Factory, in io.Reader, out, err io.Writer) *cobra.Command {

  2. cmds := &cobra.Command{

  3. Use: "kubeadm",

  4. Short: "kubeadm: easily bootstrap a secure Kubernetes cluster",

  5. ...

  6. }

  7. cmds.ResetFlags()

  8. cmds.SetGlobalNormalizationFunc(flag.WarnWordSepNormalizeFunc)

  9.  
  10. cmds.AddCommand(NewCmdInit(out))

  11. cmds.AddCommand(NewCmdJoin(out))

  12. cmds.AddCommand(NewCmdReset(out))

  13. cmds.AddCommand(NewCmdToken(out))

  14. cmds.AddCommand(NewCmdVersion(out))

  15.  
  16. return cmds

  17. }

  18.  

其中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。