跳到主要内容

kubeadm init

2024年08月20日
柏拉文
越努力,越幸运

一、认识


kubeadm initKubernetes 提供的一个命令,用于初始化 Kubernetes 集群的控制平面节点(Master Node)。它负责设置和配置集群的核心组件,包括 API ServerController ManagerScheduleretcd 数据存储。kubeadm init 旨在简化 Kubernetes 集群的部署过程,使其更加自动化和易于管理。

二、细节


kubeadm init 命令用于初始化 Kubernetes 主节点(Master Node)。 命令如下所示:

# 1. 生成默认配置文件
kubeadm config print init-defaults > kubeadm.yaml
# 2. 执行配置文件,进行初始化
kubeadm init --config kubeadm.yaml

以下是 kubeadm init 命令的详细工作流程:

  1. 验证系统要求: 运行一些列的预检项来验证系统状态。一些检查项目仅仅触发警告,其他的则会被视为错误并且退出 kbueadm, 除非问题得到解决或者用户指定了 --ignore-preflight-errors=参数

    • 检查操作系统和内核版本:确保系统满足 Kubernetes 的最低要求。

    • 检查网络配置:确保网络配置正确,特别是防火墙和 IP 转发设置。

    • 检查 Docker 和其他依赖项:确保 Docker 和其他必要的依赖项已正确安装和配置。

  2. 生成配置文件

    • 生成默认配置文件:kubeadm 会生成一个默认的配置文件,包含集群的基本配置参数。

    • 应用用户提供的配置:如果用户提供了自定义配置文件,kubeadm 会应用这些配置。

  3. 初始化控制平面组件

    • 生成证书和密钥:kubeadm 会生成必要的证书和密钥,用于安全通信。 kubeadm 生成一个自签名的 CA 证书来为集群中的每一个组件建立身份标识,默认生成目录为 /etc/kubernetes/pki 。用户也可以通过 --cert-dir 来指定自己配置的 CA 证书或者密钥。

    • 生成 kubeconfig 文件:生成 kubeconfig 文件,用于与集群通信。 kubeadmkubeconfig 文件写入 /etc/kubernetes 目录,以便 kubelet控制器管理器调度器 用来连接到 API 服务器,它们每一个都有自己的身份标识,同时生成一个名为 admin.conf 的独立的 kubeconfig 文件,用于管理操作。

    • API 服务器、控制器管理器调度器 生成静态 Pod 的清单文件。静态 Pod 的清单文件被写入到 /etc/kubernetes/manifests 目录。 kubelet 会监视这个目录以便在系统启动的时候创建 Pod。 一旦 Control PlanePod 都运行起来, kubeadm init 的工作流就继续往下执行。

    • 启动 etcd:启动 etcd 数据存储服务。

    • 启动 API Server:启动 Kubernetes API Server

    • 启动 Controller Manager:启动 Kubernetes Controller Manager

    • 启动 Scheduler:启动 Kubernetes Scheduler

    • kubeadm 会创建 configmap, 提供添加节点所需要的信息

    • Control Plane 节点应用 labelstaints 标记,以便不会在它上面运行其他的工作负载。

  4. 配置网络

    • 配置 Pod 网络:kubeadm 会等待用户部署 Pod 网络插件(如 FlannelCalico 等)。

    • 配置 Service 网络:配置 Kubernetes Service 网络。

  5. 生成引导令牌

    • 生成引导令牌:生成一个引导令牌,用于将工作节点(Worker Nodes)加入集群。

    • 打印加入命令:打印 kubeadm join 命令,用户可以使用该命令将工作节点加入集群。

  6. 完成初始化

    • 检查组件状态:检查所有控制平面组件的状态,确保它们正常运行。

    • 打印成功信息:打印初始化成功信息和后续步骤提示。