Kubernetes 1.36集群部署全攻略:从初始化到稳定运行

作者:rousong2026.07.04 04:15浏览量:9

简介:本文详细拆解Kubernetes 1.36集群部署全流程,涵盖环境初始化、组件配置、网络规划及运维要点。通过标准化操作步骤与风险控制策略,帮助开发者与运维人员快速构建高可用容器编排平台,适用于生产环境、测试环境及混合云场景。

一、部署目标与适用场景

本文旨在指导读者在私有环境或云服务器上部署一套Kubernetes 1.36集群,采用1个控制平面节点(Master)与2个工作节点(Worker)的经典架构。部署完成后,集群将具备容器编排、服务发现、负载均衡等核心能力,支持生产环境的高可用运行。

适用人群:

  • 容器化应用开发者
  • 云原生架构师
  • 企业运维团队
  • DevOps工程师

核心收益:

  • 掌握Kubernetes集群标准化部署流程
  • 理解关键组件配置逻辑与依赖关系
  • 具备生产环境集群运维与故障排查能力

二、部署架构与组件说明

2.1 集群拓扑设计

节点类型 数量 IP地址段 核心组件
控制平面 1 10.0.0.21 kube-apiserver, etcd, controller-manager, scheduler
工作节点 2 10.0.0.22-23 kubelet, kube-proxy, container runtime

2.2 关键组件说明

  • kube-apiserver:集群API入口,处理所有REST请求
  • etcd:分布式键值存储,保存集群状态数据
  • controller-manager:运行控制器进程,维护集群状态
  • scheduler:负责工作负载调度
  • kubelet:节点代理,执行容器生命周期管理
  • kube-proxy:实现服务网络与负载均衡

三、环境初始化配置

3.1 基础环境要求

  • 操作系统:RockyLinux 9.5(或其他兼容Linux发行版)
  • 硬件配置:
    • Master节点:2核4G内存
    • Worker节点:2核2G内存
  • 网络要求:
    • 节点间内网互通
    • 开放端口:6443(API), 2379-2380(etcd), 10250(kubelet)

3.2 系统级配置(所有节点)

3.2.1 关闭安全防护机制

  1. # 禁用防火墙并停止服务
  2. systemctl disable --now firewalld
  3. # 永久关闭SELinux(需重启生效)
  4. sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config
  5. # 临时生效命令
  6. setenforce 0

3.2.2 主机名与域名解析

  1. # 设置主机名(各节点分别执行)
  2. hostnamectl set-hostname k8s-master # 控制节点
  3. hostnamectl set-hostname k8s-node1 # 工作节点1
  4. hostnamectl set-hostname k8s-node2 # 工作节点2
  5. # 配置hosts文件
  6. cat >> /etc/hosts <<EOF
  7. 10.0.0.21 k8s-master
  8. 10.0.0.22 k8s-node1
  9. 10.0.0.23 k8s-node2
  10. EOF

3.2.3 时间同步服务

  1. # 安装chrony时间同步工具
  2. yum install -y chrony
  3. # 配置时间服务器(可根据实际需求修改)
  4. cat > /etc/chrony.conf <<EOF
  5. server ntp.aliyun.com iburst
  6. allow 10.0.0.0/24
  7. EOF
  8. # 启动服务并设置开机自启
  9. systemctl enable --now chronyd

四、核心组件部署流程

4.1 容器运行时安装(以containerd为例)

  1. # 安装依赖包
  2. yum install -y device-mapper-persistent-data lvm2
  3. # 添加容器镜像仓库(示例为通用配置)
  4. cat > /etc/yum.repos.d/containerd.repo <<EOF
  5. [containerd]
  6. name=Containerd Repo
  7. baseurl=https://download.containerd.io/rpm/latest/centos/9/x86_64
  8. enabled=1
  9. gpgcheck=0
  10. EOF
  11. # 安装containerd
  12. yum install -y containerd
  13. # 生成默认配置文件
  14. mkdir -p /etc/containerd
  15. containerd config default > /etc/containerd/config.toml
  16. # 修改Cgroup驱动为systemd(与kubelet保持一致)
  17. sed -i 's/SystemdCgroup = false/SystemdCgroup = true/' /etc/containerd/config.toml
  18. # 启动服务
  19. systemctl enable --now containerd

4.2 Kubernetes组件安装

4.2.1 添加仓库与安装包

  1. # 配置Kubernetes仓库
  2. cat > /etc/yum.repos.d/kubernetes.repo <<EOF
  3. [kubernetes]
  4. name=Kubernetes
  5. baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64
  6. enabled=1
  7. gpgcheck=0
  8. EOF
  9. # 安装核心组件(所有节点)
  10. yum install -y kubelet-1.36.0 kubeadm-1.36.0 kubectl-1.36.0
  11. # 设置kubelet开机自启(暂不启动)
  12. systemctl enable kubelet

4.2.2 集群初始化(Master节点)

  1. # 初始化控制平面(根据实际网络修改pod-network-cidr)
  2. kubeadm init \
  3. --apiserver-advertise-address=10.0.0.21 \
  4. --pod-network-cidr=10.244.0.0/16 \
  5. --kubernetes-version v1.36.0
  6. # 配置kubectl认证信息
  7. mkdir -p $HOME/.kube
  8. cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
  9. chown $(id -u):$(id -g) $HOME/.kube/config

4.2.3 工作节点加入集群

  1. # 在Master节点获取加入命令
  2. kubeadm token create --print-join-command
  3. # 在Worker节点执行返回的命令,示例:
  4. kubeadm join 10.0.0.21:6443 \
  5. --token abcdef.1234567890abcdef \
  6. --discovery-token-ca-cert-hash sha256:xxxxxx

4.3 网络插件部署(Calico示例)

  1. # 下载Calico配置文件
  2. curl https://docs.projectcalico.org/manifests/calico.yaml -O
  3. # 修改配置中的CIDR(需与kubeadm init时一致)
  4. sed -i 's/192.168.0.0/10.244.0.0/g' calico.yaml
  5. # 应用配置
  6. kubectl apply -f calico.yaml

五、部署验证与健康检查

5.1 基础状态检查

  1. # 查看节点状态
  2. kubectl get nodes
  3. # 预期输出:
  4. # NAME STATUS ROLES AGE VERSION
  5. # k8s-master Ready control-plane 5m v1.36.0
  6. # k8s-node1 Ready <none> 3m v1.36.0
  7. # k8s-node2 Ready <none> 3m v1.36.0
  8. # 检查核心组件状态
  9. kubectl get pods -n kube-system

5.2 业务容器验证

  1. # 创建测试Nginx部署
  2. kubectl create deployment nginx --image=nginx:alpine
  3. # 暴露服务
  4. kubectl expose deployment nginx --port=80 --type=NodePort
  5. # 获取访问端口
  6. kubectl get svc nginx -o jsonpath='{.spec.ports[0].nodePort}'
  7. # 通过任意节点IP+端口访问测试
  8. curl http://10.0.0.22:<NodePort>

六、运维优化与风险控制

6.1 关键运维操作

  • 集群升级:通过kubeadm upgrade plan制定升级方案
  • 节点维护:使用kubectl drain安全迁移工作负载
  • 证书管理:定期检查/etc/kubernetes/pki目录证书有效期

6.2 常见问题处理

现象 可能原因 解决方案
NodeStatusUnknown 网络分区 检查节点间网络连通性
ImagePullBackOff 镜像仓库访问失败 配置镜像加速器或检查网络策略
CrashLoopBackOff 容器启动失败 查看kubectl logs获取详细错误
Pending状态Pod 资源不足 调整节点资源或增加Worker节点

6.3 安全加固建议

  1. 启用RBAC权限控制
  2. 定期轮换kubeadm证书
  3. 限制API Server访问来源IP
  4. 启用Pod安全策略(PSP)或OPA Gatekeeper

七、总结与扩展建议

本文通过标准化流程完成了Kubernetes 1.36集群部署,核心步骤包括:

  1. 环境初始化与安全配置
  2. 容器运行时安装与配置
  3. 控制平面与工作节点部署
  4. 网络插件集成
  5. 部署验证与健康检查

后续优化方向:

  • 集成日志收集系统(如EFK栈)
  • 部署监控解决方案(Prometheus+Grafana)
  • 实现自动化备份与恢复机制
  • 配置HPA实现弹性伸缩

通过持续监控集群资源使用率(CPU/内存/磁盘)和网络流量,结合定期的渗透测试与安全审计,可构建满足生产环境要求的容器编排平台。