Kubernetes

kubeadm 参数全解

·35 分钟阅读·13959 字

kubeadm 所有核心命令的参数详解,速查手册

📋 目录

🔧 kubeadm 参数全解

关于本文档

kubeadm 所有核心命令的参数手册。本文档是使用 kubeadm 创建集群 的配套参考。

#k8s #kubeadm #reference


📋 目录

  1. #kubeadm init — 初始化控制平面
  2. #kubeadm join — 加入节点
  3. #kubeadm token — 令牌管理
  4. #kubeadm certs — 证书管理
  5. #kubeadm config — 配置管理
  6. #kubeadm reset — 重置集群
  7. #kubeadm upgrade — 升级集群
  8. #kubeadm alpha — Alpha 功能
  9. #kubeadm 配置文件 YAML — YAML 配置方式
  10. #kubeadm 常用参数速查表

kubeadm init

初始化 Kubernetes 控制平面节点。

kubeadm init [flags]

核心参数

参数默认值说明面试价值
--apiserver-advertise-address默认网关 IPAPI Server 公告的 IP 地址⭐⭐⭐
--apiserver-bind-port6443API Server 绑定的端口⭐⭐
--apiserver-cert-extra-sans[]证书额外的 SAN(域名/IP),多 SAN 用逗号分隔⭐⭐⭐
--cert-dir/etc/kubernetes/pki证书存储目录⭐⭐
--configkubeadm 配置文件路径(推荐使用)⭐⭐⭐
--control-plane-endpoint高可用必用,负载均衡器地址 host:port⭐⭐⭐⭐
--cri-socket自动检测CRI 套接字路径,如 unix:///run/containerd/containerd.sock⭐⭐
--dry-runfalse试运行,不实际执行,常用于验证配置⭐⭐
--feature-gates""启用/禁用实验特性,如 --feature-gates="EtcdLearnerMode=true"⭐⭐⭐
--ignore-preflight-errors[]忽略指定的预检错误,如 --ignore-preflight-errors=Swap,NumCPU⭐⭐⭐
--image-repositoryregistry.k8s.io镜像仓库地址,离线部署时修改⭐⭐⭐
--kubernetes-versionstable-1指定 K8s 版本,如 v1.36.0⭐⭐
--node-name主机名节点名称⭐⭐
--pod-network-cidrPod 网段 CIDR,必须与 CNI 插件一致⭐⭐⭐⭐
--service-cidr10.96.0.0/12Service 网段 CIDR⭐⭐
--service-dns-domaincluster.localService DNS 域名后缀
--skip-token-printfalse不打印默认 token
--token自动生成指定 bootstrap token⭐⭐
--token-ttl24h0m0stoken 有效时长(0 表示永不过期)⭐⭐
--upload-certsfalseHA 专用,上传控制平面证书供其他节点使用⭐⭐⭐⭐
--v0日志级别,--v=5 查看详细日志用于排错⭐⭐

实战示例

## 📖 最简方式
sudo kubeadm init

## ⚡ 单控制平面(完整参数)
sudo kubeadm init \
  --apiserver-advertise-address=192.168.1.100 \
  --apiserver-cert-extra-sans="k8s.example.com,10.0.0.1" \
  --pod-network-cidr=10.244.0.0/16 \
  --service-cidr=10.96.0.0/12 \
  --kubernetes-version=v1.36.0 \
  --node-name=master-1 \
  --v=5

## 🔧 高可用控制平面首节点
sudo kubeadm init \
  --control-plane-endpoint=192.168.1.20:6443 \
  --apiserver-advertise-address=192.168.1.101 \
  --pod-network-cidr=10.244.0.0/16 \
  --upload-certs

## ⚙️ 离线部署(指定私有镜像仓库)
sudo kubeadm init \
  --image-repository=registry.internal.company.com/k8s \
  --kubernetes-version=v1.36.0 \
  --pod-network-cidr=10.244.0.0/16

## 5. 忽略预检错误(踩坑时用)
sudo kubeadm init \
  --ignore-preflight-errors=Swap,NumCPU,FileAvailable--etc-kubernetes-manifests-etcd.yaml \
  --pod-network-cidr=10.244.0.0/16

## 6. 试运行验证配置
sudo kubeadm init --config=kubeadm-config.yaml --dry-run

参数组合速记

面试口诀

单控制平面记 3 个--apiserver-advertise-address + --pod-network-cidr + --kubernetes-version

高可用多加 2 个--control-plane-endpoint + --upload-certs

排错用 3 个--v=5 + --ignore-preflight-errors + --dry-run


kubeadm join

将节点加入已有集群。

kubeadm join [endpoint:port] [flags]

核心参数

参数默认值说明面试价值
--config配置文件路径⭐⭐
--control-planefalseHA 专用,将节点作为控制平面加入⭐⭐⭐⭐
--certificate-keyHA 专用,解密控制平面证书的密钥⭐⭐⭐⭐
--cri-socket自动检测CRI 套接字路径⭐⭐
--discovery-file用于发现集群的配置文件(替代 token)⭐⭐
--discovery-token发现令牌⭐⭐⭐
--discovery-token-ca-cert-hashCA 证书的 SHA256 哈希值,验证集群身份⭐⭐⭐⭐
--discovery-token-unsafe-skip-ca-verificationfalse跳过 CA 验证(仅测试用,生产禁止⭐⭐⭐
--ignore-preflight-errors[]忽略预检错误⭐⭐
--node-name主机名节点名称
--tls-bootstrap-tokenTLS 引导令牌⭐⭐
--tokenbootstrap token⭐⭐⭐
--v0日志级别

实战示例

## 📖 Worker 节点加入(最常用)
sudo kubeadm join 192.168.1.100:6443 \
  --token <token> \
  --discovery-token-ca-cert-hash sha256:<hash>

## ⚡ 控制平面节点加入(HA)
sudo kubeadm join 192.168.1.20:6443 \
  --token <token> \
  --discovery-token-ca-cert-hash sha256:<hash> \
  --control-plane \
  --certificate-key <key>

## 🔧 指定节点名加入
sudo kubeadm join 192.168.1.100:6443 \
  --token <token> \
  --discovery-token-ca-cert-hash sha256:<hash> \
  --node-name=worker-production-01

## ⚙️ 跳过证书验证(仅开发环境!)
sudo kubeadm join 192.168.1.100:6443 \
  --token <token> \
  --discovery-token-unsafe-skip-ca-verification

## 5. 使用配置文件加入
sudo kubeadm join --config=join-config.yaml

## 6. 忽略预检错误
sudo kubeadm join 192.168.1.100:6443 \
  --token <token> \
  --discovery-token-ca-cert-hash sha256:<hash> \
  --ignore-preflight-errors=Swap

安全警告

--discovery-token-unsafe-skip-ca-verification 严禁在生产环境使用! 跳过 CA 验证意味着无法确认连接的是否是真正的集群,可能被中间人攻击。


kubeadm token

管理 bootstrap token。

kubeadm token [subcommand] [flags]

子命令

子命令说明常用度
create创建新 token⭐⭐⭐⭐⭐
list列出所有 token⭐⭐⭐⭐
delete删除 token⭐⭐⭐
generate生成但不保存 token⭐⭐

create 参数

kubeadm token create [flags]
参数默认值说明
--config配置文件路径
--description""token 描述,如 --description="用于 worker 节点加入"
--groups[]token 关联的额外组
--print-join-commandfalse最实用! 直接打印完整的 join 命令
--ttl24h0m0s有效时长,0 表示永不过期
--usages[signing,authentication]token 用途

实战示例

## 📖 创建 token 并直接打印 join 命令(最常用)
kubeadm token create --print-join-command

## ⚡ 创建永不过期的 token(生产不推荐)
kubeadm token create --ttl=0

## 🔧 创建 2 小时有效期的 token(适合临时使用)
kubeadm token create --ttl=2h --description="临时扩容"

## ⚙️ 列出所有 token
kubeadm token list

## 5. 删除指定 token
kubeadm token delete <token-id>

## 6. 只生成 token 但不保存到集群
kubeadm token generate

实用技巧

最常用的就是 kubeadm token create --print-join-command,一步搞定! 这个命令会自动生成 token 并拼好完整的 kubeadm join 命令,直接复制粘贴即可。


kubeadm certs

管理集群证书。

kubeadm certs [subcommand] [flags]

子命令

子命令说明面试价值
check-expiration查看所有证书有效期⭐⭐⭐⭐⭐
renew续期证书⭐⭐⭐⭐
generate-csr生成 CSR(证书签名请求)⭐⭐
certificate-key生成用于 HA 的 certificate-key⭐⭐⭐⭐

renew 子参数

kubeadm certs renew [subcommand] [flags]
子命令续期的证书
all续期所有证书
admin.confadmin 客户端证书
apiserverAPI Server 服务端证书
apiserver-etcd-clientAPI Server 连接 etcd 的客户端证书
apiserver-kubelet-clientAPI Server 连接 kubelet 的客户端证书
controller-manager.confController Manager 证书
etcd-healthcheck-clientetcd 健康检查证书
etcd-peeretcd 节点间通信证书
etcd-serveretcd 服务端证书
front-proxy-clientFront Proxy 客户端证书
scheduler.confScheduler 证书

实战示例

## 📖 查看所有证书到期时间(日常巡检)
kubeadm certs check-expiration

## 输出示例:
## [CERTIFICATE]                EXPIRES                  RESIDUAL TIME   CERTIFICATE AUTHORITY
## admin.conf                   May 30, 2027 00:00 UTC   364d            ca
## apiserver                    May 30, 2027 00:00 UTC   364d            ca
## ...

## ⚡ 续期所有证书
kubeadm certs renew all

## 🔧 只续期 API Server 证书
kubeadm certs renew apiserver

## ⚙️ 续期后需要重启控制平面组件
## 修改 Static Pod Manifest 的 annotation 触发滚动更新
## 或直接重启 kubelet
sudo systemctl restart kubelet

## 5. 生成 HA 用的 certificate-key
kubeadm certs certificate-key

## ⚙️  kubectl(续期后需要)
## 如果 admin.conf 更新了,需要重新复制
sudo cp /etc/kubernetes/admin.conf $HOME/.kube/config

重要

kubeadm certs renew all 只续期证书,不会重启组件!

续期后需要:

  1. 重启 kubelet:sudo systemctl restart kubelet
  2. 或者修改 Static Pod Manifest(加个 annotation 触发重建)
  3. 更新用户的 kubeconfig:重新 cp admin.conf ~/.kube/config

kubeadm config

查看和管理 kubeadm 配置。

kubeadm config [subcommand] [flags]

子命令

子命令说明常用度
view查看当前集群的 kubeadm 配置⭐⭐⭐⭐
print打印默认配置模板⭐⭐⭐
migrate将旧版配置迁移到新版 API⭐⭐
images管理镜像相关操作⭐⭐⭐

images 子命令

kubeadm config images [subcommand] [flags]
子命令说明实践价值
list列出所需镜像列表⭐⭐⭐⭐
pull拉取所需镜像⭐⭐⭐⭐

实战示例

## 📖 查看当前集群的 kubeadm 配置
kubeadm config view

## ⚡ 打印 kubeadm init 的默认配置模板
kubeadm config print init-defaults

## 🔧 打印 kubeadm join 的默认配置模板
kubeadm config print join-defaults

## ⚙️ 列出指定版本所需的镜像
kubeadm config images list --kubernetes-version=v1.36.0

## 5. 拉取 kubeadm 所需镜像(离线部署准备)
kubeadm config images pull --kubernetes-version=v1.36.0

## 6. 使用自定义仓库拉取镜像
kubeadm config images pull \
  --image-repository=registry.internal.company.com/k8s \
  --kubernetes-version=v1.36.0

## 7. 将旧版配置迁移到新版
kubeadm config migrate --old-config old.yaml --new-config new.yaml

离线部署批量拉取镜像

# 先拉取全部镜像
kubeadm config images pull --kubernetes-version=v1.36.0

# 然后导出并传到离线环境
docker save -o k8s-images.tar $(kubeadm config images list --kubernetes-version=v1.36.0 | tr '\n' ' ')

kubeadm reset

重置节点,清除所有 kubeadm 安装的数据。

kubeadm reset [flags]
参数默认值说明
--cert-dir/etc/kubernetes/pki证书目录,指定后清除该目录
--config配置文件路径
--cri-socket自动检测CRI 套接字路径
--forcefalse强制重置,不提示确认
--ignore-preflight-errors[]忽略预检错误

实战示例

## 📖 标准重置
sudo kubeadm reset

## ⚡ 强制重置(不提示确认)
sudo kubeadm reset --force

## 🔧 重置后清理 kubeconfig
rm -rf $HOME/.kube

## ⚙️ 完整重置脚本
sudo kubeadm reset --force
sudo rm -rf /etc/kubernetes/
sudo rm -rf /var/lib/etcd/
sudo rm -rf $HOME/.kube/
sudo iptables -F && sudo iptables -t nat -F && sudo iptables -t mangle -F
sudo systemctl restart containerd

注意

kubeadm reset 不会自动清理 kubelet 配置、容器运行时数据、iptables 规则等。

尤其在控制平面节点上,etcd 数据目录 /var/lib/etcd/ 需要手动删除,否则重新 init 时会报错。


kubeadm upgrade

升级 Kubernetes 集群版本。

kubeadm upgrade [subcommand] [flags]

子命令

子命令说明面试价值
plan检查可升级的版本并显示差异⭐⭐⭐⭐
apply执行升级⭐⭐⭐⭐
diff显示升级前后配置差异⭐⭐⭐
node升级节点配置⭐⭐

参数

参数默认值说明
--certificate-renewaltrue升级时是否自动续期证书
--config配置文件路径
--etcd-upgradetrue是否升级 etcd
--feature-gates""特性开关
--forcefalse强制升级
--image-repositoryregistry.k8s.io镜像仓库
--kubeconfig/etc/kubernetes/admin.confkubeconfig 路径
--v0日志级别
--yesfalse跳过确认提示

HA 集群升级流程

## ----- 重要:HA 集群必须逐个节点升级!-----

## Step 1:在每个节点上依次执行

## 先 drain 节点(迁移 Pod)
kubectl drain master-1 --ignore-daemonsets --delete-emptydir-data

## 升级 kubeadm
sudo apt-mark unhold kubeadm
sudo apt-get update && sudo apt-get install -y kubeadm=1.36.0-1.1
sudo apt-mark hold kubeadm

## 查看升级计划
sudo kubeadm upgrade plan

## 执行升级
sudo kubeadm upgrade apply v1.36.0

## 升级 kubelet 和 kubectl
sudo apt-mark unhold kubelet kubectl
sudo apt-get update && sudo apt-get install -y kubelet=1.36.0-1.1 kubectl=1.36.0-1.1
sudo apt-mark hold kubelet kubectl
sudo systemctl daemon-reload && sudo systemctl restart kubelet

## 恢复节点调度
kubectl uncordon master-1

## 然后到下一个控制平面节点重复以上步骤

kubeadm alpha

提供 Alpha 级别的功能,可能在未来版本中变更或移除。

kubeadm alpha [subcommand] [flags]
子命令说明
certs证书相关操作(已移入 kubeadm certs,旧版用)
kubeconfig生成 kubeconfig 文件
selfhosting将静态 Pod 转换为自托管 DaemonSet(已废弃)

实用示例

## 生成一个指定用户名的 kubeconfig
kubeadm alpha kubeconfig user --client-name=deploy-bot

注意

kubeadm 1.36 中大部分 alpha 功能已迁移到正式子命令(如 certs)。 不再建议使用 alpha 子命令,直接使用对应的正式子命令即可。


kubeadm 配置文件 YAML

面试重点:为什么要用配置文件而不是命令行参数?

  1. 可重复 — 配置文件可以版本化管理(Git)
  2. 可审计 — 清晰记录集群的初始化配置
  3. 完整 — 命令行参数有限,配置文件的选项更全面
  4. 可迁移 — 配置文件可用于 initjoinupgrade

kubeadm init 配置示例

## kubeadm-config.yaml
apiVersion: kubeadm.k8s.io/v1beta4
kind: InitConfiguration
bootstrapTokens:
  - token: "abcdef.0123456789abcdef"
    description: "kubeadm bootstrap token"
    ttl: "24h"
nodeRegistration:
  name: "master-1"
  criSocket: "unix:///run/containerd/containerd.sock"
  kubeletExtraArgs:
    node-ip: "192.168.1.100"
localAPIEndpoint:
  advertiseAddress: "192.168.1.100"
  bindPort: 6443
---
apiVersion: kubeadm.k8s.io/v1beta4
kind: ClusterConfiguration
kubernetesVersion: "v1.36.0"
controlPlaneEndpoint: "192.168.1.20:6443"   # HA 专用
networking:
  podSubnet: "10.244.0.0/16"
  serviceSubnet: "10.96.0.0/12"
  dnsDomain: "cluster.local"
apiServer:
  certSANs:
    - "k8s.example.com"
    - "10.0.0.1"
  extraArgs:
    authorization-mode: "Node,RBAC"
controllerManager:
  extraArgs:
    bind-address: "0.0.0.0"
scheduler:
  extraArgs:
    bind-address: "0.0.0.0"
imageRepository: "registry.k8s.io"
---
apiVersion: kubelet.config.k8s.io/v1beta1
kind: KubeletConfiguration
cgroupDriver: "systemd"
maxPods: 110
## 使用配置文件初始化
sudo kubeadm init --config=kubeadm-config.yaml --upload-certs

kubeadm join 配置示例

## kubeadm-join-config.yaml
apiVersion: kubeadm.k8s.io/v1beta4
kind: JoinConfiguration
nodeRegistration:
  name: "worker-1"
  criSocket: "unix:///run/containerd/containerd.sock"
  kubeletExtraArgs:
    node-ip: "192.168.1.201"
discovery:
  bootstrapToken:
    token: "abcdef.0123456789abcdef"
    apiServerEndpoint: "192.168.1.20:6443"
    caCertHashes:
      - "sha256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
  tlsBootstrapToken: "abcdef.0123456789abcdef"
---
## 如果是控制平面节点加入,追加以下部分
apiVersion: kubeadm.k8s.io/v1beta4
kind: InitConfiguration
localAPIEndpoint:
  advertiseAddress: "192.168.1.102"
  bindPort: 6443
nodeRegistration:
  name: "master-2"
## 使用配置文件加入
sudo kubeadm join --config=kubeadm-join-config.yaml

配置文件对比:命令行 vs YAML

命令行参数YAML 配置路径备注
--apiserver-advertise-addressInitConfiguration.localAPIEndpoint.advertiseAddress节点级
--pod-network-cidrClusterConfiguration.networking.podSubnet集群级
--control-plane-endpointClusterConfiguration.controlPlaneEndpointHA 专用
--kubernetes-versionClusterConfiguration.kubernetesVersion集群级
--node-nameInitConfiguration.nodeRegistration.name节点级
--cri-socketInitConfiguration.nodeRegistration.criSocket节点级
--cert-dirInitConfiguration.certificateDir节点级
--image-repositoryClusterConfiguration.imageRepository集群级
--service-cidrClusterConfiguration.networking.serviceSubnet集群级
--tokenInitConfiguration.bootstrapTokens[0].token节点级

如何从现有集群导出配置?

# 查看当前集群的 InitConfiguration
kubectl -n kube-system get configmap kubeadm-config -o yaml

# 或使用 kubeadm 命令
kubeadm config view

kubeadm 常用参数速查表

按场景分类

flowchart TD
    subgraph "场景与参数速查"
        A1[单控制平面] --> B1["--pod-network-cidr<br/>--apiserver-advertise-address"]
        A2[高可用 HA] --> B2["--control-plane-endpoint<br/>--upload-certs<br/>--certificate-key"]
        A3[离线部署] --> B3["--image-repository<br/>kubeadm config images pull"]
        A4[问题排查] --> B4["--v=5<br/>--ignore-preflight-errors<br/>--dry-run"]
        A5[版本升级] --> B5["kubeadm upgrade plan<br/>kubeadm upgrade apply"]
        A6[证书管理] --> B6["kubeadm certs check-expiration<br/>kubeadm certs renew all"]
        A7[节点加入] --> B7["--token<br/>--discovery-token-ca-cert-hash"]
    end

全部命令一览

命令用途推荐参数
kubeadm init初始化控制平面--pod-network-cidr, --control-plane-endpoint, --upload-certs
kubeadm join加入节点--token, --discovery-token-ca-cert-hash, --control-plane
kubeadm token create --print-join-command生成 join 命令最常用,记这一个就够了
kubeadm reset重置节点--force
kubeadm certs check-expiration查看证书到期
kubeadm certs renew all续期所有证书
kubeadm config view查看集群配置
kubeadm config images list列出所需镜像--kubernetes-version
kubeadm config images pull拉取镜像--kubernetes-version, --image-repository
kubeadm upgrade plan查看升级计划
kubeadm upgrade apply执行升级--yes(跳过确认)

关联文档

  • ../../network/网络 — 集群网络配置(CNI/flannel/Calico)
  • ../../network/tools/firewalld 与 iptables 对比 — 节点防火墙配置
  • ../service/K8s Service DNS 实现原理 — CoreDNS 域名解析