说明
官网地址: https://sealyun.com
Sealos 以云原生的方式,抛弃了传统的云计算架构,转向以 Kubernetes 为云内核的新架构,实现一个开源的、可随处运行的 AWS 替代方案
具体使用方式请参考官网文档
我这里介绍一些使用sealos安装k8s集群的一些定制化操作和小技巧
1. 下载sealos
1.1 二进制下载安装sealos
1 2 wget https://github.com/labring/sealos/releases/download/v4.2.0/sealos_4.2.0_linux_amd64.tar.gz \ && tar zxvf sealos_4.2.0_linux_amd64.tar.gz sealos && chmod +x sealos && mv sealos /usr/bin
1 2 wget https://github.com/labring/sealos/releases/download/v4.2.0/sealos_4.2.0_linux_arm64.tar.gz \ && tar zxvf sealos_4.2.0_linux_arm64.tar.gz sealos && chmod +x sealos && mv sealos /usr/bin
1.2 包管理器安装sealos
1 2 3 4 5 6 7 8 9 sudo cat > /etc/yum.repos.d/labring.repo << EOF [fury] name=labring Yum Repo baseurl=https://yum.fury.io/labring/ enabled=1 gpgcheck=0 EOF sudo yum clean all sudo yum install sealos
1 2 3 echo "deb [trusted=yes] https://apt.fury.io/labring/ /" | sudo tee /etc/apt/sources.list.d/labring.list sudo apt update sudo apt install sealos
1.3 源码编译安装sealos
前置依赖
git
golang 1.19+
libgpgme-dev libbtrfs-dev libdevmapper-dev
如果在 arm64 环境下需要添加 :arm64 后缀。
构建
1 2 3 4 git clone https://github.com/labring/sealos.git make build BINS=sealos
2. 安装k8s集群
2.1 一键安装
2.1.1 单机一键安装
单机安装 Kuberentes
1 2 sealos run labring/kubernetes:v1.25.0 labring/helm:v3.8.2 labring/calico:v3.24.1 --single
kubernetes
版本为containerd
版本,可选kubernetes-docker
、kubernetes-crio
等版本
calico
请选择与k8s版本对应的版本,否则会出现calico
网络问题
helm
请务必安装,因为安装calico
需要用到helm
安装crd
资源
--single
表示单机安装,如果不加--single
则默认为高可用安装
2.1.2 高可用一键安装
1 2 3 sealos run labring/kubernetes:v1.25.0 labring/helm:v3.8.2 labring/calico:v3.24.1 \ --masters 192.168.64.2,192.168.64.22,192.168.64.20 \ --nodes 192.168.64.21,192.168.64.19 -p [your-ssh-passwd]
--masters
表示master节点的ip地址,多个ip地址用,
分割,--nodes
同理
不设置主机名的情况下,默认主机名为IP地址,请在部署前设置好主机名
-p
表示ssh密码
2.1.3 增加节点
1 2 sealos add --masters 192.168.64.21,192.168.64.19 sealos add --nodes 192.168.64.21,192.168.64.19
2.1.4 删除节点
1 2 sealos delete --masters 192.168.64.21,192.168.64.19 sealos delete --nodes 192.168.64.21,192.168.64.19
2.1.5 清理重置集群
安装过程中如果出现问题,可以使用sealos reset
命令清理集群,然后重新安装
3. 定制化安装
3.1 跨网段安装
你可以会遇到所用的服务器非同一个内网环境
,比如阿里云
的服务器、腾讯云
的服务器和华为云
的服务器需要组建成一个k8s集群
服务器不在同一个地域
,masterA在上海
,masterB在北京
,nodeA在上海,nodeB在北京等情况
服务器的操作系统不一
,腾讯云默认是OpenCloudOS
,阿里使用AlmaLinux
,华为云使用EulerOS
需要使用tinc
、WireGuard
、ZeroTier
、SoftEther
、OpenVPN
等工具组建虚拟局域网
,这里推荐使用tinc
和WireGuard
请将内核
升级到5.4.240
(x86_64)以上,或者一些适配k8s环境的内核版本
sealos
跨网络安装时复制文件
是特别慢的,请看我下一部分的介绍
这里的思路就是将所有的服务器都加入到同一个虚拟局域网
,然后sealos
就可以在这个虚拟局域网中复制文件
tinc
等工具配置网络名称请配置为eth0
、ens33
等网卡名称,比如腾讯云默认内网网卡名称为eth0
,你就将虚拟网卡名称配置为ens33
以下是内核升级的参考方法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 <!--------------------升级内核 --------------------> rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org -y yum install https://www.elrepo.org/elrepo-release-8.el8.elrepo.noarch.rpm -y sed -i 's|mirrorlist=|#mirrorlist=|g; s|elrepo.org/linux|mirrors.aliyun.com/elrepo|g' /etc/yum.repos.d/elrepo.repo sudo yum makecache yum --disablerepo="*" --enablerepo="elrepo-kernel" list available --showduplicates yum --enablerepo=elrepo-kernel install kernel-lt -y grub2-set-default 0echo "net.core.default_qdisc=fq" >> /etc/sysctl.confecho "net.ipv4.tcp_congestion_control=bbr" >> /etc/sysctl.conf sysctl -p
3.2 离线安装
sealos提供了下面命令用来打包和加载镜像的命令
1 2 3 sealos pull labring/kubernetes:v1.25.0 sealos save -o kubernetes.tar labring/kubernetes:v1.25.0 sealos load -i kubernetes.tar
你可以使用sealos save
命令将镜像打包为tar包,然后将tar包拷贝到离线环境
中,使用sealos load
命令加载镜像
然后通过sealos run kuberentes:v1.25.0
之类的命令安装k8s集群,跟线上一样
sealos
的k8s等镜像
是制作好了的,把所有k8s相关需要用到的镜像和文件
都打包好了放在里面
的,所以安装的时候不需要联网
3.2.1 解决安装过程中复制文件长达几个小时的问题
sealos
第一台执行命令的机器会把k8s相关的文件
解压到/var/lib/sealos
目录下,然后根据节点类别复制到其他机器
上,如果是跨网段安装
,那么复制文件的速度会很慢
,走得是公网网络
第一台sealos
会成为默认的镜像仓库
,其他机器会从这台机器上拉取镜像
,跨网络其过程也会很慢
,甚至出错
解决方案:
在本地部署sealos
分别把master
的/var/lib/sealos
目录和node
的/var/lib/sealos
目录打包成tar包
解压到线上的/var/lib/sealos
目录下,这样就可以跳过长时间的文件复制过程
将本地sealos
的生成的k8s相关镜像,包括coredns
、pause
、kube-proxy
、kube-scheduler
、kube-controller-manager
、kube-apiserver
、kubelet
、etcd
、kube-proxy
、helm
、calico
、metrics-server
等镜像打包成tar包
加载到线上环境,不过这一步需要卡好时间,需要在sealos
开始初始集群前进行load -i
的操作
用这种方法将为你节省大量的时间,当然时间充裕可以慢慢等
3.2.2 自定义calico网络所用的网卡
calico
默认使用eth0
作为网卡
,如果是跨网段安装,肯定是不行的,因为我们想让流量走虚拟内网
,所以需要修改calico
的配置
创建Clusterfile
文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 apiVersion: apps.sealos.io/v1beta1 kind: Cluster metadata: name: default spec: hosts: - ips: - 192.168 .0 .2 :22 - 192.168 .0 .3 :22 - 192.168 .0 .4 :22 roles: - master - amd64 - ips: - 192.168 .0 .5 :22 - 192.168 .0 .6 :22 - 192.168 .0 .7 :22 roles: - node - amd64 image: - labring/kubernetes:v1.25.0 - labring/helm:v3.8.2 - labring/calico:v3.24.1 ssh: passwd: xxx pk: /root/.ssh/id_rsa port: 22 user: root status: {}--- apiVersion: apps.sealos.io/v1beta1 kind: Config metadata: name: calico spec: path: charts/calico/values.yaml strategy: merge data: | installation: enabled: true kubernetesProvider: "" calicoNetwork: ipPools: - blockSize: 26 cidr: 10.160.0.0/12 encapsulation: IPIP natOutgoing: Enabled nodeSelector: all() nodeAddressAutodetectionV4: interface: "eth.*|en.*" # 这里修改为你的网卡
3.2.3 自定义k8s安装内容
自定义registry
、k8s
、helm
、calico
、metrics-server
等镜像的方法
创建Kubefile
文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 FROM scratch MAINTAINER sealyun LABEL init="init.sh \$criData \$registryDomain \$registryPort \$registryUsername \$registryPassword" LABEL version="v1.24.0" LABEL image="" LABEL clean="clean.sh \$criData" LABEL check="check.sh" LABEL init-registry="init-registry.sh \$registryPort \$registryData \$registryConfig" LABEL clean-registry="clean-registry.sh \$registryData \$registryConfig" LABEL auth="auth.sh" ENV criData=/var/lib/containerd ENV registryData=/var/lib/registry ENV registryConfig=/etc/registry ENV registryDomain=sealos.hub ENV registryPort=5000 ENV registryUsername=admin ENV registryPassword=passw0rd COPY . .
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 FROM scratch MAINTAINER sealyun LABEL init="init.sh" LABEL version="v1.24.0" LABEL image="__lvscare__" LABEL clean="clean.sh \$criData \$criDockerdData" LABEL check="check.sh \$registryData" LABEL init-registry="init-registry.sh \$registryData \$registryConfig" LABEL clean-registry="clean-registry.sh \$registryData \$registryConfig" LABEL auth="auth.sh \$registryDomain \$registryPort \$registryUsername \$registryPassword" LABEL sealos.io.type="rootfs" ENV criData=/var/lib/docker ENV criDockerdData=/var/lib/cri-dockerd ENV registryData=/var/lib/registry ENV registryConfig=/etc/registry ENV registryDomain=sealos.hub ENV registryPort=5000 ENV registryUsername=admin ENV registryPassword=passw0rd COPY . . sealos build -t docker.io/labring/kubernetes-docker:v1.24.0 .
这样就制作出了自己的镜像,然后在Clusterfile
文件中指定镜像名称,然后进行安装即可
4. 常见问题
4.1. 大量5000端口占用
BUG: image-cri-shim导致端口大量占用,耗尽服务器socket资源
该现象存在于一些旧版本的sealos
中,在v4.2.0
版本已经修复
解决办法:
1 2 3 4 5 wget https://github.com/labring/sealos/releases/download/v4.2.0/sealos_4.2.0_linux_amd64.tar.gz && tar xvf sealos_4.2.0_linux_amd64.tar.gz image-cri-shim sealos exec -r master,node "systemctl stop image-cri-shim" sealos scp "./image-cri-shim" "/usr/bin/image-cri-shim" sealos exec -r master,node "systemctl start image-cri-shim" sealos exec -r master,node "image-cri-shim -v"
4.2. sealos拉取的k8s、helm、calico镜像无法使用
sealos
的镜像不是传统的docker
镜像,不要使用docker run
去运行 也不要尝试使用docker load -i
去加载这些镜像
请正确使用sealos
提供的sealos run
sealos load -i
命令去加载运行这些镜像
同样普通的calico
镜像也不要使用sealos
去加载,因为sealos
的calico
镜像是经过修改的,不是原生的calico
镜像
4.3. sealos如何升级
使用下面的命令升级即可
1 2 curl -sfL https://raw.githubusercontent.com/labring/sealos/v4.2.0/scripts/install.sh \ | sh -s v4.2.0 labring/sealos
觉得github下载慢的可以使用wget https://ghproxy.com/https://raw.githubusercontent.com/labring/sealos/v4.2.0/scripts/install.sh
下载sh脚本
后
vi install.sh
将github.com
替换为ghproxy.com/github.com
即可