最丝滑的k8s部署工具Sealos,你说香不香?

本文详细介绍了Sealos,一个用于简单快速部署Kubernetes集群的工具,强调其离线安装、高可用性和广泛兼容性。内容涵盖Sealos的优势、参数说明、安装步骤、注意事项及常见操作。通过Sealos,用户可以轻松实现集群节点的增删,并提供了离线资源包的下载链接。此外,文章还涉及了安装前的系统配置,如防火墙、时间同步、内核参数调整等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

江湖传言 sealos是最丝滑的k8s集群部署工具,没错像德芙一般丝滑。而版本不要太全,生产环境中稳如老狗!
在这里插入图片描述

我们怎么能不知道它呢?今晚由我来给大家分析一个关于sealos 丝滑部署k8s集群的知识点。我的小伙伴儿们,开始吧!

1.什么是 Sealos ?

Sealos 是一个 Go 语言开发的简单干净且轻量的 Kubernetes 集群部署工具,Sealos 能很好的支持在生产环境中部署高可用的 Kubernetes 集群。

2.Sealos 优势:

100年证书 版本超全
不依赖ansible haproxy keepalived, 一个二进制工具,零依赖
离线安装,不同kubernetes版本下载对应不同版本的资源包,离线包包含所有二进制文件配置文件和镜像
高可用默认通过ipvs实现的localLB,占用资源少,稳定可靠。
几乎可兼容所有支持systemd的x86_64架构的环境
轻松实现集群节点的增加/删除
上千用户群线上环境使用sealos,资源包放在阿里云oss上,无需担心网速问题
dashboard ingress prometheus等APP同样离线打包,一键安装
在这里插入图片描述

官网地址: 
https://sealyun.com/ 

企业级应用的集群离线包需要付费,我们只是学习,使用作者提供的免费离线包:
http://store.lameleg.com/
官网中文安装手册: https://github.com/fanux/sealos
可以下载sealos不同版本的二进制文件 
https://github.com/fanux/sealos/releases

3.Sealos 常用参数说明

--master Master 节点服务器地址列表 
--node Node 节点服务器地址列表 
--user 服务器 SSH 用户名 
--passwd 服务器 SSH 用户密码 
--pkg-url 离线包所在位置,可以是本地目录,也可以是一个 HTTP 地址 
--version 指定需要部署的 Kubernetes 版本 
--pk 指定 SSH 私钥所在位置,默认为 /root/.ssh/id_rsa 


Other flags: 

  --kubeadm-config string kubeadm-config.yaml 用于指定自定义 kubeadm 配置文件 
  --vip string virtual ip (default "10.103.97.2") 本地负载时虚拟 IP ,不推荐修改,集群外不可访问

4.安装注意事项:

高版本离线包自带docker,如没安装docker会自动安装。所以说需要纯净的系统
下载kubernetes 离线安装包.
尽量使用新版本sealos 用新不用旧
务必同步服务器时间
主机名不可重复
master节点CPU必须2C以上
cni组件选择cilium时要求内核版本不低于5.4
podSubnet: 100.64.0.0/10
serviceSubnet: 10.96.0.0/12

5.下载离线资源包

此处提供两个生产环境中常用版本1.22与1.20版本下载路径

下载离线资源包

wget -c https://sealyun.oss-cn-beijing.aliyuncs.com/05a3db657821277f5f3b92d834bbaf98-v1.22.0/kube1.22.0.tar.gz
或
wget -c https://sealyun.oss-cn-beijing.aliyuncs.com/2fb10b1396f8c6674355fcc14a8cda7c-v1.20.0/kube1.20.0.tar.gz

例如安装一个三master的kubernetes集群:

# 如已设ssh免密登录可以不需要--passwd参数
# --podcidr 配置pod网段
# --svccidr 配置clusterip网段
# --network  机器网卡名,CNI网卡发现用

如下例所示:
sealos init --master 192.168.32.200 --master 192.168.32.202 --node 192.168.32.221 --pkg-url /root/kube1.22.7.tar.gz --version v1.22.7 --podcidr 10.244.0.0/16 --svccidr 10.93.0.0/12

pod的ip地址段,也称为cidr
# podcidr 参数指定自定义pod网段 如 
--podcidr 10.244.0.0/16 \
# svccidr 参数指定clusterip网段 如 
--svccidr 10.93.0.0/12 \
# 不安装cni插件
## without-cni sealos自带calico网络,如果你想自己装CNI不用默认可加此参数, 如 
sealos init --without-cni …
# 自定义cni插件
-- network flannel

sealos部署k8s集群:
服务器部署ip布局
在这里插入图片描述

1 设置防火墙为 Iptables 并设置空规则
【所有节点都执行】

systemctl stop firewalld
systemctl disable firewalld
yum -y install iptables-services ipvsadm ; systemctl start iptables ; systemctl  enable iptables ; iptables -F ; service iptables save

关闭selinux
【所有节点都执行】

# setenforce 0
# vim /etc/selinux/config
    修改SELINUX=enforcing 为 SELINUX=disabled

2 配置主机名
【所有节点都执行】

hostnamectl set-hostname 主机名
cat > /etc/hosts <<-'EOF'
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.5.151 k8s-master1
192.168.5.152 k8s-master2
192.168.5.153 k8s-master3
192.168.5.154 k8s-node1
192.168.5.155 k8s-node2
EOF

6 配置时间同步

【所有节点都执行】
选择一个节点作为服务端,剩下的作为客户端
master1为时间服务器的服务端
其他的为时间服务器的客户端
1)配置k8s-master1

# yum install chrony -y
# vi /etc/chrony.conf
修改三项
server 127.127.1.0 iburst
allow 192.168.5.0/24
local stratum 10

# systemctl start chronyd
# systemctl enable chronyd
# ss -unl | grep 123
UNCONN     0      0            *:123                      *:*

配置其他节点

# yum install chrony -y
# vi /etc/chrony.conf
server 192.168.5.151 iburst

# systemctl start chronyd
# systemctl enable chronyd
# chronyc sources
	210 Number of sources = 1
	MS Name/IP address         Stratum Poll Reach LastRx Last sample   
	===============================================================================
	^* k8s-master1                  10   6    17     4    +11us[  +79us] +/-   95us

7.关闭swap交换分区,所有节点都执行

chronyc sources
chronyc -a makestep

swapoff -a
sed -ri 's/.*swap.*/#&/' /etc/fstab

8、调整内核参数

【所有节点都执行】

cat > kubernetes.conf <<EOF
net.bridge.bridge-nf-call-iptables=1
net.bridge.bridge-nf-call-ip6tables=1
net.ipv4.ip_forward=1
net.ipv4.tcp_tw_recycle=0
fs.inotify.max_user_instances=8192
fs.inotify.max_user_watches=1048576
fs.file-max=52706963
fs.nr_open=52706963
net.ipv6.conf.all.disable_ipv6=1
EOF

cp kubernetes.conf /etc/sysctl.d/kubernetes.conf
sysctl -p /etc/sysctl.d/kubernetes.conf

出现报错不用担心,因为没开通网桥我们后面会开通
关闭系统不需要服务,并升级systemd
yum -y upgrade systemd #通过 centos 更新 systemd因为我的比较旧
systemctl stop postfix && systemctl disable postfix

9、设置 rsyslogd 和 systemd journald

【所有节点都执行】

mkdir /var/log/journal # 持久化保存日志的目录
mkdir /etc/systemd/journald.conf.d
cat > /etc/systemd/journald.conf.d/99-prophet.conf <<EOF
[Journal]
# 持久化保存到磁盘
Storage=persistent

# 压缩历史日志
Compress=yes

SyncIntervalSec=5m
RateLimitInterval=30s
RateLimitBurst=1000

# 最大占用空间 10G
SystemMaxUse=10G

# 单日志文件最大 200M
SystemMaxFileSize=200M

# 日志保存时间 2 周
MaxRetentionSec=2week

# 不将日志转发到 syslog
ForwardToSyslog=no
EOF

systemctl restart systemd-journald

10、升级系统内核

【所有节点都执行】
CentOS 7.x 系统自带的 3.10.x 内核存在一些 Bugs,导致运行的 Docker、Kubernetes 不稳定,
例如: rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-3.el7.elrepo.noarch.rpm
我已经下载到百度网盘:
链接:https://pan.baidu.com/s/1kQ48A-St03MzY2BWakad0Q
提取码:pwcq
如下所示:

rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-3.el7.elrepo.noarch.rpm
yum --enablerepo=elrepo-kernel install -y kernel-lt
grep initrd16 /boot/grub2/grub.cfg
grub2-set-default 0

reboot

11、kube-proxy开启ipvs的前置条件

【所有节点都执行】

modprobe br_netfilter

cat > /etc/sysconfig/modules/ipvs.modules <<EOF
#!/bin/bash
modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
modprobe -- nf_conntrack
EOF

chmod 755 /etc/sysconfig/modules/ipvs.modules && bash /etc/sysconfig/modules/ipvs.modules && lsmod | grep -e ip_vs -e nf_conntrack

12.Kubernetes安装

前提条件
下载kubernetes 离线安装包.
下载sealos
第一步,下载sealos最新版和kubernetes离线安装包
本次下载sealos版本为v3.3.9-rc.10,kubernetes版本为1.22.0
我的百度网盘:
链接:https://pan.baidu.com/s/16T3Xo1jw8okOdK9bBMsXew
提取码:thu7

wget -c https://sealyun.oss-cn-beijing.aliyuncs.com/latest/sealos
wget -c https://sealyun.oss-cn-beijing.aliyuncs.com/05a3db657821277f5f3b92d834bbaf98-v1.22.0/kube1.22.0.tar.gz

第二步,安装sealos工具

chmod +x sealos && mv sealos /usr/bin

第三步,安装高可用kubernetes
多master HA:
没有配置秘钥级信任,执行如下命令。

sealos init --passwd '123.com' \
    --master 192.168.5.151 --master 192.168.5.152 --master 192.168.5.153 \
    --node 192.168.5.154 \
    --pkg-url /root/kube1.22.0.tar.gz \
    --version v1.22.0

常用选项如下例如下:

sealos init \
    --master 192.168.0.2 \
    --master 192.168.0.3 \
    --master 192.168.0.4 \          # master地址列表
    --node 192.168.0.5 \            # node地址列表
    --user root \                   # 服务用户名
    --passwd your-server-password \ # 服务器密码,用于远程执行命令
    --pkg kube1.14.1.tar.gz  \      # 离线安装包名称
    --version v1.14.1               # kubernetes 离线安装包版本,这渲染kubeadm配置时需要使用

注意:预先配置好ssh秘钥信任关系 可以通过如下命令完成。

sealos init --master 192.168.5.150 --master 192.168.5.151 --master 192.168.5.152 --node 192.168.5.153 --node 192.168.5.154 --version v1.22.0 --pkg-url /root/kube1.22.0.tar.gz

如果密钥对有密码,则需要添加–pk-passwd password

sealos init \
	--pk-passwd '123456' \
	--master 10.0.19.127 \
    --master 10.0.19.128 \
    --master 10.0.19.129 \
    --node 10.0.19.130 \
    --node 10.0.19.131 \
    --version v1.22.0 \
    --pkg-url /root/kube1.22.0.tar.gz

自定义ssh端口号,如55:

sealos init --passwd '123456' --master 10.0.19.127:55 \
    --master 10.0.19.128:55 \
    --master 10.0.19.129:55 \
    --node 10.0.19.130:55 \
    --node 10.0.19.131:55 \
    --version v1.22.0 \
    --pkg-url /root/kube1.22.0.tar.gz

验证集群是否升级成功

[root@k8s-master1 ~]# kubectl get node
NAME          STATUS   ROLES                  AGE   VERSION
k8s-master1   Ready    control-plane,master   14m   v1.22.0
k8s-master2   Ready    control-plane,master   13m   v1.22.0
k8s-master3   Ready    control-plane,master   13m   v1.22.0
k8s-node1     Ready    <none>                 12m   v1.22.0
k8s-node2     Ready    <none>                 12m   v1.22.0

修改Cgroup Driver

修改/etc/docker/daemon.json,新增:

"exec-opts": ["native.cgroupdriver=systemd"] 

重启docker服务:
systemctl daemon-reload 
systemctl restart docker 

查看修改后状态: 
docker info | grep Cgroup

kubectl命令自动补全
sealos默认已经帮我们安装命令补全功能。

echo "source <(kubectl completion bash)" >> ~/.bash_profile 
source ~/.bash_profile

master节点操作
增加master

sealos join --master 192.168.198.127 --master 192.168.198.128 

或者多个连续IP 
sealos join --master 192.168.198.127-192.168.198.128

删除指定master节点

sealos clean --master 192.168.198.122 --master 192.168.198.123 

或者多个连续IP 
sealos clean --master 192.168.198.122-192.168.198.123

node节点操作
增加node

sealos join --node 192.168.198.127 --node 192.168.198.128 

或者多个连续IP 
sealos join --node 192.168.198.127-192.168.198.128

删除指定node节点

sealos clean --node 192.168.198.125 --node 192.168.198.126 

或者多个连续IP
sealos clean --node 192.168.198.125-192.168.198.126

清理集群

sealos clean --all -f

安装日志
安装日志所在位置~/.sealos/sealos.log

13.kuboard

使用 hostPath 提供持久化

$ kubectl apply -f https://addons.kuboard.cn/kuboard/kuboard-v3.yaml
# 您也可以使用下面的指令,唯一的区别是,该指令使用华为云的镜像仓库替代 docker hub 分发 Kuboard 所需要的镜像
# kubectl apply -f https://addons.kuboard.cn/kuboard/kuboard-v3-swr.yaml

$ watch kubectl get pods -n kuboard
# 执行指令 watch kubectl get pods -n kuboard,等待 kuboard 名称空间中所有的 Pod 就绪,如下所示,
# 如果结果中没有出现 kuboard-etcd-xxxxx 的容器,请查看  中关于 缺少 Master Role 的描述。

[root@node1 ~]# kubectl get pods -n kuboard
NAME                               READY   STATUS    RESTARTS   AGE
kuboard-agent-2-65bc84c86c-r7tc4   1/1     Running   2          28s
kuboard-agent-78d594567-cgfp4      1/1     Running   2          28s
kuboard-etcd-fh9rp                 1/1     Running   0          67s
kuboard-etcd-nrtkr                 1/1     Running   0          67s
kuboard-etcd-ader3                 1/1     Running   0          67s
kuboard-v3-645bdffbf6-sbdxb        1/1     Running   0          67s

访问 Kuboard

在浏览器中打开链接 http://服务器ip:30080
输入初始用户名和密码,并登录
用户名: admin
密码: Kuboard123

配置并访问nginx
首先要创建 IngressClass

进入集群
集群管理->网络->IngressClass
安装 IngressNginxController 并创建 IngressClass
输入名称 ingress-nginx

创建 nginx pod

进入default名称空间
选择应用程序->工作负载->创建部署

参考资料
https://blog.csdn.net/quejingshi/article/details/124298442

参考视频

【Kubernetes面试】大厂面试必问的K8s面试题,听完这一套的都进大厂啦!

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值