目录

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 服务范围

部署步骤

  1. 检查配置(预执行检查)

    bash

    ansible-playbook -i inventory.ini --check deploy_k8s.yml
  2. 执行实际部署

    bash

    ansible-playbook -i inventory.ini deploy_k8s.yml

验证方法

部署完成后,在控制平面节点执行以下命令验证集群状态:

  1. 检查节点状态

    bash

    kubectl get nodes

    预期结果:所有节点状态为 Ready

  2. 检查系统组件状态

    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 集群(可选择堆叠式或外部部署)
  • 部署集群自动扩缩容组件

后续维护

  1. 版本更新定期更新 Kubernetes 版本(使用 kubeadm upgrade):

    bash

    # 控制平面更新
    sudo kubeadm upgrade plan
    sudo kubeadm upgrade apply v1.28.1
    
    # 工作节点更新
    sudo kubeadm upgrade node
  2. 资源监控

    • 定期检查节点资源使用情况
    • 根据需求及时扩容集群
    • 监控 Pod 资源请求和限制是否合理
  3. 故障处理

    • 制定故障转移预案
    • 定期演练故障恢复流程
    • 建立完善的日志收集和分析系统