kubeadm init
一、认识
kubeadm init
是 Kubernetes
提供的一个命令,用于初始化 Kubernetes
集群的控制平面节点(Master Node
)。它负责设置和配置集群的核心组件,包括 API Server
、Controller Manager
、Scheduler
和 etcd
数据存储。kubeadm init
旨在简化 Kubernetes
集群的部署过程,使其更加自动化和易于管理。
二、细节
kubeadm init
命令用于初始化 Kubernetes
主节点(Master Node
)。 命令如下所示:
# 1. 生成默认配置文件
kubeadm config print init-defaults > kubeadm.yaml
# 2. 执行配置文件,进行初始化
kubeadm init --config kubeadm.yaml
以下是 kubeadm init
命令的详细工作流程:
-
验证系统要求: 运行一些列的预检项来验证系统状态。一些检查项目仅仅触发警告,其他的则会被视为错误并且退出
kbueadm
, 除非问题得到解决或者用户指定了--ignore-preflight-errors=参数
-
检查操作系统和内核版本:确保系统满足
Kubernetes
的最低要求。 -
检查网络配置:确保网络配置正确,特别是防火墙和
IP
转发设置。 -
检查
Docker
和其他依赖项:确保Docker
和其他必要的依赖项已正确安装和配置。
-
-
生成配置文件
-
生成默认配置文件:
kubeadm
会生成一个默认的配置文件,包含集群的基本配置参数。 -
应用用户提供的配置:如果用户提供了自定义配置文件,
kubeadm
会应用这些配置。
-
-
初始化控制平面组件
-
生成证书和密钥:
kubeadm
会生成必要的证书和密钥,用于安全通信。kubeadm
生成一个自签名的CA
证书来为集群中的每一个组件建立身份标识,默认生成目录为/etc/kubernetes/pki
。用户也可以通过--cert-dir
来指定自己配置的CA
证书或者密钥。 -
生成
kubeconfig
文件:生成kubeconfig
文件,用于与集群通信。kubeadm
将kubeconfig
文件写入/etc/kubernetes
目录,以便kubelet
、 控制器管理器 和 调度器 用来连接到API
服务器,它们每一个都有自己的身份标识,同时生成一个名为admin.conf
的独立的kubeconfig
文件,用于管理操作。 -
为
API
服务器、控制器管理器 和 调度器 生成静态Pod
的清单文件。静态Pod
的清单文件被写入到/etc/kubernetes/manifests
目录。kubelet
会监视这个目录以便在系统启动的时候创建Pod
。 一旦Control Plane
的Pod
都运行起来,kubeadm init
的工作流就继续往下执行。 -
启动
etcd
:启动etcd
数据存储服务。 -
启动
API Server
:启动Kubernetes API Server
。 -
启动
Controller Manager
:启动Kubernetes Controller Manager
。 -
启动
Scheduler
:启动Kubernetes Scheduler
。 -
kubeadm
会创建configmap
, 提供添加节点所需要的信息 -
对
Control Plane
节点应用labels
和taints
标记,以便不会在它上面运行其他的工作负载。
-
-
配置网络
-
配置
Pod
网络:kubeadm
会等待用户部署Pod
网络插件(如Flannel
、Calico
等)。 -
配置
Service
网络:配置Kubernetes Service
网络。
-
-
生成引导令牌
-
生成引导令牌:生成一个引导令牌,用于将工作节点(
Worker Nodes
)加入集群。 -
打印加入命令:打印
kubeadm join
命令,用户可以使用该命令将工作节点加入集群。
-
-
完成初始化
-
检查组件状态:检查所有控制平面组件的状态,确保它们正常运行。
-
打印成功信息:打印初始化成功信息和后续步骤提示。
-