CentOS 7.9环境下的K8S 1.28集群部署全攻略

一、环境准备与系统要求

1.1 基础环境配置

在CentOS 7.9系统上部署K8S 1.28集群前,需确保系统满足以下条件:

  • 内核版本:建议升级至5.4+以支持K8S 1.28的新特性(如IPv6双栈、CSI改进等)。可通过uname -r查看当前内核版本,使用yum update kernel -y进行升级。
  • 时间同步:启用NTP服务(systemctl enable --now chronyd)确保节点间时间同步,避免证书验证失败。
  • 防火墙配置:开放K8S所需端口(如6443、10250等),或直接禁用防火墙(systemctl stop firewalld)简化测试环境配置。

1.2 依赖组件安装

K8S集群依赖Docker或Containerd作为容器运行时,推荐使用Containerd以获得更好的性能与兼容性:

  1. # 安装Containerd
  2. cat <<EOF | sudo tee /etc/yum.repos.d/docker-ce.repo
  3. [docker-ce-stable]
  4. name=Docker CE Stable
  5. baseurl=https://download.docker.com/linux/centos/7/\$basearch/stable
  6. enabled=1
  7. gpgcheck=1
  8. EOF
  9. yum install -y containerd.io
  10. systemctl enable --now containerd

二、K8S集群部署流程

2.1 使用kubeadm初始化集群

kubeadm是官方推荐的集群部署工具,支持高可用拓扑与自动化证书管理。以下是单主节点初始化步骤:

  1. # 安装kubeadm/kubelet/kubectl
  2. cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo
  3. [kubernetes]
  4. name=Kubernetes
  5. baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-\$basearch
  6. enabled=1
  7. gpgcheck=1
  8. EOF
  9. yum install -y kubelet kubeadm kubectl
  10. systemctl enable --now kubelet
  11. # 初始化主节点(忽略Swap警告)
  12. kubeadm init --pod-network-cidr=10.244.0.0/16 --ignore-preflight-errors=Swap

初始化完成后,需将~/.kube/config文件复制到其他节点以实现集群管理权限共享。

2.2 添加Worker节点

在Worker节点上执行kubeadm join命令(从初始化输出中获取):

  1. kubeadm join <master-ip>:6443 --token <token> \
  2. --discovery-token-ca-cert-hash sha256:<hash>

通过kubectl get nodes验证节点状态,确保所有节点显示Ready

2.3 网络插件部署

推荐使用Calico或Cilium作为CNI插件,以Calico为例:

  1. kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml

部署完成后,检查Pod网络状态:

  1. kubectl get pods -n kube-system | grep calico

三、集群优化与高可用配置

3.1 控制平面高可用

生产环境需部署3个主节点以实现控制平面冗余:

  1. 使用HAProxy或Keepalived实现API Server负载均衡。
  2. 通过kubeadm init生成配置文件模板,修改localAPIEndpoint为负载均衡IP。
  3. 在其他主节点上执行kubeadm join并指定--control-plane参数。

3.2 存储配置

集成CEPH作为持久化存储后端:

  1. 部署CEPH集群(参考行业常见技术方案文档)。
  2. 安装ceph-csi驱动:
    1. helm repo add ceph-csi https://ceph.github.io/csi-charts
    2. helm install ceph-csi ceph-csi/ceph-csi-rbd
  3. 创建StorageClass并测试PVC绑定:
    1. apiVersion: storage.k8s.io/v1
    2. kind: StorageClass
    3. metadata:
    4. name: ceph-block
    5. provisioner: rbd.csi.ceph.com
    6. parameters:
    7. clusterID: <ceph-cluster-id>
    8. pool: kube
    9. imageFormat: "2"
    10. imageFeatures: "layering"
    11. csi.storage.k8s.io/provisioner-secret-name: csi-rbd-secret
    12. csi.storage.k8s.io/provisioner-secret-namespace: default

四、监控与告警系统

4.1 Prometheus-Operator部署

通过Helm快速部署监控栈:

  1. helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
  2. helm install prometheus prometheus-community/kube-prometheus-stack

配置自定义告警规则(如NodeCPUUsage超过80%):

  1. groups:
  2. - name: node-alerts
  3. rules:
  4. - alert: HighCPUUsage
  5. expr: 100 - (avg by (instance) (irate(node_cpu_seconds_total{mode="idle"}[5m])) * 100) > 80
  6. for: 5m
  7. labels:
  8. severity: warning
  9. annotations:
  10. summary: "High CPU usage on {{ $labels.instance }}"

4.2 日志收集方案

集成EFK(Elasticsearch-Fluentd-Kibana)或Loki栈:

  1. 部署Fluentd DaemonSet捕获容器日志。
  2. 配置Elasticsearch索引模板以优化存储性能。
  3. 通过Grafana或Kibana可视化日志数据。

五、常见问题处理

5.1 证书过期问题

K8s默认证书有效期为1年,可通过以下命令续期:

  1. kubeadm certs renew all
  2. # 重启kubelet服务
  3. systemctl restart kubelet

5.2 节点NotReady状态

检查以下方面:

  • 网络插件Pod是否正常运行
  • kubelet日志(journalctl -u kubelet -f
  • CNI配置文件权限(如/etc/cni/net.d/

六、升级与维护

6.1 版本升级

使用kubeadm upgrade plan查看可升级版本,按顺序升级控制平面和Worker节点:

  1. # 控制平面升级
  2. kubeadm upgrade apply v1.28.x
  3. # Worker节点升级
  4. kubeadm upgrade node

6.2 备份策略

定期备份etcd数据:

  1. ETCDCTL_API=3 etcdctl snapshot save snapshot.db \
  2. --endpoints=https://127.0.0.1:2379 \
  3. --cacert=/etc/kubernetes/pki/etcd/ca.crt \
  4. --cert=/etc/kubernetes/pki/etcd/server.crt \
  5. --key=/etc/kubernetes/pki/etcd/server.key

通过以上步骤,读者可完成从环境准备到生产级集群部署的全流程。实际部署时需根据业务规模调整组件参数,并定期进行安全审计与性能调优。