上一篇文章(跑題的人生:k8s自學實戰系列(1)--kubeadm搭建master節點)介紹了kubeadm幾乎是一個kubeadm init命令就搞定了kubenetes的master節點的搭建,相信瞭解過k8s架構的同學都知道,master節點要安裝api,controll-mgr,schedule等各種組件,這麼多組件安裝一條命令就搞定了,這其中還包含了各種異常的檢查。翻閱了一些資料,我嘗試對這kubeadm init和kubeadm join這兩個命令到底在做些什麼來做個總結。

  • kubeadm init
  1. 首先要做的,是一系列環境檢查工作,稱之為preflight。包括操作系統內核,Cgroup是否可用,埠是否被佔用,docker是否安裝等等
  2. 生成證書,kube api 的訪問默認是tls的,證書會存放在/etc/kubernetes/pki目錄下,如果想使用自己生成的證書,只需提前將證書拷貝到pki/ca.crt, /pki/ca.key,kubeadm就會跳過此步驟
  3. 接下來,會生成為其他組件訪問api server的配置文件,路徑是/etc/kubernetes,文件包括admin.conf, controller-manager.conf, kubelet.conf , scheduler.conf,其中admin是給kubectl操作時用的,告訴kubectl去連接哪個api server去操作。(還記得搭建master節點的某一個步是copy admin.conf到.kube目錄下嗎?). 這些文件裏的內容大體上相似,如master節點的地址,埠,證書目錄等信息。
  4. 接下來,會為api server, controller manager, scheduler, etcd生成pod配置文件,放在/etc/kubernetes/manifests路徑下,kubelet會更具該路徑下的配置文件,啟動相應的pod.
  5. 此時master組件基本上啟動了,kubeadm會檢查 localhost:6443/healthz這個url,等待master組件完全啟動。啟動完成後,會為集羣生成一個bootstrap token,後續節點拿到這個token後才能通過kubeadm join來加入這個集羣。這個token會被保存在etcd中。
  6. 最後一步,安裝默認插件kube-proxy和dns。他們是為整個集羣提供服務發現和dns解析用的。這兩個也是以pod的方式啟動。

此外,我們也可以自己編寫kubeadm.yaml文件來定製化kubeadm的啟動過程和一些配置。關於yaml的編寫方法會在後續專門寫一篇來介紹。啟動命令為kubeadm init --config kubeadm.yaml

  • kubeadm join

join的流程相比init來說簡單不少,任何一臺機器想要加入集羣,必須要拿到server端的ca證書才能和其建立tls連接,那麼如何在不手動拷貝的情況下拿到server的ca證書,這就需要指定一個token來證明node的合法性。於是便需要以下這樣的命令來加入集羣。加入後,ca.crt證書文件也將被存放到/etc/kubenetes/pki目錄下。

kubeadm join 192.168.0.233:6443 --token sd8a51.017go0q0mj7kiu4p
--discovery-token-ca-cert-hash sha256:94e0877bd0852665528c7fd124f6fdd8559283451e30747df3a35a3bc7dec1f2

推薦閱讀:

相關文章