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

云服务器实战:从零搭建高可用Kubernetes集群

1. 为什么需要高可用Kubernetes集群?

在云服务器上搭建Kubernetes集群已经成为现代应用部署的标准方式。但单节点的Kubernetes集群存在明显的单点故障风险——一旦master节点宕机,整个集群就会瘫痪。我在实际项目中就遇到过因为服务器硬件故障导致业务中断的情况,那次事故让我们团队深刻认识到高可用架构的重要性。

高可用Kubernetes集群通过多master节点设计,即使某个节点故障,其他节点也能立即接管工作。这就像飞机的冗余引擎设计,单个引擎失效不会导致坠机。根据CNCF的统计,生产环境中超过78%的Kubernetes集群采用了高可用部署方案。

2. 环境准备与规划

2.1 服务器资源配置建议

在阿里云或腾讯云上,我建议选择以下配置(以3master+2worker架构为例):

节点类型数量推荐配置系统盘数据盘
Master34核8G100GB100GB
Worker2+8核16G100GB200GB

实测发现,master节点主要消耗CPU资源处理控制平面请求,而worker节点需要更多内存运行业务容器。记得选择同地域的服务器保证内网互通,我在早期项目中就因为跨可用区部署导致网络延迟问题。

2.2 系统初始化配置

所有节点都需要执行以下基础配置(以CentOS 7为例):

# 关闭防火墙 systemctl stop firewalld && systemctl disable firewalld # 关闭SELinux sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config setenforce 0 # 关闭swap swapoff -a sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab # 配置内核参数 cat > /etc/sysctl.d/k8s.conf <<EOF net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 net.ipv4.ip_forward = 1 EOF sysctl --system

特别注意:修改完SELinux配置后必须重启服务器才能生效,这个坑我踩过多次。

3. 容器运行时与Kubernetes组件安装

3.1 容器运行时选择与配置

目前主流选择是containerd,相比Docker更加轻量:

# 安装containerd yum install -y containerd.io mkdir -p /etc/containerd containerd config default > /etc/containerd/config.toml # 修改配置使用systemd cgroup驱动 sed -i 's/SystemdCgroup = false/SystemdCgroup = true/g' /etc/containerd/config.toml # 重启服务 systemctl restart containerd && systemctl enable containerd

3.2 Kubernetes组件安装

所有节点都需要安装kubeadm、kubelet和kubectl:

# 添加阿里云镜像源 cat > /etc/yum.repos.d/kubernetes.repo <<EOF [kubernetes] name=Kubernetes baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64 enabled=1 gpgcheck=0 repo_gpgcheck=0 EOF # 安装指定版本(建议1.28+) yum install -y kubelet-1.28.0 kubeadm-1.28.0 kubectl-1.28.0 systemctl enable kubelet

注意:kubelet服务此时会处于异常状态,这是正常的,初始化集群后会自动恢复。

4. 高可用集群初始化

4.1 第一个Master节点初始化

在首个master节点执行(关键参数需要根据实际环境调整):

kubeadm init \ --control-plane-endpoint "k8s-api.example.com:6443" \ --upload-certs \ --image-repository registry.aliyuncs.com/google_containers \ --kubernetes-version v1.28.0 \ --service-cidr=10.96.0.0/12 \ --pod-network-cidr=10.244.0.0/16 \ --apiserver-advertise-address=192.168.0.100

这里有几个关键点:

  1. control-plane-endpoint应该指向负载均衡器的VIP
  2. upload-certs会自动生成并上传证书供其他master节点使用
  3. 阿里云镜像仓库能解决国内拉取镜像慢的问题

初始化成功后,按照提示配置kubectl:

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

4.2 加入其他Master节点

使用初始化时输出的join命令,其他master节点需要添加--control-plane参数:

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

我建议在云平台上配置一个内网负载均衡器,将6443端口流量分发到所有master节点。腾讯云的CLB和阿里云的SLB都支持这种场景。

5. 网络插件与Worker节点加入

5.1 安装Calico网络插件

高可用集群推荐使用Calico:

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

安装后检查节点状态应该全部变为Ready:

kubectl get nodes -o wide

5.2 Worker节点加入集群

使用常规join命令加入worker节点:

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

如果token过期(默认24小时),可以在master节点重新生成:

kubeadm token create --print-join-command

6. 生产环境优化建议

6.1 证书自动续期配置

Kubernetes证书默认1年有效期,配置自动续期:

# 修改kubeadm配置 kubectl edit cm kubeadm-config -n kube-system # 添加如下配置 apiServer: certSANs: - "k8s-api.example.com" - "192.168.0.100" extraArgs: feature-gates: "RotateKubeletServerCertificate=true"

6.2 节点维护与隔离

安全下线节点前需要先驱逐Pod:

kubectl drain <node-name> --ignore-daemonsets --delete-emptydir-data

维护完成后重新标记为可调度:

kubectl uncordon <node-name>

7. 常见问题排查

7.1 节点NotReady状态处理

首先检查kubelet日志:

journalctl -u kubelet -f

常见原因包括:

  1. 网络插件未正确安装
  2. 节点资源不足
  3. 证书过期

7.2 Pod网络异常排查

使用calicoctl工具检查网络策略:

kubectl exec -ti <calico-pod> -n kube-system -- calicoctl get workloadendpoints

我在实际运维中发现,大部分网络问题都与NetworkPolicy配置或节点防火墙规则有关。

http://www.jsqmd.com/news/643351/

相关文章:

  • 工业现场总线 (PROFINET/Modbus) 工控主板怎么选?协议适配与通信稳定性详解
  • FPC粘尘机易卡料问题解决:核心原因与技术方案讲解
  • 【开源实战】LMCache如何用KV缓存“驯服”大模型推理的显存猛兽?
  • The Agency:GitHub 上最全的 AI Agent 专家团队!50+ 角色任你召唤,专治 AI “太水了“
  • TSmaster 曲线窗口(Graphic)高级操作指南
  • 解密Android Treble:为什么HIDL是厂商升级系统的救星?
  • C++异常处理三要素详解
  • YOLOv8与Qwen3-14B-Int4-AWQ联动:构建智能图像描述与问答系统
  • Silvaco TCAD仿真进阶:核心命令与可视化分析实战
  • 4月15日成都地区包钢产无缝钢管(8163-20#;外径42-630mm)现货报价 - 四川盛世钢联营销中心
  • Tetgen从入门到精通:网格剖分实战与文件格式解析
  • 从理论到实践:深入剖析LightGaussian如何实现3DGS的极致压缩与加速
  • 2026年杀虫气雾剂公司推荐及选购参考 - 品牌策略师
  • 2026大桶水设备厂家推荐青州福润水处理设备有限公司领衔,产能与专利双优 - 爱采购寻源宝典
  • 欧几里德与非欧几里德结构数据:从图像到图神经网络的统一视角
  • 从课堂提问到芯片设计:用Verilog手把手教你实现一个带权重的公平仲裁器
  • 2026净化板厂家推荐排行榜产能规模与专利技术双维度权威解析 - 爱采购寻源宝典
  • 2026自来水管厂家推荐排行榜产能与专利双维度权威解析 - 爱采购寻源宝典
  • 嵌入式设备部署MogFace-large轻量版:从模型压缩到板载推理
  • UK Biobank RAP 终极指南:如何免费快速完成生物信息分析
  • ReactNative跨平台鸿蒙开发环境搭建实战指南 - 直播课件与素材分享
  • 无需花里胡哨,近80种改进策略,仅需一行可改进任意优化算法!
  • Unity URP中采样器超限问题深度解析:从报错到解决方案
  • 软件定义显示技术:Windows虚拟显示器驱动架构与应用指南
  • Neeshck-Z-lmage_LYX_v2实战教程:提示词引导强度(1.0-7.0)效果对照表
  • 2026气动快装蝶阀厂家推荐排行榜产能、专利、质量三维度权威解析 - 爱采购寻源宝典
  • 2026岩棉夹芯板厂家推荐 重庆汉永产能领先+专利加持+服务全面 - 爱采购寻源宝典
  • 从零到一:在Rocky Linux 9.6上源码编译部署MySQL 8.0全记录
  • 2026矿用信号电缆厂家推荐排行榜产能与专利双维度权威解析 - 爱采购寻源宝典
  • YOLOv8涨点新思路:实测SimAM注意力机制在不同检测任务中的效果对比