Ubuntu22.04下基于Kubeadm与Containerd的Kubernetes1.32高可用集群部署实战

张开发
2026/5/5 15:36:21 15 分钟阅读

分享文章

Ubuntu22.04下基于Kubeadm与Containerd的Kubernetes1.32高可用集群部署实战
1. 环境准备与系统初始化在开始部署Kubernetes高可用集群之前我们需要确保所有节点都处于相同的基础环境中。我最近在四台配置相同的服务器上完成了这个部署每台都是8核CPU、16GB内存和200GB存储空间。以下是具体操作步骤首先我们需要确认操作系统版本。Ubuntu 22.04 LTS是目前长期支持版本稳定性有保障。执行以下命令查看系统信息lsb_release -a uname -r网络配置是集群通信的基础。我建议使用Netplan进行网络配置这是Ubuntu 22.04默认的网络管理工具。编辑/etc/netplan/00-installer-config.yaml文件时特别注意保持各节点的网络配置一致network: ethernets: ens160: addresses: [10.62.1.181/24] nameservers: addresses: [114.114.114.114] routes: - to: default via: 10.62.1.254 version: 2应用配置后别忘了检查各节点间的网络连通性。我在实际部署中就遇到过因为防火墙规则导致节点间通信失败的问题。执行以下命令关闭不必要的服务sudo systemctl stop ufw sudo systemctl disable ufw sudo swapoff -a sudo sed -i /swap/s/^/#/ /etc/fstab时间同步对分布式系统至关重要。我推荐使用chrony进行时间同步配置如下sudo timedatectl set-timezone Asia/Shanghai sudo apt install -y chrony编辑/etc/chrony/chrony.conf文件添加可靠的NTP服务器。配置完成后可以用chronyc sources -v命令检查同步状态。2. Containerd容器运行时安装与配置Containerd作为Kubernetes推荐的容器运行时相比Docker更加轻量高效。在Ubuntu 22.04上安装非常简单sudo apt update sudo apt install -y containerd安装完成后生成默认配置文件sudo mkdir -p /etc/containerd sudo containerd config default | sudo tee /etc/containerd/config.toml这里有几个关键配置需要修改。首先是将cgroup驱动改为systemd这是与Kubernetes配合的最佳实践sudo sed -i s/SystemdCgroup false/SystemdCgroup true/ /etc/containerd/config.toml然后是配置镜像加速器。国内用户可以使用阿里云镜像源sudo sed -i s|registry.k8s.io/pause:3.8|registry.aliyuncs.com/google_containers/pause:3.10| /etc/containerd/config.toml我建议为Containerd配置私有仓库和镜像加速。创建/etc/containerd/certs.d/docker.io/hosts.toml文件内容如下server https://docker.io [host.https://dockerproxy.com] capabilities [pull, resolve] [host.https://reg-mirror.qiniu.com] capabilities [pull, resolve]最后重启Containerd服务使配置生效sudo systemctl restart containerd sudo systemctl enable containerd3. Kubernetes组件安装与配置现在我们可以开始安装Kubernetes核心组件了。首先添加Kubernetes官方APT仓库sudo apt install -y apt-transport-https ca-certificates curl curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.32/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg echo deb [signed-by/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.32/deb/ / | sudo tee /etc/apt/sources.list.d/kubernetes.list安装指定版本的Kubernetes组件sudo apt update sudo apt install -y kubelet1.32.2-1.1 kubeadm1.32.2-1.1 kubectl1.32.2-1.1 sudo apt-mark hold kubelet kubeadm kubectl这里我强烈建议固定组件版本避免自动升级导致的不兼容问题。安装完成后可以启用kubectl命令自动补全echo source (kubectl completion bash) ~/.bashrc source ~/.bashrc4. 高可用负载均衡配置高可用集群的核心是负载均衡。我选择HAProxyKeepalived方案因为它简单可靠。首先在所有控制平面节点上安装必要软件sudo apt install -y haproxy keepalivedHAProxy配置是关键我的/etc/haproxy/haproxy.cfg文件主要部分如下listen kube-master bind 0.0.0.0:8443 mode tcp option tcplog balance roundrobin server apiserver1 10.62.1.181:6443 check inter 2000 fall 2 rise 2 weight 1 server apiserver2 10.62.1.182:6443 check inter 2000 fall 2 rise 2 weight 1 server apiserver3 10.62.1.183:6443 check inter 2000 fall 2 rise 2 weight 1Keepalived配置需要区分主备节点。主节点配置示例vrrp_instance VI-k8s-01 { state MASTER priority 100 interface ens160 virtual_router_id 12 advert_int 1 authentication { auth_type PASS auth_pass 123456 } virtual_ipaddress { 10.62.1.180/24 dev ens160 label ens160:1 } }备节点只需将state改为BACKUPpriority设置更低值即可。我建议添加健康检查脚本/etc/keepalived/check_haproxy.sh#!/bin/bash COUNT$(ps -C haproxy --no-header |wc -l) if [ $COUNT -eq 0 ]; then systemctl start haproxy sleep 5 if [ $(ps -C haproxy --no-header |wc -l) -eq 0 ]; then killall keepalived fi fi5. 集群初始化与网络插件部署一切准备就绪后可以开始初始化集群了。我推荐使用配置文件方式初始化这样更加清晰可维护。创建kubeadm-init.yaml文件apiVersion: kubeadm.k8s.io/v1beta4 kind: ClusterConfiguration controlPlaneEndpoint: 10.62.1.180:8443 imageRepository: registry.aliyuncs.com/google_containers kubernetesVersion: v1.32.2 networking: podSubnet: 10.244.0.0/16 --- apiVersion: kubeadm.k8s.io/v1beta4 kind: InitConfiguration nodeRegistration: criSocket: unix:///var/run/containerd/containerd.sock执行初始化命令sudo kubeadm init --configkubeadm-init.yaml --upload-certs初始化成功后按照提示配置kubectlmkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config最后部署网络插件。我选择Calico因为它功能强大且性能优秀kubectl create -f https://raw.githubusercontent.com/projectcalico/calico/v3.29.1/manifests/tigera-operator.yaml kubectl create -f https://raw.githubusercontent.com/projectcalico/calico/v3.29.1/manifests/custom-resources.yaml等待所有Pod变为Running状态后一个高可用的Kubernetes集群就部署完成了。在实际生产环境中我还建议配置监控告警和日志系统但这已经超出了本文的范围。

更多文章