使用 kubespray 部署 Kubernetes 集群
说明
kubespray 是 CNCF 官方(kubernetes-sigs)维护的集群部署工具,本质是一套 Ansible playbook。适用场景:3 台起步的多节点生产级集群自动化部署。环境示例:Mac 作为控制机,3 台 Rocky 10 ARM 虚拟机(1 master + 2 worker)。
原理:它是什么、怎么工作的
kubespray 不是安装程序,是一大 堆 Ansible 剧本(YAML 任务清单)。
运行模式是控制机 → SSH → 所有节点:
你执行 ansible-playbook 的机器(控制机)
│ SSH 并发连到每一台
├──► master (被装:etcd + 控制平面 + kubelet)
├──► worker1 (被装:kubelet + 容器运行时)
└──► worker2 (被装:kubelet + 容器运行时)
三个核心机制:
- Agentless(无代理):目标节点什么都不用装(有 Python 即可),Ansible 通过 SSH 登上去执行任务,跑完就断开,没有常驻 agent
- Role 编排:
cluster.yml按顺序调用几十个 role(预处理 OS → 装 containerd → CFSSL 生成证书 → 起 etcd → 控制平面静态 Pod → kubelet TLS Bootstrapping → CNI → CoreDNS),每一步都对应二进制部署里手动干的事 - 幂等:每个 task 声明"期望状态",已满足就跳过,所以部署中断可重跑、加节点用
scale.yml只动增量
和二进制部署的关系
kubespray 最终装出来的也是 kubeadm 风格的集群(控制平面跑在 /etc/kubernetes/manifests/ 静态 Pod 里)。先手动装过一遍二进制,再看它的剧本每一步都会觉得眼熟,排错时能看懂它卡在哪。
官方资料
| 资源 | 地址 |
|---|---|
| GitHub 仓库 | github.com/kubernetes-sigs/kubespray |
| 官方文档 | kubespray.io |
| Getting Started | getting-started.md |
| k8s 官方文档页 | kubernetes.io - tools/kubespray |
前置条件
- 控制机:Mac / 任意 Linux,要 求 Python 3 + Ansible 14(ansible-core ≥ 2.21)+ Jinja 3.1+ + python-netaddr
- 目标节点:
- SSH 免密可达(
ssh-copy-id配好) - 能联网拉镜像和二进制(离线场景见官方 offline 文档)
- IPv4 转发已开启
- firewalld 关掉(kubespray 不管防火墙)
- root 权限(或配置
ansible_become,跑命令时加-b)
- SSH 免密可达(
- 硬件底线:控制平面 2G 内存 / worker 1G 内存
部署步骤
1. 克隆仓库并锁定版本
git clone https://github.com/kubernetes-sigs/kubespray.git
cd kubespray && git checkout v2.31.0 # 务必锁 tag,master 分支常有 breaking change
python3 -m venv venv && source venv/bin/activate
pip install -r requirements.txt
2. 生成 inventory(节点清单)
cp -r inventory/sample inventory/mycluster
vim inventory/mycluster/inventory.ini
1 master + 2 worker 的写法:
[all]
master ansible_host=10.211.55.10 ip=10.211.55.10
worker1 ansible_host=10.211.55.11 ip=10.211.55.11
worker2 ansible_host=10.211.55.12 ip=10.211.55.12
[kube_control_plane]
master
[etcd]
master
[kube_node]
worker1
worker2
[calico_rr]
[k8s_cluster:children]
kube_control_plane
kube_node
calico_rr
3 台也能做 HA
3 台全做控制平面(master/worker1/worker2 都加进 [kube_control_plane] 和 [etcd])就是标准 3 节点 HA 集群,官方推荐生产至少 3 个 etcd。
3. 配置关键变量
vim inventory/mycluster/group_vars/k8s_cluster/k8s-cluster.yml
kube_network_plugin: calico # 默认 calico;学习环境可用 flannel 更简单
container_manager: containerd # 默认即是
# 建议加上:部署完自动把 kubectl 和 kubeconfig 下发到控制机
kubectl_localhost: true
kubeconfig_localhost: true
4. 一键部署
ansible-playbook -i inventory/mycluster/inventory.ini cluster.yml -b -v \
--private-key=~/.ssh/id_rsa
5. 验证
cd inventory/mycluster/artifacts && ./kubectl.sh get nodes
# 或把 admin.conf 拷成 ~/.kube/config 后直接 kubectl
日常运维 playbook
都带 -i inventory/mycluster/inventory.ini -b 执行:
| playbook |
|---|