首页主机资讯k8s高可用在centos上实现

k8s高可用在centos上实现

时间2025-11-10 09:24:04发布访客分类主机资讯浏览972
导读:Kubernetes高可用在CentOS上的实现指南 Kubernetes(K8s)高可用部署的核心目标是消除单点故障,确保控制平面(Master节点)、数据面(etcd集群)和业务接入的稳定性。以下是基于CentOS系统的详细实现步骤,涵...

Kubernetes高可用在CentOS上的实现指南
Kubernetes(K8s)高可用部署的核心目标是消除单点故障,确保控制平面(Master节点)、数据面(etcd集群)和业务接入的稳定性。以下是基于CentOS系统的详细实现步骤,涵盖环境准备、核心组件配置及验证环节。

一、环境准备

1. 基础要求

  • 服务器配置:建议每台Master/Worker节点配备≥2核CPU、≥2GB内存、≥20GB存储(etcd节点需更大存储)。
  • 网络要求:所有节点处于同一局域网,能互相通信(端口需开放:6443(API Server)、10250(kubelet)、10255(kubelet只读)、2379-2380(etcd)等)。
  • 操作系统:CentOS 7.x/8.x(需开启内核转发:echo "net.ipv4.ip_forward = 1" > > /etc/sysctl.conf & & sysctl -p)。

2. 关键配置

  • 关闭防火墙与SELinux
    systemctl stop firewalld &
        &
         systemctl disable firewalld  # 关闭防火墙
    sed -i 's/enforcing/disabled/' /etc/selinux/config &
        &
         setenforce 0  # 禁用SELinux
    
  • 禁用Swap
    swapoff -a  # 临时关闭
    sed -ri 's/.*swap.*/#&
        /' /etc/fstab  # 永久关闭(注释swap行)
    
  • 配置主机名与hosts文件
    统一规划节点角色(如Master1/2/3、Worker1/2),并在所有节点的/etc/hosts中添加映射:
    echo "192.168.1.10 master1" >
        >
         /etc/hosts
    echo "192.168.1.11 master2" >
        >
         /etc/hosts
    echo "192.168.1.12 master3" >
        >
         /etc/hosts
    echo "192.168.1.20 worker1" >
        >
         /etc/hosts
    echo "192.168.1.21 worker2" >
        >
         /etc/hosts
    

二、安装基础组件

在所有节点上安装Docker(容器运行时)kubelet(节点代理)kubeadm(集群初始化工具)kubectl(集群管理命令)

# 添加Kubernetes YUM源
cat <
    <
    EOF >
     /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF

# 安装组件
yum install -y docker kubelet kubeadm kubectl --disableexcludes=kubernetes

# 启动并设置开机自启
systemctl enable --now docker kubelet

三、部署etcd高可用集群

etcd是K8s的核心数据存储组件,需以3节点奇数集群部署(推荐跨可用区),确保强一致性:

# 在所有Master节点上执行(以master1为例,其他节点替换IP)
cat <
    <
    EOF >
     /etc/etcd/etcd.conf
NAME="master1"
DATA_DIR="/var/lib/etcd"
LISTEN_PEER_URLS="http://0.0.0.0:2380"
LISTEN_CLIENT_URLS="http://0.0.0.0:2379"
INITIAL_CLUSTER_TOKEN="etcd-cluster-k8s"
INITIAL_CLUSTER="master1=http://192.168.1.10:2380,master2=http://192.168.1.11:2380,master3=http://192.168.1.12:2380"
INITIAL_CLUSTER_STATE="new"
EOF

# 启动etcd服务
systemctl enable --now etcd

验证etcd集群状态(在任一Master节点执行):

ETCDCTL_API=3 etcdctl --endpoints=https://127.0.0.1:2379 --cacert=/etc/etcd/ca.crt --cert=/etc/etcd/server.crt --key=/etc/etcd/server.key member list

四、初始化Master节点(多Master架构)

选择master1作为初始化节点,生成集群配置并部署kube-apiserver、kube-controller-manager、kube-scheduler:

# 初始化Master(指定etcd集群地址、API Server监听地址、Pod网络CIDR)
kubeadm init \
  --control-plane-endpoint="k8s-api.example.com:6443" \  # 负载均衡器VIP(后续配置)
  --etcd-servers="https://192.168.1.10:2379,https://192.168.1.11:2379,https://192.168.1.12:2379" \
  --pod-network-cidr=10.244.0.0/16 \
  --service-cidr=10.96.0.0/12 \
  --upload-certs  # 上传证书至集群,方便其他Master节点加入

配置kubectl(在Master节点上):

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

五、部署网络插件

选择Calico(推荐,支持网络策略)作为CNI插件,实现Pod间通信:

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

验证网络插件

kubectl get pods -n calico-system  # 确保所有Pod为Running状态

六、加入其他Master节点

master2master3上执行初始化Master时输出的kubeadm join命令(包含--control-plane参数):

kubeadm join k8s-api.example.com:6443 \
  --token <
    TOKEN>
     \
  --discovery-token-ca-cert-hash <
    HASH>
     \
  --control-plane --certificate-key <
    CERT_KEY>
    

七、配置负载均衡器(API Server高可用)

使用Nginx作为负载均衡器,将API Server请求分发至多个Master节点,避免单点故障:

# 在负载均衡节点(或某Master节点)上安装Nginx
yum install -y nginx

# 配置Nginx(/etc/nginx/conf.d/k8s-api.conf)
cat <
    <
    EOF >
 /etc/nginx/conf.d/k8s-api.conf
upstream k8s_apiservers {
    
    server 192.168.1.10:6443 max_fails=3 fail_timeout=10s;
    
    server 192.168.1.11:6443 max_fails=3 fail_timeout=10s;
    
    server 192.168.1.12:6443 max_fails=3 fail_timeout=10s;

}


server {
    
    listen 6443;
    
    server_name k8s-api.example.com;

    location / {
    
        proxy_pass https://k8s_apiservers;
    
        proxy_ssl_verify off;

    }

}
    
EOF

# 启动Nginx
systemctl enable --now nginx

验证负载均衡

curl -k https://k8s-api.example.com:6443/version  # 应返回K8s版本信息

八、配置Worker节点加入集群

在所有Worker节点上执行kubeadm join命令(由Master初始化时生成):

kubeadm join k8s-api.example.com:6443 \
  --token <
    TOKEN>
     \
  --discovery-token-ca-cert-hash <
    HASH>
    

九、验证集群高可用性

  1. 检查节点状态
    kubectl get nodes  # 所有节点应为Ready状态
    
  2. 模拟Master节点故障
    停止某Master节点的kube-apiserver服务,观察负载均衡器是否将请求分发至其他Master节点,且集群仍能正常管理(如创建Pod、Deployment)。
  3. 检查etcd集群
    停止某etcd节点,验证集群是否能继续运行(需确保剩余etcd节点数为奇数)。

十、可选优化

  • 自动证书管理:使用cert-manager实现证书自动续期,避免手动操作。
  • 监控与告警:部署Prometheus+Grafana监控集群状态,配置Alertmanager发送告警(如节点宕机、Pod异常)。
  • Pod反亲和性:通过topologySpreadConstraints将Pod分散至不同节点/可用区,提升业务容灾能力。

通过以上步骤,可在CentOS上构建一个具备控制平面高可用etcd数据高可用业务接入高可用的Kubernetes集群,满足企业级生产需求。

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!


若转载请注明出处: k8s高可用在centos上实现
本文地址: https://pptw.com/jishu/745947.html
如何提升centos上k8s效率 如何迁移centos上的k8s

游客 回复需填写必要信息