安装部署k8s高可用集群(Stacked etcd)

📅 2026/8/1 11:11:30 👁️ 阅读次数 📝 编程学习
安装部署k8s高可用集群(Stacked etcd)

框架:

禁用 Swap 分区

执行以下命令立即关闭所有 swap 分区:

swapoff -a

永久禁用 swap,通过注释/etc/fstab中的配置:

sed -i.bak '/ swap /s/^/#/' /etc/fstab

禁用防火墙

停止并禁用防火墙服务:

systemctl stop firewalld systemctl disable firewalld systemctl mask firewalld

配置 SELinux

临时将 SELinux 设置为 permissive 模式:

setenforce 0

永久修改 SELinux 配置:

sed -i 's/^SELINUX=enforcing/SELINUX=permissive/' /etc/selinux/config

验证 SELinux 状态:

getenforce

配置主机名解析

将以下内容追加到/etc/hosts文件中:

cat >> /etc/hosts <<EOF 172.31.69.166 k8s-lb01 172.31.69.160 k8s-master01 172.31.69.161 k8s-master02 172.31.69.162 k8s-master03 172.31.69.163 k8s-worker01 172.31.69.164 k8s-worker02 172.31.69.165 k8s-worker03 EOF

加载 Kubernetes 内核模块

创建/etc/modules-load.d/k8s.conf文件并加载模块:

cat > /etc/modules-load.d/k8s.conf <<EOF overlay br_netfilter EOF modprobe overlay modprobe br_netfilter

配置内核网络参数

创建/etc/sysctl.d/k8s.conf文件并应用配置:

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

安装 Containerd

安装依赖:

dnf install -y yum-utils device-mapper-persistent-data lvm2

配置 Docker CE 阿里源:

cat > /etc/yum.repos.d/docker-ce.repo <<'EOF' [docker-ce-stable] name=Docker CE Stable - \$basearch baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/9/\$basearch/stable enabled=1 gpgcheck=0 EOF

安装 Containerd:

dnf clean all dnf makecache dnf install -y containerd.io

生成 Containerd 配置文件:

mkdir -p /etc/containerd containerd config default > /etc/containerd/config.toml

确认使用 systemd cgroup:

grep -n "SystemdCgroup" /etc/containerd/config.toml

修改为阿里源:

sed -i "s#sandbox = 'registry.k8s.io/pause:[^']*'#sandbox = 'registry.aliyuncs.com/google_containers/pause:3.10.2'#" /etc/containerd/config.toml

启动 Containerd:

systemctl enable --now containerd systemctl restart containerd systemctl status containerd --no-pager

安装 Kubernetes 组件

配置 Kubernetes 软件源:

cat > /etc/yum.repos.d/kubernetes.repo <<'EOF' [kubernetes] name=Kubernetes baseurl=https://pkgs.k8s.io/core:/stable:/v1.36/rpm/ enabled=1 gpgcheck=1 gpgkey=https://pkgs.k8s.io/core:/stable:/v1.36/rpm/repodata/repomd.xml.key exclude=kubelet kubeadm kubectl cri-tools kubernetes-cni EOF

或使用清华源:

cat > /etc/yum.repos.d/kubernetes.repo <<'EOF' [kubernetes] name=Kubernetes baseurl=https://mirrors.tuna.tsinghua.edu.cn/kubernetes/core:/stable:/v1.36/rpm/ enabled=1 gpgcheck=0 exclude=kubelet kubeadm kubectl cri-tools kubernetes-cni EOF

安装组件:

dnf clean all dnf makecache dnf install -y kubelet kubeadm kubectl cri-tools --disableexcludes=kubernetes

启动 kubelet:

systemctl enable --now kubelet

配置crictl

cat > /etc/crictl.yaml <<EOF runtime-endpoint: unix:///run/containerd/containerd.sock image-endpoint: unix:///run/containerd/containerd.sock timeout: 120 debug: false EOF

检查版本:

kubeadm version kubelet --version kubectl version --client crictl version

部署 HAProxy

k8s-lb01节点安装 HAProxy:

dnf install -y haproxy

编辑配置文件:

cat > /etc/haproxy/haproxy.cfg <<'EOF' global log /dev/log local0 log /dev/log local1 notice daemon maxconn 4096 defaults log global mode tcp option tcplog option dontlognull timeout connect 10s timeout client 1m timeout server 1m frontend k8s_apiserver bind *:6443 default_backend k8s_control_plane backend k8s_control_plane balance roundrobin option tcp-check server k8s-master01 172.31.69.160:6443 check server k8s-master02 172.31.69.161:6443 check server k8s-master03 172.31.69.162:6443 check EOF

检查配置:

haproxy -c -f /etc/haproxy/haproxy.cfg

启动 HAProxy:

systemctl enable --now haproxy systemctl status haproxy --no-pager

检查端口:

ss -lntp | grep 6443

初始化第一台 Master

k8s-master01节点执行以下命令预拉镜像:

kubeadm config images pull \ --image-repository=registry.aliyuncs.com/google_containers

初始化集群:

kubeadm init \ --control-plane-endpoint "172.31.69.166:6443" \ --apiserver-advertise-address=172.31.69.160 \ --pod-network-cidr=10.244.0.0/16 \ --upload-certs \ --image-repository=registry.aliyuncs.com/google_containers

配置kubectl

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

查看节点状态:

kubectl get nodes -o wide kubectl get pods -A -o wide

安装 Flannel 网络插件

应用 Flannel 配置:

kubectl apply -f https://github.com/flannel-io/flannel/releases/latest/download/kube-flannel.yml

查看 Flannel 状态:

kubectl -n kube-flannel get pods -o wide kubectl get nodes -o wide

目标状态为k8s-master01显示Ready,并且kube-flannelPod 运行正常。