
1. 为什么选择Kubespray部署企业级K8S集群第一次接触Kubespray是在去年帮一家电商公司做容器化改造时。当时客户要求两周内完成生产环境部署还要保证高可用性。我对比了kubeadm、Rancher等方案后最终选择了Kubespray。原因很简单——它把复杂的K8S部署变成了填空题。Kubespray是基于Ansible的集群部署工具最大的优势是开箱即用的生产级配置。比如自动配置多master高可用内置Calico/Flannel等CNI插件集成Ingress、Dashboard等常用组件支持滚动升级和节点扩缩容我特别喜欢它的配置即文档设计。所有参数都在YAML文件里明确定义改个变量就能切换CNI网络方案或者K8S版本。这对需要频繁部署测试环境的企业特别友好。2. 部署前的关键准备工作2.1 硬件资源配置建议根据我的踩坑经验生产环境最少需要这些资源控制节点4核CPU/8GB内存/100GB磁盘建议3台做高可用工作节点根据业务负载调整通常8核16GB起Ansible控制机4核/8GB就是运行Kubespray的那台注意所有节点需要时间同步建议配NTP否则证书会出问题2.2 系统环境配置先在所有节点执行这些基础配置以CentOS 9为例# 关闭防火墙和SELinux sudo systemctl stop firewalld sudo systemctl disable firewalld sudo setenforce 0 sudo sed -i s/^SELINUXenforcing/SELINUXdisabled/ /etc/selinux/config # 配置内核参数 cat EOF | sudo tee /etc/sysctl.d/k8s.conf net.ipv4.ip_forward 1 net.bridge.bridge-nf-call-ip6tables 1 net.bridge.bridge-nf-call-iptables 1 EOF sudo sysctl --system # 关闭swap sudo swapoff -a sudo sed -i / swap / s/^/#/ /etc/fstab3. Kubespray部署全流程详解3.1 安装控制机依赖在Ansible控制机上安装Python 3.12和必要工具# 安装编译依赖 sudo dnf install -y git gcc openssl-devel bzip2-devel libffi-devel # 下载Python源码 wget https://www.python.org/ftp/python/3.12.0/Python-3.12.0.tgz tar xzf Python-3.12.0.tgz cd Python-3.12.0 # 编译安装注意用altinstall避免覆盖系统Python ./configure --enable-optimizations make -j$(nproc) sudo make altinstall # 验证安装 python3.12 --version pip3.12 --version3.2 获取并配置Kubespray# 克隆代码建议用release版本 git clone https://github.com/kubernetes-sigs/kubespray cd kubespray git checkout release-2.26 # 安装依赖 pip3.12 install -r requirements.txt # 复制示例配置 cp -rfp inventory/sample inventory/mycluster编辑主机清单文件inventory/mycluster/hosts.yaml示例配置all: hosts: master1: ansible_host: 192.168.1.101 ip: 192.168.1.101 master2: ansible_host: 192.168.1.102 ip: 192.168.1.102 worker1: ansible_host: 192.168.1.103 ip: 192.168.1.103 children: kube_control_plane: hosts: master1: master2: kube_node: hosts: worker1: etcd: hosts: master1: master2:3.3 关键配置调整有几个配置文件需要特别注意k8s-cluster.yml- 核心配置kube_version: v1.28.0 cluster_name: my-prod-cluster supplementary_addresses_in_ssl_keys: [192.168.1.100] # 负载均衡IPaddons.yml- 插件开关dashboard_enabled: true helm_enabled: true metrics_server_enabled: trueetcd.yml- 存储配置etcd_deployment_type: host etcd_data_dir: /var/lib/etcd # 建议单独挂载SSD盘4. 集群部署与验证4.1 执行部署命令# 先测试SSH连通性 ansible -i inventory/mycluster/hosts.yaml all -m ping # 正式部署建议用screen/tmux ansible-playbook -i inventory/mycluster/hosts.yaml \ --become --become-userroot \ cluster.yml如果遇到网络问题可以尝试使用国内镜像源修改roles/download/defaults/main.yml分步执行先跑facts.yml再跑cluster.yml4.2 验证集群状态部署完成后在任意master节点执行# 查看节点状态 kubectl get nodes -o wide # 检查核心组件 kubectl get pods -n kube-system # 测试DNS解析 kubectl run test --imagebusybox --restartNever --rm -it -- nslookup kubernetes.default5. 生产环境运维技巧5.1 安全加固建议RBAC配置# 在k8s-cluster.yml中启用 authorization_mode: [Node,RBAC]审计日志audit_log_enabled: true audit_log_path: /var/log/kubernetes/audit.log5.2 常见问题处理问题1证书过期错误# 续期所有证书 ansible-playbook -i inventory/mycluster/hosts.yaml \ --tags certs \ cluster.yml问题2节点NotReady# 查看kubelet日志 journalctl -u kubelet -f # 常见原因 # 1. 磁盘空间不足df -h # 2. 内存不足free -m # 3. 网络插件异常kubectl get ds -n kube-system记得定期备份etcd数据# 在etcd节点执行 ETCDCTL_API3 etcdctl \ --endpointshttps://127.0.0.1:2379 \ --cacert/etc/ssl/etcd/ssl/ca.pem \ --cert/etc/ssl/etcd/ssl/node.pem \ --key/etc/ssl/etcd/ssl/node-key.pem \ snapshot save snapshot.db