企业级Kubernetes 1.23.5离线集群部署实战指南在数字化转型浪潮中容器编排技术已成为现代IT基础设施的核心支柱。对于金融、军工、医疗等对数据安全有严格要求的行业或是边缘计算、工业物联网等网络条件受限的场景离线环境下的Kubernetes集群部署能力已成为技术团队的必备技能。本文将基于kubeadm工具详细拆解在CentOS 7系统上构建Kubernetes 1.23.5集群的全流程提供从环境准备到故障排查的完整解决方案。1. 环境规划与前置检查1.1 硬件与操作系统要求部署生产级Kubernetes集群需要严谨的资源规划。以下是经过实际验证的配置建议节点类型CPU核心数内存容量磁盘空间网络带宽Master节点4核8GB100GB1GbpsWorker节点8核16GB200GB1Gbps关键验证步骤确认所有节点已禁用Swapswapoff -a sed -i / swap / s/^\(.*\)$/#\1/g /etc/fstab检查SELinux状态应为permissive模式setenforce 0 sed -i s/^SELINUXenforcing$/SELINUXpermissive/ /etc/selinux/config确保防火墙规则放行必要端口6443、2379-2380等1.2 离线资源包准备完整的离线部署包应包含以下组件Docker 23.0.1 RPM包及其依赖Kubernetes 1.23.5组件kubeadm/kubelet/kubectl核心容器镜像pause、coredns等网络插件Calico/Flannel资源预置配置脚本集提示建议使用sha256sum校验所有下载文件的完整性避免因文件损坏导致部署失败。2. 基础环境配置2.1 系统参数调优编辑/etc/sysctl.d/k8s.conf文件添加以下内核参数net.bridge.bridge-nf-call-ip6tables 1 net.bridge.bridge-nf-call-iptables 1 net.ipv4.ip_forward 1 vm.swappiness 0加载配置并验证sysctl --system sysctl net.bridge.bridge-nf-call-iptables2.2 Docker离线安装解压离线包后使用RPM直接安装rpm -ivh docker-ce-23.0.1-1.el7.x86_64.rpm \ docker-ce-cli-23.0.1-1.el7.x86_64.rpm \ containerd.io-1.6.20-3.1.el7.x86_64.rpm配置Docker守护进程{ exec-opts: [native.cgroupdriversystemd], log-driver: json-file, log-opts: { max-size: 100m }, storage-driver: overlay2 }3. Kubernetes组件部署3.1 Master节点初始化首先安装kubeadm、kubelet和kubectlrpm -ivh kubelet-1.23.5-0.x86_64.rpm \ kubectl-1.23.5-0.x86_64.rpm \ kubeadm-1.23.5-0.x86_64.rpm使用预配置的kubeadm-config.yaml初始化集群apiVersion: kubeadm.k8s.io/v1beta3 kind: ClusterConfiguration kubernetesVersion: 1.23.5 controlPlaneEndpoint: MASTER_IP:6443 networking: podSubnet: 192.168.0.0/16执行初始化命令kubeadm init --configkubeadm-config.yaml \ --upload-certs \ --ignore-preflight-errorsSwap3.2 Worker节点加入集群在Master节点获取加入命令kubeadm token create --print-join-command在Worker节点执行生成的join命令格式类似kubeadm join 10.0.0.100:6443 --token abcdef.1234567890 \ --discovery-token-ca-cert-hash sha256:xxxxxx4. 网络插件与附加组件4.1 Calico网络部署解压离线包中的Calico资源tar -zxvf calico-v3.24.1.tar.gz kubectl apply -f calico/tigera-operator.yaml kubectl apply -f calico/custom-resources.yaml验证网络状态kubectl get pods -n calico-system kubectl get nodes -o wide4.2 核心服务验证创建测试Pod验证集群功能apiVersion: v1 kind: Pod metadata: name: nginx-test spec: containers: - name: nginx image: nginx:1.25 ports: - containerPort: 80检查服务状态kubectl get pod nginx-test -o wide kubectl exec -it nginx-test -- curl localhost5. 常见问题排查指南5.1 节点NotReady状态处理检查kubelet日志journalctl -u kubelet -f常见修复步骤确认网络插件已正确安装检查CNI配置文件是否存在ls /etc/cni/net.d/重启kubelet服务systemctl restart kubelet5.2 镜像拉取失败解决方案对于离线环境需要预先加载所有必需镜像docker load -i k8s-images-1.23.5.tar.gz验证镜像列表kubeadm config images list --kubernetes-version1.23.56. 生产环境优化建议6.1 高可用架构设计对于关键业务系统建议采用多Master架构使用3个或5个控制平面节点部署负载均衡器如HAProxy代理API Server配置etcd集群实现数据冗余6.2 安全加固措施基础安全配置包括启用RBAC权限控制配置Pod安全策略定期轮换证书启用审计日志实施网络隔离apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: default-deny spec: podSelector: {} policyTypes: - Ingress - Egress在实际部署过程中我们发现配置文件的IP地址修改是最容易出错的环节。建议使用自动化工具批量替换或编写预检查脚本验证配置有效性。对于大规模部署可以考虑使用Ansible等配置管理工具实现集群的标准化安装。