搭建k8s高可用集群

一、方案:debian11使用kubeadm搭建一个k8s集群,实现master高可用

说明:master主要组件,controller manager、scheduler、etcd、apiserver,master高可用必须确保这些组件实现高可用,至少需要3台机器,因为etcd组件,在其中一个实例宕机后,etcd集群需要自动选举去实现它的高可用

二、ip地址规划

master1:192.168.152.10

master2:192.168.152.20

master3:192.168.152.30

node1:192.168.152.40

haproxy:192.168.152.50

三、部署

1、搭建haproxy服务,转发master各节点的apiserver端口6443

下载安装haproxy

curl https://haproxy.debian.net/bernat.debian.org.gpg       | gpg --dearmor > /usr/share/keyrings/haproxy.debian.net.gpg
echo deb "[signed-by=/usr/share/keyrings/haproxy.debian.net.gpg]"       http://haproxy.debian.net bullseye-backports-2.6 main       > /etc/apt/sources.list.d/haproxy.list
apt-get update
apt-get install haproxy=2.6.\*

修改haproxy配置文件/etc/haproxy/haproxy.cfg,添加以下内容

frontend apiserver
    bind *:6443
    mode tcp
    option tcplog
    default_backend apiserver
backend apiserver
    option httpchk GET /healthz
    http-check expect status 200
    mode tcp
    option ssl-hello-chk
    balance     roundrobin
    server master1 192.168.152.10:6443 check
    server master2 192.168.152.20:6443 check
server master2 192.168.152.30:6443 check

重启服务并设置开机启动

systemctl restart haproxy
systemctl enable haproxy

2、master、node各节点初始化操作

修改/etc/hosts

192.168.152.10  master1
192.168.152.20  master2
192.168.152.30  master3
192.168.152.40  node1

修改hostname,根据各节点名称做相应修改

cat << EOF > /etc/hostname
master1
EOF
hostname master1

关闭swap

swapoff -a
sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab

内核调整,将桥接的IPv4流量传递到iptables的链

cat  << EOF > /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sysctl --system

安装docker,配置cgroup驱动,如果部署的k8s版本超过1.24以上就必须安装一个额外的服务 cri-dockerd,这里部署的是1.23版本就不需要了

curl -sSL https://get.daocloud.io/docker | sh
touch /etc/docker/daemon.json
cat << EOF > /etc/docker/daemon.json
{
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m"
},
"storage-driver": "overlay2",
"registry-mirrors": ["https://pee6w651.mirror.aliyuncs.com"]
}
EOF
systemctl start docker
systemctl enable docker

安装kubeadm、kubelet、kubectl

**更新 apt 包索引并安装使用 Kubernetes apt 仓库所需要的包

sudo apt-get update
sudo apt-get install -y apt-transport-https ca-certificates curl

**下载 Google Cloud 公开签名秘钥

sudo curl -fsSLo /usr/share/keyrings/kubernetes-archive-keyring.gpg https://packages.cloud.google.com/apt/doc/apt-key.gpg

**添加 Kubernetes apt 仓库

echo "deb [signed-by=/usr/share/keyrings/kubernetes-archive-keyring.gpg] https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list

**更新 apt 包索引,安装 kubelet、kubeadm 和 kubectl

sudo apt-get update
sudo apt-get install -y kubelet-1.23.0 kubeadm-1.23.0 kubectl-1.23.0
systemctl enable kubelet

3、master、node各节点init、join操作

先在master1节点操作init

说明:control-plane-endpoint:指定负载均衡的地址和端口,pod-network-cidr:pod的网段,upload-certs:集群自动上传证书

sudo kubeadm init --control-plane-endpoint 192.168.152.50:6443 --pod-network-cidr 10.244.0.0/16 --upload-certs

master1 init成功后,会出现加入master节点的join命令和加入node节点的join命令

配置当前用户使用kubectl连接apiserver

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

在master2、master3节点上执行master的kubeadm join命令加入集群

在node1节点上执行node的kubeadm join命令加入集群

4、安装flannel网络插件

说明:如果kube-flannel.yml中pod网段不是10.240.0.0/16,需要先改成该网段后执行。

wget https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml
kubectl apply -f kube-flannel.yml

至此k8s master高可用集群就搭建完成,这个集群允许三台master的其中任意一台master无法提供服务,如果在云上环境,建议haproxy实现的master负载均衡器可以使用云上的公网或私网的slb替代,control-plane-endpoint地址可以改成外网或内网域名,方便后期调整。

 

posted @ 2022-10-06 15:20  屠夫2022  阅读(1037)  评论(0编辑  收藏  举报