一、环境准备与系统要求
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以获得更好的性能与兼容性:
# 安装Containerdcat <<EOF | sudo tee /etc/yum.repos.d/docker-ce.repo[docker-ce-stable]name=Docker CE Stablebaseurl=https://download.docker.com/linux/centos/7/\$basearch/stableenabled=1gpgcheck=1EOFyum install -y containerd.iosystemctl enable --now containerd
二、K8S集群部署流程
2.1 使用kubeadm初始化集群
kubeadm是官方推荐的集群部署工具,支持高可用拓扑与自动化证书管理。以下是单主节点初始化步骤:
# 安装kubeadm/kubelet/kubectlcat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo[kubernetes]name=Kubernetesbaseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-\$basearchenabled=1gpgcheck=1EOFyum install -y kubelet kubeadm kubectlsystemctl enable --now kubelet# 初始化主节点(忽略Swap警告)kubeadm init --pod-network-cidr=10.244.0.0/16 --ignore-preflight-errors=Swap
初始化完成后,需将~/.kube/config文件复制到其他节点以实现集群管理权限共享。
2.2 添加Worker节点
在Worker节点上执行kubeadm join命令(从初始化输出中获取):
kubeadm join <master-ip>:6443 --token <token> \--discovery-token-ca-cert-hash sha256:<hash>
通过kubectl get nodes验证节点状态,确保所有节点显示Ready。
2.3 网络插件部署
推荐使用Calico或Cilium作为CNI插件,以Calico为例:
kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml
部署完成后,检查Pod网络状态:
kubectl get pods -n kube-system | grep calico
三、集群优化与高可用配置
3.1 控制平面高可用
生产环境需部署3个主节点以实现控制平面冗余:
- 使用HAProxy或Keepalived实现API Server负载均衡。
- 通过
kubeadm init生成配置文件模板,修改localAPIEndpoint为负载均衡IP。 - 在其他主节点上执行
kubeadm join并指定--control-plane参数。
3.2 存储配置
集成CEPH作为持久化存储后端:
- 部署CEPH集群(参考行业常见技术方案文档)。
- 安装ceph-csi驱动:
helm repo add ceph-csi https://ceph.github.io/csi-chartshelm install ceph-csi ceph-csi/ceph-csi-rbd
- 创建StorageClass并测试PVC绑定:
apiVersion: storage.k8s.io/v1kind: StorageClassmetadata:name: ceph-blockprovisioner: rbd.csi.ceph.comparameters:clusterID: <ceph-cluster-id>pool: kubeimageFormat: "2"imageFeatures: "layering"csi.storage.k8s.io/provisioner-secret-name: csi-rbd-secretcsi.storage.k8s.io/provisioner-secret-namespace: default
四、监控与告警系统
4.1 Prometheus-Operator部署
通过Helm快速部署监控栈:
helm repo add prometheus-community https://prometheus-community.github.io/helm-chartshelm install prometheus prometheus-community/kube-prometheus-stack
配置自定义告警规则(如NodeCPUUsage超过80%):
groups:- name: node-alertsrules:- alert: HighCPUUsageexpr: 100 - (avg by (instance) (irate(node_cpu_seconds_total{mode="idle"}[5m])) * 100) > 80for: 5mlabels:severity: warningannotations:summary: "High CPU usage on {{ $labels.instance }}"
4.2 日志收集方案
集成EFK(Elasticsearch-Fluentd-Kibana)或Loki栈:
- 部署Fluentd DaemonSet捕获容器日志。
- 配置Elasticsearch索引模板以优化存储性能。
- 通过Grafana或Kibana可视化日志数据。
五、常见问题处理
5.1 证书过期问题
K8s默认证书有效期为1年,可通过以下命令续期:
kubeadm certs renew all# 重启kubelet服务systemctl restart kubelet
5.2 节点NotReady状态
检查以下方面:
- 网络插件Pod是否正常运行
- kubelet日志(
journalctl -u kubelet -f) - CNI配置文件权限(如
/etc/cni/net.d/)
六、升级与维护
6.1 版本升级
使用kubeadm upgrade plan查看可升级版本,按顺序升级控制平面和Worker节点:
# 控制平面升级kubeadm upgrade apply v1.28.x# Worker节点升级kubeadm upgrade node
6.2 备份策略
定期备份etcd数据:
ETCDCTL_API=3 etcdctl snapshot save snapshot.db \--endpoints=https://127.0.0.1:2379 \--cacert=/etc/kubernetes/pki/etcd/ca.crt \--cert=/etc/kubernetes/pki/etcd/server.crt \--key=/etc/kubernetes/pki/etcd/server.key
通过以上步骤,读者可完成从环境准备到生产级集群部署的全流程。实际部署时需根据业务规模调整组件参数,并定期进行安全审计与性能调优。