news 2026/7/26 2:52:21

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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工具管理节点配置,可以大大减少人为操作失误。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/26 2:51:27

Windows 10下OpenClaw与DeepSeek API集成配置指南

1. 项目概述与环境准备OpenClaw作为一款新兴的开源自动化工具&#xff0c;在数据处理和API集成领域越来越受开发者青睐。最近我在一个数据采集项目中需要将OpenClaw与DeepSeek的搜索接口进行对接&#xff0c;整个过程踩了不少坑&#xff0c;也积累了一些实用经验。本文将详细介…

作者头像 李华
网站建设 2026/7/26 2:46:37

大语言模型在自动程序修复中的实践与评估

1. 大语言模型在自动程序修复中的实证评估概述最近两年&#xff0c;大语言模型&#xff08;LLM&#xff09;在代码生成和程序理解任务中展现出惊人潜力。作为一名长期关注AI辅助开发的技术从业者&#xff0c;我系统测试了GPT-4、Claude 3和DeepSeek-R1等主流模型在自动程序修复…

作者头像 李华
网站建设 2026/7/26 2:44:29

基于LangGraph与DeepSeek构建AI Agent的实战指南

1. 项目概述&#xff1a;AI Agent开发的新范式在AI技术快速迭代的今天&#xff0c;构建能够自主决策、执行复杂任务的AI Agent已成为开发者关注的焦点。不同于传统的单次问答式AI交互&#xff0c;AI Agent具备持续记忆、任务分解和工具调用的能力&#xff0c;可以像人类助手一样…

作者头像 李华
网站建设 2026/7/26 2:43:17

Linux /dev目录误删事故处理与设备文件恢复指南

1. 事故现场还原与应急处理那天下午机房监控突然狂响警报&#xff0c;一台运行着CentOS 7.9的生产服务器突然失去响应。通过带外管理控制台连上去一看&#xff0c;熟悉的命令行提示符变成了刺眼的"bash: /bin/ls: No such file or directory"。心里咯噔一下&#xff…

作者头像 李华
网站建设 2026/7/26 2:42:30

大模型技术栈实战:从Transformers到智能客服系统部署指南

最近在技术圈里&#xff0c;大模型领域的竞争态势愈发激烈&#xff0c;从开源社区的快速迭代到各大厂商的密集发布&#xff0c;整个行业仿佛进入了一个新的阶段。对于开发者而言&#xff0c;无论是想快速上手应用&#xff0c;还是深入参与模型调优&#xff0c;现在正是系统学习…

作者头像 李华
网站建设 2026/7/26 2:41:44

Python技术文档解析实战:信息提取与话题聚类完整指南

1. 技术交流文档的深度解析与信息提取实战在日常技术团队协作中&#xff0c;我们经常需要处理会议纪要、技术交流实录等非结构化文档。这些文档往往包含大量有价值的技术讨论、问题解决方案和架构思路&#xff0c;但信息分散、重点不突出。本文将以一份典型的技术交流会实录为例…

作者头像 李华