引言
Kubernetes(简称K8s)是一种流行的容器编排工具,能够自动化部署、扩展和管理容器化应用程序。高可用集群是K8s集群的一种部署模式,通过多个节点和负载均衡技术,确保集群的稳定性和可靠性。本文将详细介绍K8s高可用集群的搭建过程,从入门到实战,帮助您轻松掌握这一技能。
环境准备
在开始搭建高可用集群之前,我们需要准备以下环境:
- 服务器:至少3台服务器,推荐配置为2核CPU、4G内存、40G硬盘。
- 操作系统:CentOS 7.9 x64 或 Ubuntu 20.04 LTS。
- 软件:Docker 20.10、Kubernetes 1.28.0、Keepalived、Haproxy。
步骤一:服务器初始化
- 关闭防火墙:
systemctl stop firewalld
systemctl disable firewalld
- 关闭SELinux:
sed -i 's/enforcing/disabled/' /etc/selinux/config
setenforce 0
- 关闭swap:
swapoff -a
sed -ri 's/.swap./#&/' /etc/fstab
- 设置主机名和hosts文件:
hostnamectl set-hostname <hostname>
echo "192.168.1.100 k8s-master1" >> /etc/hosts
echo "192.168.1.101 k8s-master2" >> /etc/hosts
echo "192.168.1.102 k8s-node1" >> /etc/hosts
- 配置时间同步:
sudo apt install chrony -y
sudo vim /etc/chrony/chrony.conf
# master节点配置
confdir /etc/chrony/conf.d
pool ntp.aliyun.com iburst maxsources 4
pool time1.cloud.tencent.com iburst maxsources 2
步骤二:安装Docker
- 安装Docker:
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
sudo yum install -y docker-ce docker-ce-cli containerd.io
- 启动Docker服务:
sudo systemctl start docker
sudo systemctl enable docker
- 配置Docker镜像加速:
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://<镜像加速器地址>"]
}
EOF
sudo systemctl restart docker
步骤三:安装Kubernetes
- 安装kubeadm、kubelet和kubectl:
sudo yum install -y kubeadm kubelet kubectl
sudo systemctl start kubelet
sudo systemctl enable kubelet
- 初始化集群:
sudo kubeadm init --pod-network-cidr=10.244.0.0/16
- 配置kubectl:
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
- 安装Pod网络插件:
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
步骤四:搭建高可用集群
- 安装Keepalived和Haproxy:
sudo yum install -y keepalived haproxy
- 配置Keepalived:
sudo vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
router_id LVS_DEVEL
}
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 123456
}
virtual_ipaddress {
192.168.1.100/24 dev eth0 label eth0:0
}
}
- 配置Haproxy:
sudo vim /etc/haproxy/haproxy.cfg
global
log 127.0.0.1 local2
maxconn 4096
chroot /var/lib/haproxy
user haproxy
group haproxy
daemon
stats socket /var/lib/haproxy/stats level admin
defaults
log global
mode http
option httplog
option http-server-close
option forwardfor
option redispatch
retries 3
timeout queue 5s
timeout connect 5000ms
timeout client 50000ms
timeout server 50000ms
listen k8s-master
bind 192.168.1.100:6443
mode tcp
option tcplog
timeout connect 5000ms
timeout client 50000ms
timeout server 50000ms
balance roundrobin
server k8s-master1 192.168.1.100:6443 check inter 2000 rise 2 fall 5
server k8s-master2 192.168.1.101:6443 check inter 2000 rise 2 fall 5
server k8s-master3 192.168.1.102:6443 check inter 2000 rise 2 fall 5
- 启动Keepalived和Haproxy服务:
sudo systemctl start keepalived
sudo systemctl start haproxy
sudo systemctl enable keepalived
sudo systemctl enable haproxy
- 配置集群节点:
sudo kubeadm join 192.168.1.100:6443 --token <token> --discovery-token-ca-cert-hash sha256:<hash>
步骤五:验证集群状态
- 查看集群状态:
kubectl get nodes
- 查看Pod状态:
kubectl get pods --all-namespaces
总结
通过以上步骤,您已经成功搭建了一个高可用K8s集群。在实际应用中,您可以根据需求对集群进行扩展和优化。祝您在使用K8s的过程中一切顺利!