Kubernetes-集群自动部署-Ansible-方案文档
目录
Kubernetes 集群自动部署 Ansible 方案文档
目录
概述
本文档提供了一个使用 Ansible 自动部署 3 节点 Kubernetes 集群的完整方案,包括控制平面 1 台和工作节点 2 台。该方案适用于生产环境,包含详细的配置说明和操作指南。
环境要求
- 服务器数量:3 台(1 台控制平面,2 台工作节点)
- 硬件配置:每台服务器至少 2CPU、2GB 内存、20GB 磁盘空间
- 操作系统:
- Ubuntu 20.04+/Debian 11+
- 或 CentOS 7+/RHEL 7+
- 网络要求:
- 所有节点间网络互通
- 能访问互联网(用于下载组件)
- 已配置 Ansible 控制节点 SSH 访问权限
文件结构
plaintext
k8s-deployment/
├── deploy_k8s.yml # 主剧本
├── inventory.ini # 主机清单
├── group_vars/
│ └── k8s_cluster.yml # 集群变量配置
├── roles/
│ ├── control_plane/ # 控制平面角色
│ └── workers/ # 工作节点角色
└── templates/ # 模板文件
└── k8s.conf.j2 # Kubernetes内核模块配置模板
部署剧本与模板
内核模块配置模板(templates/k8s.conf.j2)
conf
# 由Ansible自动生成的Kubernetes内核模块配置
overlay
br_netfilter
生产环境配置指南
1. 主机清单配置(inventory.ini)
修改控制平面和工作节点的主机名或 IP 地址,并根据实际情况调整 SSH 连接参数:
ini
[control_plane]
master-node ansible_host=192.168.1.100 ansible_user=your_ssh_user
[workers]
worker-node-1 ansible_host=192.168.1.101 ansible_user=your_ssh_user
worker-node-2 ansible_host=192.168.1.102 ansible_user=your_ssh_user
[k8s_cluster:children]
control_plane
workers
# 全局配置
[k8s_cluster:vars]
ansible_ssh_private_key_file=~/.ssh/your_private_key # 如使用密钥认证
ansible_port=22 # 如SSH端口不是默认22,请修改
2. 集群变量配置(group_vars/k8s_cluster.yml)
根据实际需求修改以下关键参数:
yaml
# Kubernetes版本配置
kubernetes_version: "1.28.0" # 选择稳定版本,建议使用官方推荐的稳定版
# 网络配置
network_plugin: "calico" # 生产环境推荐calico
pod_network_cidr: "10.244.0.0/16" # 根据网络规划调整
service_cidr: "10.96.0.0/12" # 确保与现有网络不冲突
# 高可用配置(如需要)
control_plane_vip: "192.168.1.200" # 虚拟IP地址
# 容器运行时
container_runtime: "containerd" # 推荐使用containerd
# 其他配置
kubelet_extra_args: "--node-ip={{ ansible_default_ipv4.address }}"
3. 安全相关配置
生产环境必须配置防火墙规则,只开放必要端口:
控制平面节点需要开放的端口:
- 6443:Kubernetes API
- 2379-2380:etcd 客户端和对等端口
- 10250:Kubelet API
- 10251:kube-scheduler
- 10252:kube-controller-manager
- 10259:kube-scheduler(只读端口)
- 10257:kube-controller-manager(只读端口)
工作节点需要开放的端口:
- 10250:Kubelet API
- 30000-32767:NodePort 服务范围
部署步骤
检查配置(预执行检查)
bash
ansible-playbook -i inventory.ini --check deploy_k8s.yml
执行实际部署
bash
ansible-playbook -i inventory.ini deploy_k8s.yml
验证方法
部署完成后,在控制平面节点执行以下命令验证集群状态:
检查节点状态
bash
kubectl get nodes
预期结果:所有节点状态为 Ready
检查系统组件状态
bash
kubectl get pods --all-namespaces
预期结果:所有 pod 状态为 Running
生产环境最佳实践
1. 备份策略
定期备份 Kubernetes 证书和 etcd 数据:
bash
# 备份证书 sudo cp -r /etc/kubernetes/pki /backup/k8s-pki-$(date +%Y-%m-%d) # 备份etcd数据 ETCDCTL_API=3 etcdctl --endpoints=https://127.0.0.1:2379 \ --cacert=/etc/kubernetes/pki/etcd/ca.crt \ --cert=/etc/kubernetes/pki/apiserver-etcd-client.crt \ --key=/etc/kubernetes/pki/apiserver-etcd-client.key \ snapshot save /backup/etcd-snapshot-$(date +%Y-%m-%d).db
配置定时任务自动备份(crontab):
bash
# 每日凌晨2点执行备份 0 2 * * * /path/to/backup-script.sh
2. 监控配置
部署 Prometheus 和 Grafana 监控集群:
bash
# 使用Helm安装 helm repo add prometheus-community https://prometheus-community.github.io/helm-charts helm install kube-prometheus prometheus-community/kube-prometheus-stack
配置关键指标告警,包括:
- 节点资源使用率(CPU、内存、磁盘)
- Pod 状态异常
- 容器重启次数
- API Server 响应时间
3. 安全加固
- 启用 RBAC 权限控制,遵循最小权限原则
- 配置 PodSecurityContext 限制容器权限
- 启用网络策略限制 Pod 间通信
- 定期更新 Kubernetes 版本和组件
- 配置镜像拉取策略,限制非信任镜像仓库
- 启用审计日志记录 API 操作
4. 高可用考虑
对于生产环境,建议:
- 至少 3 个控制平面节点
- 使用负载均衡器分发 API Server 流量
- 配置 etcd 集群(可选择堆叠式或外部部署)
- 部署集群自动扩缩容组件
后续维护
版本更新定期更新 Kubernetes 版本(使用 kubeadm upgrade):
bash
# 控制平面更新 sudo kubeadm upgrade plan sudo kubeadm upgrade apply v1.28.1 # 工作节点更新 sudo kubeadm upgrade node
资源监控
- 定期检查节点资源使用情况
- 根据需求及时扩容集群
- 监控 Pod 资源请求和限制是否合理
故障处理
- 制定故障转移预案
- 定期演练故障恢复流程
- 建立完善的日志收集和分析系统