kubeadm工作原理

kubeadm是Kubernetes主推的部署工具之一,正在快速迭代开发中。

初始化系统

所有机器都需要初始化容器执行引擎(如docker或frakti等)和kubelet。这是因为kubeadm依赖kubelet来启动Master组件,比如kube-apiserver、kube-manager-controller、kube-scheduler、kube-proxy等。

安装master

在初始化master时,只需要执行kubeadm init命令即可,比如

  1. kubeadm init --pod-network-cidr 10.244.0.0/16 --kubernetes-version stable

这个命令会自动

  • 系统状态检查
  • 生成token
  • 生成自签名CA和client端证书
  • 生成kubeconfig用于kubelet连接API server
  • 为Master组件生成Static Pod manifests,并放到/etc/kubernetes/manifests目录中
  • 配置RBAC并设置Master node只运行控制平面组件
  • 创建附加服务,比如kube-proxy和kube-dns

配置Network plugin

kubeadm在初始化时并不关心网络插件,默认情况下,kubelet配置使用CNI插件,这样就需要用户来额外初始化网络插件。

CNI bridge

  1. mkdir -p /etc/cni/net.d
  2. cat >/etc/cni/net.d/10-mynet.conf <<-EOF
  3. {
  4. "cniVersion": "0.3.0",
  5. "name": "mynet",
  6. "type": "bridge",
  7. "bridge": "cni0",
  8. "isGateway": true,
  9. "ipMasq": true,
  10. "ipam": {
  11. "type": "host-local",
  12. "subnet": "10.244.1.0/24",
  13. "routes": [
  14. { "dst": "0.0.0.0/0" }
  15. ]
  16. }
  17. }
  18. EOF
  19. cat >/etc/cni/net.d/99-loopback.conf <<-EOF
  20. {
  21. "cniVersion": "0.3.0",
  22. "type": "loopback"
  23. }
  24. EOF

flannel

  1. kubectl create -f https://github.com/coreos/flannel/raw/master/Documentation/kube-flannel-rbac.yml
  2. kubectl create -f https://github.com/coreos/flannel/raw/master/Documentation/kube-flannel.yml

weave

  1. kubectl apply -f "https://cloud.weave.works/k8s/net?k8s-version=$(kubectl version | base64 | tr -d '\n')"

calico

  1. kubectl apply -f https://docs.projectcalico.org/v3.0/getting-started/kubernetes/installation/hosted/kubeadm/1.7/calico.yaml

添加Node

  1. token=$(kubeadm token list | grep authentication,signing | awk '{print $1}')
  2. kubeadm join --token $token ${master_ip}

这包括以下几个步骤

  • 从API server下载CA
  • 创建本地证书,并请求API Server签名
  • 最后配置kubelet连接到API Server

删除安装

  1. kubeadm reset

参考文档