Kubernetes kubeadm 高可用集群部署方案详解

Kubernetes kubeadm 高可用集群部署方案详解

kubeadm Aggregator for issues filed against kubeadm kubeadm 项目地址: https://gitcode.com/gh_mirrors/ku/kubeadm

前言

在生产环境中部署 Kubernetes 集群时,高可用性(High Availability, HA)是一个基本要求。kubeadm 作为 Kubernetes 官方推荐的集群部署工具,提供了构建高可用集群的能力。本文将深入探讨使用 kubeadm 部署高可用 Kubernetes 集群时的关键考虑因素和实现方案。

高可用集群架构概述

高可用集群的核心目标是确保即使部分控制平面节点或工作节点发生故障,集群仍能保持正常运行。对于工作节点,只要数量足够,Kubernetes 本身就具备处理节点故障的能力。但对于控制平面节点和 etcd 实例,则需要特别设计冗余方案。

kubeadm 支持多控制平面和多 etcd 实例的集群部署。要实现真正的高可用,通常需要将 API Server 实例置于负载均衡器之后,并在使用 kubeadm init 初始化集群时通过 --control-plane-endpoint 参数指定负载均衡器的端点。

负载均衡方案选择

方案一:keepalived + haproxy 组合

这是经过长期验证的经典方案,由两个组件组成:

  1. keepalived:提供虚拟 IP(VIP)管理,通过健康检查确保 VIP 在节点间自动切换
  2. haproxy:提供简单的流式负载均衡,TLS 终止由后端的 API Server 处理
keepalived 配置详解

keepalived 需要两个配置文件:

  1. 主配置文件 /etc/keepalived/keepalived.conf
global_defs {
    router_id LVS_DEVEL
}
vrrp_script check_apiserver {
  script "/etc/keepalived/check_apiserver.sh"
  interval 3
  weight -2
  fall 10
  rise 2
}

vrrp_instance VI_1 {
    state MASTER  # 主节点设为MASTER,其他设为BACKUP
    interface eth0  # 参与VIP协商的网络接口
    virtual_router_id 51  # 同一集群所有节点相同,不同集群需唯一
    priority 101  # 主节点优先级高于备份节点(如100)
    authentication {
        auth_type PASS
        auth_pass 42  # 集群所有节点相同
    }
    virtual_ipaddress {
        192.168.0.100  # 虚拟IP地址
    }
    track_script {
        check_apiserver
    }
}
  1. 健康检查脚本 /etc/keepalived/check_apiserver.sh
#!/bin/sh
errorExit() {
    echo "*** $*" 1>&2
    exit 1
}
curl -sfk --max-time 2 https://localhost:6443/healthz -o /dev/null || errorExit "Error GET https://localhost:6443/healthz"
haproxy 配置详解

haproxy 主配置文件 /etc/haproxy/haproxy.cfg

global
    log stdout format raw local0
    daemon

defaults
    mode                    http
    log                     global
    option                  httplog
    option                  dontlognull
    option http-server-close
    option forwardfor       except 127.0.0.0/8
    option                  redispatch
    retries                 1
    timeout http-request    10s
    timeout queue           20s
    timeout connect         5s
    timeout client          35s
    timeout server          35s
    timeout http-keep-alive 10s
    timeout check           10s

frontend apiserver
    bind *:6443  # Kubernetes连接API Server的端口
    mode tcp
    option tcplog
    default_backend apiserverbackend

backend apiserverbackend
    option httpchk
    http-check connect ssl
    http-check send meth GET uri /healthz
    http-check expect status 200
    mode tcp
    balance     roundrobin
    server master1 192.168.0.101:6443 check verify none
    server master2 192.168.0.102:6443 check verify none
    server master3 192.168.0.103:6443 check verify none
部署方式选择
  1. 操作系统服务方式

    • 适合负载均衡器运行在独立主机上的场景
    • 使用系统包管理器安装软件
    • 通过 systemd 管理服务
  2. 静态Pod方式

    • 适合负载均衡器运行在控制平面节点上的场景
    • 将服务作为静态Pod部署
    • 需要在 /etc/kubernetes/manifests 目录下创建Pod清单

静态Pod清单示例(keepalived):

apiVersion: v1
kind: Pod
metadata:
  name: keepalived
  namespace: kube-system
spec:
  containers:
  - image: osixia/keepalived:2.0.20
    name: keepalived
    securityContext:
      capabilities:
        add: ["NET_ADMIN", "NET_BROADCAST", "NET_RAW"]
    volumeMounts:
    - mountPath: /usr/local/etc/keepalived/keepalived.conf
      name: config
    - mountPath: /etc/keepalived/check_apiserver.sh
      name: check
  hostNetwork: true
  volumes:
  - hostPath:
      path: /etc/keepalived/keepalived.conf
    name: config
  - hostPath:
      path: /etc/keepalived/check_apiserver.sh
    name: check

方案二:kube-vip 方案

kube-vip 是一个新兴方案,将VIP管理和负载均衡功能集成在一个服务中,支持两种模式:

  1. Layer2模式:使用ARP和leader选举
  2. Layer3模式:使用BGP对等
生成kube-vip清单
  1. 设置基本参数:
export VIP=192.168.0.40
export INTERFACE=eth0
export KVVERSION=v0.4.0  # 设置kube-vip版本
  1. ARP模式清单生成:
kube-vip manifest pod \
    --interface $INTERFACE \
    --vip $VIP \
    --controlplane \
    --arp \
    --leaderElection > /etc/kubernetes/manifests/kube-vip.yaml
  1. BGP模式清单生成:
kube-vip manifest pod \
    --interface lo \
    --vip $VIP \
    --controlplane \
    --bgp \
    --localAS 65000 \
    --bgpRouterID 192.168.0.2 \
    --bgppeers 192.168.0.10:65000::false,192.168.0.11:65000::false > /etc/kubernetes/manifests/kube-vip.yaml

集群初始化

完成负载均衡方案部署后,即可使用kubeadm初始化高可用集群。关键步骤如下:

  1. 在所有控制平面节点上准备负载均衡组件
  2. 使用 kubeadm init 命令初始化第一个控制平面节点,指定 --control-plane-endpoint 参数
  3. 添加其他控制平面节点到集群

总结

构建高可用Kubernetes集群需要仔细规划控制平面和etcd的冗余方案。kubeadm提供了基础支持,但负载均衡器的选择和配置同样关键。本文介绍的两种方案各有特点:

  1. keepalived+haproxy:成熟稳定,适合传统环境
  2. kube-vip:一体化方案,部署简单,适合云原生环境

根据实际环境需求选择合适的方案,并确保负载均衡器本身也具有高可用性,才能真正实现生产级的高可用Kubernetes集群。

kubeadm Aggregator for issues filed against kubeadm kubeadm 项目地址: https://gitcode.com/gh_mirrors/ku/kubeadm

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

03-08
### kubeadm安装配置教程 #### 准备工作 为了成功部署Kubernetes集群,需准备多台Linux服务器作为节点。对于Master节点而言,建议采用中高配置(如4c8g, 8c16g)。这是因为尽管默认情况下Kubernetes不会在此类节点上调度Pod执行,但其承载着诸如etcd、kube-apiserver、kube-controller-manager以及kube-scheduler等至关重要的服务组件,它们承担了大量的网络通信与运算任务[^2]。 #### 安装前设置 确保每台机器能够通过主机名相互解析,并且防火墙已适当开放必要的端口。此外,还需关闭SELinux并调整sysctl参数来满足Kubernetes的要求。 #### 容器运行时环境搭建 由于`pause:3.6`镜像可能无法从官方源获取,在这种情形下可以通过预先下载所需资源至本地仓库或是利用国内加速站点完成拉取操作;同时确认主控节点上的容器引擎已被正确定义以便后续步骤顺利开展[^4]。 #### 初始化 Master 节点 使用如下命令初始化集群: ```bash sudo kubeadm init --pod-network-cidr=10.244.0.0/16 ``` 此过程会自动创建证书文件夹并将相关联的信息保存于指定路径之下。完成后记得按照提示信息设定kubectl访问权限,并应用合适的CNI插件以支持Pod间通讯功能。 #### 加入 Worker 节点 一旦Master准备好之后,则可通过下面给出的方式让其他成员加入进来形成完整的分布式架构体系结构: ```bash kubeadm join <master-ip>:<master-port> --token <token> \ --discovery-token-ca-cert-hash sha256:<hash> ``` 以上指令中的具体数值应当依据实际情况替换掉占位符部分的内容才能生效。 #### 常见问题排查指南 当遇到难以启动的情况时,可尝试查看日志记录寻找线索: ```bash journalctl -xeu kubelet ``` 另外值得注意的是,即便采用了kubeadm工具简化了构建流程,但在追求生产级别的稳定性方面仍存在一定的局限性——比如实现高可用特性就需要额外投入精力去规划和实施相应的策略[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

范凡灏Anastasia

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值