ubantu 24,使用sealos v5.1.1 安装 k8s v1.26.15 + kubesphere v3.4.0

ubantu 24。

集群规划(3 节点),使用sealos v5.1.1 部署 k8s + kubesphere v3.4.0

master节点01,主机名:k8s-master-01,ip:172.29.128.1

工作节点01:主机名:k8s-worker-01,ip:172.29.132.68

工作节点02:主机名:k8s-worker-02,ip:172.29.132.69

机器名 内网 ip
k8s-master-01 172.29.128.1
k8s-worker-01 172.29.132.68 
k8s-worker-02 172.29.132.69 

 

 

 

 

 

一、环境前置约束

  1. 全部节点关闭防火墙 / 放行全内网、关闭 swap、主机名互不重复
  2. 所有节点 /etc/hosts 同步配置域名解析
  3. k8s v1.26.15 使用 containerd 容器运行时,不兼容 docker 旧逻辑
  4. KubeSphere v3.4.1 适配 K8s 1.24~1.27,推荐集群版本 v1.26.15

二,全节点卸载清理旧集群 containerd/k8s 所有残留

# 停止服务
systemctl stop containerd kubelet 2>/dev/null
systemctl disable containerd kubelet 2>/dev/null

# 卸载软件
apt remove -y containerd.io containerd kubeadm kubectl kubelet
apt autoremove -y
apt autoclean

# 删除二进制
rm -f /usr/bin/containerd /usr/bin/ctr /usr/bin/kube*
# 删除所有数据目录
rm -rf /etc/containerd /var/lib/containerd /run/containerd /var/lib/cri
rm -rf /var/lib/sealos /etc/kubernetes /var/lib/kubelet /var/lib/etcd
rm -rf /var/lib/nerdctl /var/lib/calico /var/run/calico
# 清空旧CNI网络配置
rm -rf /etc/cni/net.d/*
# 清空旧iptables/ipvs规则
iptables -F && iptables -t nat -F && iptables -X && ipvsadm -C
ip link del tunl0 2>/dev/null;ip link del cni0 2>/dev/null

 

三、所有节点统一前置初始化脚本(所有机器执行)

1. 主机名、hosts 配置(分节点执行主机名,hosts 全节点执行)

# master节点单独执行
hostnamectl set-hostname k8s-master-01

# worker01单独执行
# hostnamectl set-hostname k8s-worker-01

# worker02单独执行
# hostnamectl set-hostname k8s-worker-02

# 所有节点统一hosts,检查一下有没有这些内容,有就不要重复写入(默认有这些内容)
cat > /etc/hosts << EOF
127.0.0.1 localhost
::1 ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
EOF

 

2. 配置 hosts 解析(所有节点统一写入 /etc/hosts)

cat >> /etc/hosts << EOF172.29.128.1    k8s-master-01
172.29.132.68   k8s-worker-01
172.29.132.69   k8s-worker-02
EOF

 

/etc/hosts 完整内容:

127.0.0.1 localhost
# The following lines are desirable for IPv6 capable hosts
::1 ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
172.29.128.1 k8s-master-01
172.29.132.68 k8s-worker-01
172.29.132.69 k8s-worker-02

 

3. 系统基础关闭 swap、ssh、防火墙

# 关闭swap永久生效
swapoff -a
sed -i '/swap/s/^/#/' /etc/fstab

# 开启root密码登录
sed -i 's/#PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config
sed -i 's/#PasswordAuthentication no/PasswordAuthentication yes/' /etc/ssh/sshd_config
systemctl restart ssh
systemctl enable ssh

# 关闭ufw防火墙
systemctl stop ufw
systemctl disable ufw

 

4. sysctl 完整网络内核参数

cat > /etc/sysctl.conf << EOF
# k8s桥接转发
net.bridge.bridge-nf-call-iptables  = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward                 = 1
# rp_filter 防路由环路(calico BGP必备)
net.ipv4.conf.all.rp_filter=1
net.ipv4.conf.default.rp_filter=1
# TCP网络优化,减少节点丢包
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_fin_timeout = 30
# 文件句柄上限
fs.file-max = 655350
# 端口范围扩大
net.ipv4.ip_local_port_range = 1024 65535
# 内存脏页优化
vm.dirty_background_ratio = 5
vm.dirty_ratio = 10
EOF
sysctl -p

# calico隧道参数独立配置兜底
cat > /etc/sysctl.d/99-calico-tunnel.conf <<EOF
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
EOF
sysctl -p /etc/sysctl.d/99-calico-tunnel.conf

 

5. 内核模块(临时加载 + 开机持久化)

# 临时加载calico全套依赖
modprobe overlay
modprobe br_netfilter
modprobe ipip
modprobe tunnel4
modprobe ip_tunnel
modprobe xt_conntrack
modprobe xt_mark
modprobe xt_set
modprobe iptable_filter

# 写入开机自启
cat > /etc/modules-load.d/k8s.conf <<EOF
overlay
br_netfilter
ipip
tunnel4
ip_tunnel
xt_conntrack
xt_mark
xt_set
iptable_filter
EOF

 

6. 系统文件句柄限制

cat >> /etc/security/limits.conf << EOF
root soft nofile 65535
root hard nofile 65535
root soft nproc 65535
root hard nproc 65535
* soft nofile 65535
* hard nofile 65535
* soft nproc 65535
* hard nproc 65535
EOF

 

7. 安装所有软件包

apt update && apt upgrade -y

  apt install -y curl wget openssl ca-certificates gnupg lsb-release openssh-server sshpass tar unzip ipset ipvsadm conntrack socat lvm2

 

8. 时间同步

apt install chrony -y
systemctl enable --now chronyd
timedatectl set-timezone Asia/Shanghai

 

9. Master 节点单独执行 SSH 免密分发

# master节点生成密钥
ssh-keygen -t ed25519 -N "" -f /root/.ssh/id_ed25519
# 分发公钥
sshpass ssh-copy-id root@172.29.128.1
sshpass ssh-copy-id root@172.29.132.68
sshpass ssh-copy-id root@172.29.132.69

# 验证免密连通
ssh root@172.29.128.1 hostname
ssh root@172.29.132.68 hostname
ssh root@172.29.132.69 hostname

 

10. 批量校验所有节点 SSH 连通性(最关键前置检查)

nodes=(172.29.128.1 172.29.132.68 172.29.132.69)
for ip in ${nodes[@]};
do
  echo "=== 测试 $ip SSH ==="
  sshpass -p "你的root密码" ssh -o ConnectTimeout=10 -o StrictHostKeyChecking=no root@$ip "hostname; echo 连接正常"
done

 

四、部署前强制校验步骤(执行完所有脚本后必须检查,避免 calico 崩溃)

1,全节点校验

# 1. 检查内核模块是否全部加载
lsmod | grep -E "ipip|xt_set|overlay|br_netfilter"

# 2. 检查sysctl参数是否生效
sysctl net.ipv4.conf.all.rp_filter net.ipv4.ip_forward

# 3. 确认无旧CNI残留
ls /etc/cni/net.d/

# 4. 内核开机模块配置查看
cat /etc/modules-load.d/k8s.conf

# 5. 检查swap彻底关闭
cat /etc/fstab | grep swap
free -h

 

2, master单独测试三台节点免ssh无密码登录

ssh root@172.29.128.1 hostname
ssh root@172.29.132.68 hostname
ssh root@172.29.132.69 hostname

  

五、Master 节点安装 Sealos v5.1.1

试过用二进制方式安装不了,改换下载离线包到本机,然后人本机copy到远程服务器。

下载地址:https://github.com/labring/sealos/releases/download/v5.1.1/sealos_5.1.1_linux_amd64.tar.gz

在本机打开 powershell 窗口,用scp命令拷贝到远程服务器,然后在服务器上执行安装:

#上传到服务器
scp D:/softs/k8s/sealos_5.1.1_linux_amd64.tar.gz root@121.40.63.235:/data/sealos-5 cd /data/sealos-5 # 解压 tar -zxvf sealos_5.1.1_linux_amd64.tar.gz # 赋予执行权限并全局放置 chmod +x sealos mv sealos /usr/local/bin/ # 验证版本 sealos version

 

六、拉镜像

1,查看已经下载的镜像

sealos images

 

2,删除指定镜像

sealos rmi -f 镜像名:标签

 

3.用sealos拉取五个镜像

1,拉取镜像

#从阿里云上海仓库拉取
sealos pull registry.cn-shanghai.aliyuncs.com/labring/kubernetes:v1.26.15
sealos pull registry.cn-shanghai.aliyuncs.com/labring/helm:v3.14.0
sealos pull registry.cn-shanghai.aliyuncs.com/labring/calico:v3.27.4
sealos pull registry.cn-shanghai.aliyuncs.com/labring/openebs:v3.4.0

#从渡渡鸟拉取
sealos pull swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/labring/kubesphere:v3.4.0
sealos pull swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/kubesphere/ks-installer:v3.4.1

 

 查看本地拉下来的镜像

sealos images

 

image

   

2,查看有哪些版本的镜像:

打开网站:https://explore.ggcr.dev
输入镜像完整地址:

registry.cn-shanghai.aliyuncs.com/labring/calico

 

3. 查看集群状态

kubectl get nodes

  

image

 

4. 查看pod状态

kubectl get pod -A

 

image

所有pod全部为Running,并且全部READY才算安装成功。

 

七,安装k8s  + kubespere (仅在第一个master节点执行)

1. 仅安装k8s v1.26.15

sealos run \
registry.cn-shanghai.aliyuncs.com/labring/kubernetes:v1.26.15 \
registry.cn-shanghai.aliyuncs.com/labring/calico:v3.27.4 \
--masters 172.29.128.1 \
--nodes 172.29.132.68,172.29.132.69 \
--user root \
--passwd 你的root密码

 

一次性安装k8s + kubesphere

sealos run \
registry.cn-shanghai.aliyuncs.com/labring/kubernetes:v1.26.15 \
registry.cn-shanghai.aliyuncs.com/labring/calico:v3.27.4 \
registry.cn-shanghai.aliyuncs.com/labring/openebs:v3.4.0 \
swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/labring/kubesphere:v3.4.0 \
--masters 172.29.128.1 \
--nodes 172.29.132.68,172.29.132.69 \
--user root \
--passwd yihan@123

 

避坑指南:

ubantu 24.4f用sealos安装 k8s,一定要用calico v3.27.0及以上的版,不然calico相关的pod拉不起来,因为calico自带的ipset内核比宿主机ipset内核版本低,ipset内核不兼容。

 

2. 单独安装 kubesphere v3.4.0

分两步:

第一步:安装本地存储

sealos run registry.cn-shanghai.aliyuncs.com/labring/openebs:v3.4.0

 

等待部署完成,执行下面命令手动标记为默认存储类(关键!openebs 安装后不会自动设 default)

kubectl patch storageclass openebs-localpv -p '{"metadata":{"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}'

 

注意:如果存储默认是default,就不用执行上面这一句了。

 

校验:kubectl get sc 看到名称带 (default) 再执行下一步

image

 

第二步:安装 kubesphere

sealos run swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/labring/kubesphere:v3.4.0

 

说明:

如果没安装openabs就直接执行安装kubesphere,会安装失败,那么就把ks-installer-xxxx 镜像删除,它就会自动重新安装kubesphere

image

 

kubectl delete pod ks-installer-758d459599-5nv9t -n kubesphere-system

 

实时查看安装日志

kubectl logs -n kubesphere-system ks-installer-758d459599-5nv9t -f

 

image

 

如果开放了外网端口,可以直接访问 http://公网ip:30880

帐号:admin

密码:P@88w0rd

image

 

八,卸载整个集群

1. 一键重置集群(主节点执行,自动清理所有 master+node)

sealos reset --force

 

2. 手动清理残留文件(reset 执行后补充,所有节点执行)

# 停止k8s服务
systemctl stop kubelet containerd
systemctl disable kubelet containerd
# 删除集群数据
rm -rf /etc/kubernetes /var/lib/kubelet /var/lib/etcd /var/lib/containerd /var/lib/sealos /root/.kube /etc/containerd;rm -f /etc/sysctl.d/k8s.conf

 

3. 单独删除集群某个节点(不销毁整个集群)

# 删除worker节点,逗号分隔多IP
sealos delete --nodes 172.29.128.2,172.29.128.3 --force
# 删除master控制节点(高可用慎用,etcd必须奇数)
sealos delete --masters 172.29.128.1 --force

 

posted @ 2026-07-20 18:06  民工黑猫  阅读(5)  评论(0)    收藏  举报