k8s

kubeadm命令学习总结

Posted by NianShen Blog on June 4, 2019

kubeadm的出现

kubernetes是一个用go语言写的项目,各个组件其实就是一些二进制的可执行文件再加上执行时需要的配置文件,但是用二进制部署的方式实在是太麻烦了,用ansible saltstack 或者自己写一些shell python脚本也可以完成部署的动作,但是由于这些工具本身就带有一定的学习成本,所以出现了kubeadm这个工具,让用户可以通过kubeadm init 和 kubeadm join这两个简单的命令就可以完成kubernetes集群的搭建。本质上来讲就是把组件通过容器化的方式部署到master节点上 kubelet是不会被容器化的还是使用二进制启动的方式运行在各个节点上,因为kubelet要操作很多东西例如文件系统的挂载,网络配置等在容器里边运行不太方便。所以kubeadm算是一个折衷方案:把kubelet直接运行在宿主机上,然后使用容器部署其他的 Kubernetes 组件。

kubeadm init的工作流程

  1. 一系列的检查工作用来确定当前服务器的环境是否可以用来部署kubernetes,这一步称为“Preflight Check”。
  2. 通过preflightcheck后,kubeadm生成kubernetes对外提供服务所需要的各种证书和目录。
  3. 证书生成后kubeadm为其他组件生成访问kube-apiserver所需要的配置文件。
  4. kubeadm为master组件生成pod的配置文件。
  5. kubeadm为集群生成一个bootstrap token,只要持有这个token并安装了kubelet和kubeadm 都可以通过kubeadm join命令加如到集群中。
  6. kubeadm 会将 ca.crt 等 Master 节点的重要信息,通过 ConfigMap 的方式保存在 Etcd 当中,供后续部署Node节点使用。
  7. 安装默认插间kube-proxy和DNS。

kubeadm-init.png