k8s高可用在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节点
在master2、master3上执行初始化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>
九、验证集群高可用性
- 检查节点状态:
kubectl get nodes # 所有节点应为Ready状态 - 模拟Master节点故障:
停止某Master节点的kube-apiserver服务,观察负载均衡器是否将请求分发至其他Master节点,且集群仍能正常管理(如创建Pod、Deployment)。 - 检查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
