本文是极客时间张磊老师关于kubeadm入门知识的内容总结。
为什么不用容器部署Kubernetes 呢?
因为这样做会带来一个很麻烦的问题,即:如何容器化 kubelet。kubelet 在配置容器网络、管理容器数
据卷时,都需要直接操作宿主机。而如果现在 kubelet 本身就运行在一个容器里,那么直接操作宿主机就会变得很麻烦。
正因为如此,kubeadm 选择了一种妥协方案:把 kubelet 直接运行在宿主机上,然后使用容器部署其他的 Kubernetes 组件。
kubeadm init工作流程
preflight checks
kubeadm 首先要做的,是一系列的检查工作,以确定这台机器可以用来部署 Kubernetes。包括版本匹配、计算机端口、模块等信息。
生成证书和目录
Kubernetes对外提供服务所需的各种证书和对应的目录。Kubernetes 对外提供服务时,除非专门开启“不安全模式”,否则都要通过 HTTPS 才能访问 kube-apiserver。这就需要为 Kubernetes 集群配置好证书文件。
kube-apiserver 所需的配置文件。
这些文件的路径是:/etc/kubernetes/xxx.conf。这些文件里面记录的是,当前这个 Master 节点的服务器地址、监听端口、证书目录等信息。客户端用这些信息链接apiserver。
为 Master 组件生成 Pod 配置文件
Kubernetes 有三个 Master 组件 kube-apiserver、kube-controller-manager、
kube-scheduler,而它们都会被使用 Pod 的方式部署起来,此外还有一个etcd。
k8s允许你把要部署的Pod 的 YAML 文件放在一个指定的目录里。这样,当这台机器上的 kubelet 启动时,它会自动检查这个目录,加载所有的 Pod YAML 文件,然后在这台机器上启动它们。
在 kubeadm 中,Master 组件的 YAML 文件会被生成在 /etc/kubernetes/manifests 路径下。
bootstrap token
kubeadm 就会为集群生成一个 bootstrap token。在后面,只要持有这个token,任何一个安装了 kubelet 和 kubadm 的节点,都可以通过 kubeadm join 加入到这个集群当中。
最后一步,安装默认插件
Kubernetes 默认 kube-proxy 和 DNS这两个插件是必须安装的。它们分别用来提供整个集群的服务发现和 DNS 功能。具体操作是创建两个pod。
kubeadm join工作流程
kubeadm init 生成 bootstrap token 之后,你就可以在任意一台安装了 kubelet 和 kubeadm 的机器上执行 kubeadm join 了。
为了完成注册,kubeadm 至少需要发起一次“不安全模式”的访问到 kube-apiserver,从而拿到保存在 ConfigMap 中的 cluster-info(它保存了 APIServer 的授权信息)。而 bootstrap token,扮演的就是这个过程中的安全验证的角色。
配置 kubeadm 的部署参数
强烈推荐在使用 kubeadm init 部署 Master 节点时,使用下面这条指令:
$ kubeadm init --config kubeadm.yaml