kubeadm init 的工作流程

# kubeadm init 的工作流程
> $ kubeadm init --config kubeadm.yaml

## 1. Preflight Checks
## 2. 生成 Kubernetes 对外提供服务所需的各种证书和对应的目录
> 生成的证书文件都放在 Master 节点
 
> 最主要的证书文件是 ca.crt 和对应的私钥 ca.key

```
[root@k8smaster pki]# pwd
/etc/kubernetes/pki
[root@k8smaster pki]# ll
total 56
-rw-r--r--. 1 root root 1135 Dec  7 14:54 apiserver-etcd-client.crt
-rw-------. 1 root root 1675 Dec  7 14:54 apiserver-etcd-client.key
-rw-r--r--. 1 root root 1143 Dec  7 14:54 apiserver-kubelet-client.crt
-rw-------. 1 root root 1675 Dec  7 14:54 apiserver-kubelet-client.key
-rw-r--r--. 1 root root 1265 Dec  7 14:54 apiserver.crt
-rw-------. 1 root root 1679 Dec  7 14:54 apiserver.key
-rw-r--r--. 1 root root 1066 Dec  7 14:54 ca.crt
-rw-------. 1 root root 1675 Dec  7 14:54 ca.key
drwxr-xr-x. 2 root root  162 Dec  7 14:54 etcd
-rw-r--r--. 1 root root 1078 Dec  7 14:54 front-proxy-ca.crt
-rw-------. 1 root root 1675 Dec  7 14:54 front-proxy-ca.key
-rw-r--r--. 1 root root 1103 Dec  7 14:54 front-proxy-client.crt
-rw-------. 1 root root 1679 Dec  7 14:54 front-proxy-client.key
-rw-------. 1 root root 1679 Dec  7 14:54 sa.key
-rw-------. 1 root root  451 Dec  7 14:54 sa.pub
```
## 3. 为其他组件生成访问 kube-apiserver 所需的配置文件
> 这些文件的路径是:/etc/kubernetes/xxx.conf:

> 这些文件里面记录的是,当前这个 Master 节点的服务器地址、监听端口、证书目录等信息。这样,对应的客户端(比如 scheduler,kubelet 等),可以直接加载相应的文件,使用里面的信息与 kube-apiserver 建立安全连接。

```
[root@k8smaster kubernetes]# ll /etc/kubernetes/
total 32
-rw-------. 1 root root 5567 Dec  7 14:54 admin.conf
-rw-------. 1 root root 5603 Dec  7 14:54 controller-manager.conf
-rw-------. 1 root root 1927 Dec  7 14:55 kubelet.conf
drwxr-xr-x. 2 root root  113 Dec  7 14:54 manifests
drwxr-xr-x. 3 root root 4096 Dec  7 14:54 pki
-rw-------. 1 root root 5547 Dec  7 14:54 scheduler.conf
```
## 4. kubeadm 会为 Master 组件生成 Pod 配置文件
> Master 组件的 YAML 文件会被生成在 /etc/kubernetes/manifests 路径下

> Kubernetes 有三个 Master 组件 kube-apiserver、kube-controller-manager、kube-scheduler,而它们都会被使用 Pod 的方式部署起来

```
[root@k8smaster kubernetes]# ll /etc/kubernetes/manifests/
total 16
-rw-------. 1 root root 2206 Dec  7 14:54 etcd.yaml
-rw-------. 1 root root 3321 Dec  7 14:54 kube-apiserver.yaml
-rw-------. 1 root root 2828 Dec  7 14:54 kube-controller-manager.yaml
-rw-------. 1 root root 1414 Dec  7 14:54 kube-scheduler.yaml
```
> 而一旦这些 YAML 文件出现在被 kubelet 监视的 /etc/kubernetes/manifests 目录下,kubelet 就会自动创建这些 YAML 文件中定义的 Pod,即 Master 组件的容器。

> Master 容器启动后,kubeadm 会通过检查 localhost:6443/healthz 这个 Master 组件的健康检查 URL,等待 Master 组件完全运行起来。

## 5. kubeadm 就会为集群生成一个 bootstrap token
> 在后面,只要持有这个 token,任何一个安装了 kubelet 和 kubadm 的节点,都可以通过 kubeadm join 加入到这个集群当中。

> 在 token 生成之后,kubeadm 会将 ca.crt 等 Master 节点的重要信息,通过 ConfigMap 的方式保存在 Etcd 当中,供后续部署 Node 节点使用。这个 ConfigMap 的名字是 cluster-info。

## 6. 最后一步,就是安装默认插件
Kubernetes 默认 kube-proxy 和 DNS 这两个插件是必须安装的。它们分别用来提供整个集群的服务发现和 DNS 功能


## 7. 
1. kubeadm 至少需要发起一次“不安全模式”的访问到 kube-apiserver,从而拿到保存在 ConfigMap 中的 cluster-info(它保存了 APIServer 的授权信息)。而 bootstrap token,扮演的就是这个过程中的安全验证的角色。
2. 只要有了 cluster-info 里的 kube-apiserver 的地址、端口、证书,kubelet 就可以以“安全模式”连接到 apiserver 上,这样一个新的节点就部署完成了。
 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值