当前位置: 首页 > news >正文

Kubernetes高可用集群部署实战与优化指南

1. Kubernetes集群搭建实战复盘

上周终于把生产环境的K8s集群部署上线了,整个过程踩了不少坑,也积累了一些实战经验。这次部署的是v1.25版本的Kubernetes,采用3个master节点+5个worker节点的高可用架构,网络插件选的Calico,存储方案用的Ceph RBD。下面就把这次部署的核心流程和关键注意事项做个完整记录。

重要提示:生产环境部署前务必做好备份方案,我在第一次部署时就因为ETCD配置错误导致需要全部重装

1.1 基础环境准备

所有节点统一使用Ubuntu 22.04 LTS系统,内核升级到5.15版本。硬件配置方面:

  • Master节点:8核CPU/32GB内存/200GB SSD(需要运行ETCD)
  • Worker节点:16核CPU/64GB内存/500GB SSD(运行业务容器)

先在所有节点执行基础环境配置:

# 关闭swap sudo swapoff -a sudo sed -i '/ swap / s/^/#/' /etc/fstab # 设置内核参数 cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 EOF sudo sysctl --system

1.2 关键组件安装

使用官方推荐的kubeadm工具进行安装,版本锁定为1.25.6:

# 安装docker(containerd也可) sudo apt-get install -y docker.io sudo systemctl enable docker # 安装kubeadm/kubelet/kubectl sudo apt-get install -y apt-transport-https ca-certificates curl curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.25/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg echo 'deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.25/deb/ /' | sudo tee /etc/apt/sources.list.d/kubernetes.list sudo apt-get update sudo apt-get install -y kubelet=1.25.6-1.1 kubeadm=1.25.6-1.1 kubectl=1.25.6-1.1 sudo apt-mark hold kubelet kubeadm kubectl

2. 集群初始化与高可用配置

2.1 首个Master节点初始化

创建kubeadm配置文件kubeadm-config.yaml:

apiVersion: kubeadm.k8s.io/v1beta3 kind: InitConfiguration localAPIEndpoint: advertiseAddress: "192.168.1.101" bindPort: 6443 --- apiVersion: kubeadm.k8s.io/v1beta3 kind: ClusterConfiguration kubernetesVersion: v1.25.6 controlPlaneEndpoint: "k8s-api.example.com:6443" networking: podSubnet: "10.244.0.0/16" serviceSubnet: "10.96.0.0/12" apiServer: certSANs: - "k8s-api.example.com" - "192.168.1.101" - "192.168.1.102" - "192.168.1.103" --- apiVersion: kubelet.config.k8s.io/v1beta1 kind: KubeletConfiguration cgroupDriver: systemd

执行初始化:

sudo kubeadm init --config=kubeadm-config.yaml --upload-certs

初始化完成后会输出加入集群的命令,务必保存好这些命令。配置kubectl:

mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config

2.2 安装网络插件

选择Calico作为CNI插件:

kubectl create -f https://raw.githubusercontent.com/projectcalico/calico/v3.25.0/manifests/tigera-operator.yaml kubectl create -f https://raw.githubusercontent.com/projectcalico/calico/v3.25.0/manifests/custom-resources.yaml

验证网络状态:

watch kubectl get pods -n calico-system

2.3 加入其他Master节点

使用初始化时生成的命令在其他两个Master节点执行:

sudo kubeadm join k8s-api.example.com:6443 --token xxxx \ --discovery-token-ca-cert-hash sha256:xxxx \ --control-plane --certificate-key xxxx

验证高可用:

kubectl get nodes kubectl -n kube-system get pods

3. Worker节点加入与配置

3.1 节点加入集群

在每个Worker节点执行初始化时生成的join命令:

sudo kubeadm join k8s-api.example.com:6443 --token xxxx \ --discovery-token-ca-cert-hash sha256:xxxx

3.2 节点标签与污点设置

根据业务需求设置节点标签:

kubectl label nodes node1 disktype=ssd kubectl label nodes node2 gpu=true

对于特殊节点设置污点:

kubectl taint nodes node3 dedicated=special:NoSchedule

4. 存储与网络高级配置

4.1 Ceph RBD存储配置

先在所有节点安装ceph-common:

sudo apt-get install -y ceph-common

创建StorageClass:

apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: ceph-rbd provisioner: kubernetes.io/rbd parameters: monitors: 10.0.0.1:6789,10.0.0.2:6789,10.0.0.3:6789 adminId: admin adminSecretName: ceph-secret adminSecretNamespace: kube-system pool: kube userId: kube userSecretName: ceph-secret-user fsType: ext4 imageFormat: "2" imageFeatures: layering

4.2 网络策略配置

示例网络策略限制命名空间间通信:

apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: default-deny-all namespace: production spec: podSelector: {} policyTypes: - Ingress - Egress

5. 监控与日志方案

5.1 Prometheus监控部署

使用kube-prometheus-stack:

helm repo add prometheus-community https://prometheus-community.github.io/helm-charts helm install kube-prometheus-stack prometheus-community/kube-prometheus-stack \ --namespace monitoring \ --create-namespace \ --values values.yaml

5.2 EFK日志收集

部署Elasticsearch+Fluentd+Kibana:

helm install elasticsearch elastic/elasticsearch --namespace logging helm install fluentd fluent/fluentd --namespace logging helm install kibana elastic/kibana --namespace logging

6. 常见问题排查记录

6.1 节点NotReady问题

可能原因及解决方案:

  1. 网络插件未正常运行 → 检查Calico Pod状态
  2. kubelet服务异常 →journalctl -u kubelet查看日志
  3. 节点资源不足 → 检查内存/磁盘空间

6.2 Pod一直Pending

排查步骤:

kubectl describe pod <pod-name> kubectl get events --sort-by='.metadata.creationTimestamp'

常见原因:

  • 资源不足
  • 不满足节点选择器/亲和性规则
  • PV/PVC问题

6.3 网络连通性问题

诊断工具:

# 检查DNS解析 kubectl run -it --rm --image=busybox:1.28 test -- nslookup kubernetes.default # 检查服务连通性 kubectl run -it --rm --image=nicolaka/netshoot test -- curl http://service-name

7. 生产环境优化建议

7.1 关键参数调优

kubelet配置优化:

apiVersion: kubelet.config.k8s.io/v1beta1 kind: KubeletConfiguration maxPods: 150 kubeReserved: cpu: "1" memory: 2Gi systemReserved: cpu: "1" memory: 2Gi evictionHard: memory.available: "500Mi" nodefs.available: "10%"

7.2 安全加固措施

  1. 启用Pod安全准入控制
  2. 定期轮换证书
  3. 限制Dashboard访问
  4. 启用审计日志
# 检查安全配置 kubectl get --raw=/metrics | grep apiserver_audit

这次部署最大的教训是一定要先在测试环境充分验证所有配置,特别是ETCD和网络插件的参数设置。我们因为Calico的IP池配置错误导致第一次部署后全部重来,耽误了整整一天时间。另外建议使用Terraform等IaC工具管理节点配置,可以大大减少人为操作失误。

http://www.cnnetsun.cn/news/3651688.html

相关文章:

  • Windows 10下OpenClaw与DeepSeek API集成配置指南
  • 大语言模型在自动程序修复中的实践与评估
  • 基于LangGraph与DeepSeek构建AI Agent的实战指南
  • Linux /dev目录误删事故处理与设备文件恢复指南
  • 大模型技术栈实战:从Transformers到智能客服系统部署指南
  • Python技术文档解析实战:信息提取与话题聚类完整指南
  • 专科毕业论文AI写作工具全攻略:9款神器助你高效完成
  • 智能论文写作工具:从选题到框架的全流程解决方案
  • 企业级AI智能体架构设计与工业应用实践
  • TI MibSPI DMA配置详解:从寄存器解析到实战调试
  • 多智能体协作系统:三层架构设计与工程实践
  • 如何用Python一键导出QQ空间全部历史说说:GetQzonehistory完整指南
  • CLIP双编码器架构与对比学习技术详解
  • 微信小程序打造智能宝宝成长相册:技术实现与设计解析
  • Python Pygame俄罗斯方块开发:从零实现游戏逻辑与图形界面
  • Linux线程同步互斥机制详解与应用实践
  • TI毫米波雷达SoC系统集成:从总线架构到EDMA与ESM的工程实践
  • MCAN模块与CAN FD技术:从经典到高速的演进与实战配置
  • CC35xx SYSTIM高精度定时器:从比较/捕获模式到实战配置详解
  • 深入解析CRC控制器:硬件加速、DMA协同与嵌入式数据完整性保障
  • AlphaGBM:基于GBDT的智能期权分析平台解析
  • RAG智能问答系统:架构设计与优化实践
  • TI CC115L Sub-1GHz射频发射芯片:从架构解析到低功耗无线传感实战
  • AI驱动企业增长:精准获客与智能运营实践
  • 全球EMBA优势解读,企业高管择校选择指南
  • TI McASP寄存器深度解析:从I2S协议到多通道音频系统实战
  • 真诚赞美话术 —— 鸿蒙AI智能助手开发全流程解析
  • FCA-RL框架:共享出行动态调度的强化学习实践
  • YOLOv8与DeepSeek结合的遥感目标检测优化实践
  • NoFences:完全免费的Windows桌面分区神器,终极解决桌面混乱问题