Ubuntu24使用kubeadm部署高可用K8S集群

Ubuntu24使用kubeadm部署高可用K8S集群

使用kubeadm部署一个k8s集群,3个master+1个worker节点。

1. 环境信息

  • 操作系统:ubuntu24.04
  • 内存: 2GB
  • CPU: 2
  • 网络: 能够互访,能够访问互联网
hostname ip 备注
k8s-master1 192.168.0.51 master1
k8s-master2 192.168.0.52 master2
k8s-master3 192.168.0.53 master3
k8s-node1 192.168.0.54 worker1

最终目标部署一个HA Kubernetes 集群,使用堆叠(stacked)控制平面节点,其中 etcd 节点与控制平面节点共存。

ha-structure

关于高可用的详细说明可以参考官网:https://v1-27.docs.kubernetes.io/zh-cn/docs/setup/production-environment/tools/kubeadm/ha-topology/#stacked-etcd-topology

2. 准备工作

在所有节点(包括 Master 和 Worker 节点)上执行以下步骤。

linux基础配置

# 时间同步
sudo apt -y install chrony 
sudo systemctl enable chrony && sudo systemctl start chrony
sudo chronyc sources -v

# 设置时区
sudo timedatectl set-timezone Asia/Shanghai

# 设置主机名
sudo hostnamectl set-hostname master1 # 分别设置

# 设置hosts文件
cat << EOF | sudo tee /etc/hosts 
192.168.0.50  vip.cluster.local
192.168.0.51 master1
192.168.0.52 master2
192.168.0.53 master3
192.168.0.54 worker1
EOF

# 免密登录-master1执行
ssh-keygen
ssh-copy-id 192.168.0.51
ssh-copy-id 192.168.0.52
ssh-copy-id 192.168.0.53
ssh-copy-id 192.168.0.54

# 禁用swap
sudo swapoff -a && sudo sed -i '/swap/s/^/#/' /etc/fstab
# 或者
sudo systemctl disable --now swap.img.swap
sudo systemctl mask swap.target

# 禁用防火墙
sudo ufw disable
sudo ufw status

内核参数调整

cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
overlay
br_netfilter
EOF

# 加载模块
sudo modprobe overlay
sudo modprobe br_netfilter

# 设置所需的 sysctl 参数。

cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-iptables  = 1
net.bridge.bridge-nf-call-ip6tables = 1   # 将桥接的IPv4 流量传递到iptables 的链
net.ipv4.ip_forward                 = 1   # 启用 IPv4 数据包转发
EOF

# 应用 sysctl 参数
sudo sysctl --system

# 通过运行以下指令确认 br_netfilter 和 overlay 模块被加载
sudo lsmod | grep br_netfilter
sudo lsmod | grep overlay

# 通过运行以下指令确认 net.bridge.bridge-nf-call-iptables、net.bridge.bridge-nf-call-ip6tables 和 net.ipv4.ip_forward 系统变量在你的 sysctl 配置中被设置为 1
sudo sysctl net.bridge.bridge-nf-call-iptables net.bridge.bridge-nf-call-ip6tables net.ipv4.ip_forward

配置ipvs

# 安装
sudo apt install -y ipset ipvsadm

# 内核加载ipvs
cat <<EOF | sudo tee /etc/modules-load.d/ipvs.conf
ip_vs
ip_vs_rr
ip_vs_wrr
ip_vs_sh
nf_conntrack
EOF

# 加载模块
sudo modprobe ip_vs
sudo modprobe ip_vs_rr
sudo modprobe ip_vs_wrr
sudo modprobe ip_vs_sh
sudo modprobe nf_conntrack

安装容器运行时

本文选用containerd作为容器运行时:

# 安装containerd
sudo apt install -y containerd

修改Containerd的配置文件

配置containerd使用cgroup的驱动为systemd,并修改沙箱镜像源:

# 生成containetd的配置文件
sudo mkdir -p /etc/containerd/
containerd config default | 
### 如何在Ubuntu上设置高可用Kubernetes集群 #### 准备工作 为了确保顺利部署,在开始之前,确认操作系统环境已经更新至最新状态并安装必要的工具包。对于Ubuntu系统而言,可以利用如下命令完成基础准备: ```bash sudo apt-get update && sudo apt-get upgrade -y sudo apt-get install -y curl wget vim git jq ``` #### 配置无密码SSH登录 实现节点间的免密通信是构建HA(High Availability) Kubernetes集群的重要前提之一。通过生成SSH Key并将公钥分发给各个目标机器可达成这一目的。 ```bash ssh-keygen -t rsa -b 4096 -C "your_email@example.com" for i in $(seq 1 3); do ssh-copy-id root@node$i; done ``` 此处假设共有三台服务器参与构成集群,分别为`node1`, `node2`, 和 `node3`. #### 安装Docker作为容器运行时 鉴于官方不再提供ARM架构下的Containerd二进制文件[^3],这里推荐采用更为通用兼容性更好的Docker引擎充当容器运行组件。 ```bash curl -fsSL https://get.docker.com | bash - sudo usermod -aG docker $USER newgrp docker ``` #### 使用kubeadm初始化主控节点 借助于`kubeadm init`指令能够快速建立起单体式的控制平面实例;而要创建多副本形式,则需额外指定参数以满足高可用性的需求。 ```bash sudo swapoff -a cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 EOF sudo sysctl --system sudo kubeadm init --control-plane-endpoint="LOAD_BALANCER_DNS:LOAD_BALANCER_PORT" \ --upload-certs --pod-network-cidr=10.244.0.0/16 mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config ``` 注意替换其中的负载均衡器地址与端口号为实际使用的值。 #### 加入其他Control Plane成员 当首个Master成功启动后,可通过下面的方式将其余候选者加入进来形成冗余结构。 ```bash export DISCOVERY_TOKEN_CA_CERT_HASH=$(openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //') sudo kubeadm join LOAD_BALANCER_DNS:LOAD_BALANCER_PORT --token <token> \ --discovery-token-ca-cert-hash sha256:${DISCOVERY_TOKEN_CA_CERT_HASH} \ --control-plane --certificate-key <cert_key> ``` 同样地,请根据实际情况调整变量内容。 #### 连接Worker Nodes 最后一步便是吸纳计算资源池中的工作者节点了。 ```bash sudo kubeadm join LOAD_BALANCER_DNS:LOAD_BALANCER_PORT --token <token> \ --discovery-token-ca-cert-hash sha256:<hash_value> ``` 至此,一个多主机组成的高可靠度Kubernetes平台便已初步成型。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lldhsds

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值