1 Kubernetes一键部署利器:kubeadm
1.1 kubeadm命令
简单总结可以通过两条命令完成k8s集群的部署:
# 创建一个Master节点$ kubeadm init# 将一个Node节点加入到当前集群中$ kubeadmjoin
1.2 kubeadm init工作流程
在机器上手动安装 kubeadm、kubelet 和 kubectl这三个二进制文件。
把 kubelet 直接运行在宿主机上,然后使用容器部署其他的 Kubernetes 组件。(除了跟容器运行时打交道外,kubelet 在配置容器网络、管理容器数据卷时,都需要直接操作宿主机,在容器内实现困难)
kubeadm 首先要做的,是一系列的检查工作,以确定这台机器可以用来部署 Kubernetes。这一步检查,我们称为“Preflight Checks”。
在通过了 Preflight Checks 之后,kubeadm 要为你做的,是生成 Kubernetes 对外提供服务所需的各种证书和对应的目录。
证书目录:
/etc/kubernetes/pki/ca.{crt,key}
证书生成后,kubeadm 接下来会为其他组件生成访问 kube-apiserver 所需的配置文件。
配置文件路径:
/etc/kubernetes/xxx.conf
kubeadm 会为 Master 组件生成 Pod 配置文件。包括kube-apiserver、kube-controller-manager、kube-scheduler,而它们都会被使用 Pod 的方式部署起来。
这时,Kubernetes 集群尚不存在, kubeadm 不会直接执行docker run来启动这些容器,在Kubernetes 中,有一种特殊的容器启动方法叫做“Static Pod”。它允许你把要部署的Pod 的 YAML 文件放在一个指定的目录里。这样,当这台机器上的 kubelet 启动时,它会自动检查这个目录,加载所有的 Pod YAML 文件,然后在这台机器上启动它们。
在 kubeadm 中,Master 组件的 YAML 文件会被生成在 /etc/kubernetes/manifests 路径下。
kubeadm 还会再生成一个 Etcd 的 Pod YAML 文件,用来通过同样的Static Pod 的方式启动 Etcd。
kubeadm 会为集群生成一个 bootstrap token,在后面,只要持有这个token,任何一个安装了 kubelet 和 kubadm 的节点,都可以通过 kubeadm join 加入到这个集群当中。
kubeadm生成cluster-info(包括ca.crt 等 Master 节点的重要信息)的ConfigMap保存在Etcd中。
kubeadm安装默认插件( kube-proxy 和 DNS),它们分别用来提供整个集群的服务发现和 DNS 功能,创建两个对应镜像的Pod即可。
1.3 kubeadm join 的工作流程
kubeadm 至少需要发起一次“不安全模式”的访问到 kube-apiserver,从而拿到保存在 ConfigMap 中的 cluster-info(它保存了 APIServer 的授权信息)。只要有了 cluster-info 里的 kube-apiserver 的地址、端口、证书,kubelet 就可以以“安全模式”连接到 apiserver 上,这样一个新的节点就部署完成了。
1.4 配置 kubeadm 的部署参数
kubeadm init --config kubeadm.yaml