这段信息是使用kubeadm init
初始化Kubernetes集群时的关键流程日志,记录了从证书生成到核心组件启动的完整过程,各步骤解释如下:
1. 证书生成([certs] 阶段)
- 在
/etc/kubernetes/pki
目录下生成集群所需的所有证书和密钥,包括:- 根证书(ca):集群所有证书的签发根证书。
-
apiserver证书:用于API Server对外提供服务,包含指定的DNS名称(如
kubernetes.default.svc
)和IP(如集群服务IP10.10.0.1
、节点IP10.0.80.91
等)。 - apiserver-kubelet-client:API Server访问kubelet的客户端证书。
- front-proxy相关证书:用于API Server与前端代理(如kube-proxy)的通信。
- etcd相关证书:etcd数据库的根证书、服务端证书、节点间通信证书(peer)等,确保etcd集群安全通信。
- sa密钥:用于ServiceAccount的签名密钥。
2. kubeconfig配置文件生成([kubeconfig] 阶段)
- 在
/etc/kubernetes
目录下生成集群访问配置文件:-
admin.conf
:管理员(kubectl)访问集群的配置。 -
kubelet.conf
:kubelet组件访问API Server的配置。 -
controller-manager.conf
、scheduler.conf
:控制器管理器、调度器组件的访问配置。
-
- 这些文件包含认证信息(证书、密钥)和API Server地址,用于组件间身份验证。
3. kubelet启动配置([kubelet-start] 阶段)
- 生成kubelet的环境变量文件(
/var/lib/kubelet/kubeadm-flags.env
)和配置文件(/var/lib/kubelet/config.yaml
),定义kubelet的启动参数和运行规则。 - 启动kubelet服务,作为节点上的核心组件,负责管理容器生命周期。
4. 控制平面组件部署([control-plane] 阶段)
- 在
/etc/kubernetes/manifests
目录下创建静态Pod清单,部署控制平面核心组件:- kube-apiserver:集群的“入口”,提供REST API服务。
- kube-controller-manager:运行各种控制器(如节点控制器、副本控制器)。
- kube-scheduler:负责Pod的调度决策。
- 同时部署etcd数据库(以静态Pod形式),存储集群所有状态数据。
5. 控制平面就绪检查([wait-control-plane] 阶段)
- 等待kubelet启动控制平面组件(通过静态Pod清单),超时时间最长4分钟,此处75秒后所有组件就绪。
6. 集群配置存储与标记([upload-config] 等阶段)
- 将初始化配置存储到
kube-system
命名空间的kubeadm-config
ConfigMap中,供后续集群操作(如升级)使用。 - 生成kubelet的集群级配置(
kubelet-config-1.20
ConfigMap),统一管理节点上的kubelet配置。 - 标记当前节点(
master01
)为控制平面节点,添加标签(node-role.kubernetes.io/master
)和污点(NoSchedule
,默认禁止普通Pod调度到控制平面)。
7. 节点加入配置([bootstrap-token] 阶段)
- 生成临时引导令牌(
gn84zk.cu95r4pj4o7mrpry
),用于Worker节点加入集群时的临时认证。 - 配置RBAC规则,允许引导令牌申请长期证书、自动批准节点证书签名请求(CSR)等。
- 创建
kube-public
命名空间下的cluster-info
ConfigMap,包含集群基本信息(如API Server地址、CA证书哈希),供新节点发现集群。
8. 核心插件部署([addons] 阶段)
- 部署集群必需的插件:
- CoreDNS:负责集群内部DNS解析,解析Service名称到集群IP。
- kube-proxy:维护节点网络规则,实现Service的负载均衡和Pod网络通信。
总结
整个过程完成了Kubernetes集群的初始化,包括证书生成、组件部署、网络配置等核心步骤,最终得到一个包含控制平面(master01)、etcd数据库、核心插件的基础集群,可通过引导令牌添加Worker节点扩展集群。