实战-Sealos一键部署k8s集群-2024.3.7(测试成功)


实战-Sealos一键部署k8s集群-2024.3.7(测试成功)

image-20240306214140401

目录

[toc]

原文链接

https://onedayxyy.cn/docs/Sealos-install-k8s

image-20240307113359743

推荐文章

我的开源项目:

https://onedayxyy.cn/docs/MyOpenSourceProject

image-20240305125631154

实验环境

centos7.6 1810,5.4.270-1.el7.elrepo.x86_64

sealos v5.0.0-beta4

k8s v1.28.7  (当前时间:2024年3月7日 k8s最新版本为v1.29.2)
helm:v3.9.4
cilium:v1.14.7

实验软件

无。

Sealos 简介

​ 在对容器运行时和 K8s 有了一个整体上的认识后,接下来我们就需要来搭建一个 K8s 集群了,搭建 K8s 的方式方法有很多,主要有二进制和 Kubeadm(容器)两种方式,对于初学者来说不建议使用二进制方式搭建,因为二进制方式搭建 K8s 集群需要手动安装各种组件,而且还需要手动配置各种组件,非常麻烦,而且容易出错。

​ 更推荐大家使用 Kubeadm 快速搭建一套集群起来,先用起来,等熟悉了之后再去了解各个组件的原理和配置。

​ 另外,还有一种方式是使用 Kind 工具来搭建集群,Kind 是一个用于在 Docker 容器中运行本地 Kubernetes 集群的工具,它使用 Docker 容器作为节点,这样就可以在本地快速搭建一个 K8s 集群,非常适合用于本地开发和测试。

​ 前面四期我们都是重点讲解的使用 Kubeadm 来搭建 K8s 集群,这一期我们讲使用一个更方便快捷的工具 Sealos 来搭建 K8s 集群,Sealos 是一个基于 Kubeadm 的 K8s 一键安装工具,它可以帮助我们快速搭建一个 K8s 集群,而且还可以帮我们自动安装一些常用的插件,甚至要搭建一个高可用的集群也是非常方便的。

Sealos官方文档:

https://sealos.run/docs/Intro

image-20240306214417478

Sealos 是一款以 Kubernetes 为内核的云操作系统发行版。它以云原生的方式,抛弃了传统的云计算架构,转向以 Kubernetes 为云内核的新架构,使企业能够像使用个人电脑一样简单地使用云。

用户将可以像使用个人电脑一样在 Kubernetes 上一键安装任意高可用分布式应用,几乎不需要任何专业的交付和运维成本。同时,利用独特的集群镜像能力,用户可将任意分布式应用打包成 OCI 镜像,自由组合各种分布式应用,轻松订制所需的云。通过强大且灵活的应用商店功能,可满足各类用户的多样化需求。

img

另外 Sealos 也提供了一套强大的工具,可以让我们便利地管理整个 Kubernetes 集群的生命周期。使用 Sealos,可以安装一个不包含任何组件的裸 Kubernetes 集群。此外,Sealos 还可以在 Kubernetes 之上,通过集群镜像能力组装各种上层分布式应用,如数据库、消息队列等。Sealos 不仅可以安装一个单节点的 Kubernetes 开发环境,还能构建数千节点的生产高可用集群。

Sealos 具有自由伸缩集群、备份恢复、释放集群等功能,即使在离线环境中,Sealos 也能提供出色的 Kubernetes 运行体验。

1、环境准备

这里我们将提供 3 个节点,都是 CentOS Linux release 7.6.1810 系统,内核版本:5.4.270-1.el7.elrepo.x86_64

🚩 以下是一些基本的安装要求:

  • 每个集群节点应该有不同的主机名。主机名不要带下划线。
  • 所有节点的时间需要同步。
  • 需要在 K8s 集群的第一个 master 节点上运行 sealos run 命令,目前集群外的节点不支持集群安装。
  • 建议使用干净的操作系统来创建集群。不要自己装 Docker!
  • 支持大多数 Linux 发行版,例如:Ubuntu、CentOS、Rocky linux。
  • 支持 Docker Hub 中的所有 Kubernetes 版本。
  • 支持使用 Containerd 作为容器运行时。
  • 在公有云上安装请使用私有 IP。

开始配置:(==以下3个小步骤需要在3个节点都执行!==)

(1)配置域名解析

cat >> /etc/hosts << EOF
172.29.9.80 master
172.29.9.81 node1
172.29.9.82 node2
EOF

在每个节点上添加 hosts 信息:

节点的 hostname 必须使用标准的 DNS 命名,另外千万别用默认 localhost 的 hostname,会导致各种错误出现的。在 Kubernetes 项目里,机器的名字以及一切存储在 Etcd 中的 API 对象,都必须使用标准的 DNS 命名(RFC 1123)。可以使用命令 hostnamectl set-hostname xxx 来修改 hostname。

(2)配置防火墙等、关闭swap分区、时间服务;

systemctl stop firewalld && systemctl disable  firewalld
systemctl stop NetworkManager && systemctl disable  NetworkManager

setenforce 0
sed -i s/SELINUX=enforcing/SELINUX=disabled/ /etc/selinux/config



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


yum install chrony -y
systemctl enable chronyd --now
chronyc sources

(3)升级内核到最新版本

uname -a

# 载入公钥
rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
# 安装ELRepo
rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm


# 载入elrepo-kernel元数据
yum --disablerepo=\* --enablerepo=elrepo-kernel repolist
# 查看可用的rpm包
yum --disablerepo="*" --enablerepo="elrepo-kernel" list available
# 安装最新版本的lt kernel
yum --disablerepo=\* --enablerepo=elrepo-kernel install kernel-lt -y
#如果是安装指定版本
#yum --enablerepo=elrepo-kernel install kernel-lt-devel-5.4.225-1.el7.elrepo.x86_64 kernel-lt-5.4.225-1.el7.elrepo.x86_64 -y #注意包的个数

#yum install -y kernel-lt
if [ $? -eq 0 ];then
    grub2-set-default 0 && grub2-mkconfig -o /etc/grub2.cfg
    grubby --args="user_namespace.enable=1" --update-kernel="$(grubby --default-kernel)"
fi
echo 'Please reboot your system quick !!!'

reboot
uname -a

升级后当前内核版本:

Linux master 5.4.270-1.el7.elrepo.x86_64

升级前默认系统内核:

kernel-3.10.0-957.el7.x86_64

因为本次使用的CNI是cilium,因此对内核的版本要求会高些,这里需要先升级内核的。(一般是5以上就行)

具体内核升级脚本:

https://onedayxyy.cn/docs/linux-kernel-upgrade

image-20240307101658607

2、部署

只需要在master节点操作,node节点会通过master ssh自动操作的。

  • 首先我们需要在 master 节点下载 Sealos 命令行工具,我们可以通过运行命令来获取版本列表:

记得提前安装好jq工具:

yum install -y epel-release
yum install -y jq
curl --silent "https://api.github.com/repos/labring/sealos/releases" | jq -r '.[].tag_name'
  • 设置 VERSION 环境变量为 latest 版本号,或者将 VERSION 替换为您要安装的 Sealos 版本:
VERSION=`curl -s https://api.github.com/repos/labring/sealos/releases/latest | grep -oE '"tag_name": "[^"]+"' | head -n1 | cut -d'"' -f4`

本次这里使用如下方式:

VERSION=v5.0.0-beta4

这里我们使用的版本为 v5.0.0-beta4

  • 然后可以使用下面的命令自动下子二进制文件:
curl -sfL https://mirror.ghproxy.com/https://raw.githubusercontent.com/labring/sealos/main/scripts/install.sh | PROXY_PREFIX=https://mirror.ghproxy.com sh -s ${VERSION} labring/sealos

扩展:(本次可忽略)

由于我们这里是 Ubuntu 系统,还可以使用包管理工具安装:

$ 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
$ sealos version
SealosVersion:
  buildDate: "2023-10-30T16:19:05Z"
  compiler: gc
  gitCommit: f39b2339
  gitVersion: 4.3.7
  goVersion: go1.20.10
  platform: linux/amd64
  • 一键安装

要使用 Sealos 安装 Kubernetes 集群非常简单,只需要在 master 节点上运行 sealos run 命令,然后指定一些参数即可。比如我们这里安装一个 v1.27.10 版本的集群(v1.28.x 版本暂时有问题),并使用 Cilium 网络插件,然后指定 masternode 节点的 IP 地址,最后指定 ssh 的密码即可:

$ sealos run registry.cn-shanghai.aliyuncs.com/labring/kubernetes:v1.28.7 registry.cn-shanghai.aliyuncs.com/labring/helm:v3.9.4 registry.cn-shanghai.aliyuncs.com/labring/cilium:v1.14.7 \
     --masters 172.29.9.80 \
     --nodes 172.29.9.81,172.29.9.82 -p your_host_password
172.29.9.82:22	* The Kubelet was informed of the new secure connection details.
172.29.9.82:22	
172.29.9.82:22	Run 'kubectl get nodes' on the control-plane to see this node join the cluster.
172.29.9.82:22	
2024-03-07T09:36:09 info succeeded in joining 172.29.9.82:22 as worker
172.29.9.81:22	
172.29.9.81:22	This node has joined the cluster:
172.29.9.81:22	* Certificate signing request was sent to apiserver and a response was received.
172.29.9.81:22	* The Kubelet was informed of the new secure connection details.
172.29.9.81:22	
172.29.9.81:22	Run 'kubectl get nodes' on the control-plane to see this node join the cluster.
172.29.9.81:22	
2024-03-07T09:36:10 info succeeded in joining 172.29.9.81:22 as worker
2024-03-07T09:36:10 info start to sync lvscare static pod to node: 172.29.9.82:22 master: [172.29.9.80:6443]
2024-03-07T09:36:10 info start to sync lvscare static pod to node: 172.29.9.81:22 master: [172.29.9.80:6443]
172.29.9.81:22	2024-03-07T09:36:10 info generator lvscare static pod is success
172.29.9.82:22	2024-03-07T09:36:10 info generator lvscare static pod is success
2024-03-07T09:36:10 info Executing pipeline RunGuest in CreateProcessor.
ℹ️  Using Cilium version 1.14.7
🔮 Auto-detected cluster name: kubernetes
🔮 Auto-detected kube-proxy has been installed
2024-03-07T09:36:12 info succeeded in creating a new cluster, enjoy it!
2024-03-07T09:36:12 info 
      ___           ___           ___           ___       ___           ___
     /\  \         /\  \         /\  \         /\__\     /\  \         /\  \
    /::\  \       /::\  \       /::\  \       /:/  /    /::\  \       /::\  \
   /:/\ \  \     /:/\:\  \     /:/\:\  \     /:/  /    /:/\:\  \     /:/\ \  \
  _\:\~\ \  \   /::\~\:\  \   /::\~\:\  \   /:/  /    /:/  \:\  \   _\:\~\ \  \
 /\ \:\ \ \__\ /:/\:\ \:\__\ /:/\:\ \:\__\ /:/__/    /:/__/ \:\__\ /\ \:\ \ \__\
 \:\ \:\ \/__/ \:\~\:\ \/__/ \/__\:\/:/  / \:\  \    \:\  \ /:/  / \:\ \:\ \/__/
  \:\ \:\__\    \:\ \:\__\        \::/  /   \:\  \    \:\  /:/  /   \:\ \:\__\
   \:\/:/  /     \:\ \/__/        /:/  /     \:\  \    \:\/:/  /     \:\/:/  /
    \::/  /       \:\__\         /:/  /       \:\__\    \::/  /       \::/  /
     \/__/         \/__/         \/__/         \/__/     \/__/         \/__/

                  Website: https://www.sealos.io/
                  Address: github.com/labring/sealos
                  Version: 5.0.0-beta4-5c22d8aa

注意:

上面我们用到的集群镜像都可以在 cluster-image-docs 仓库里找到。

image-20240307102126818

image-20240307102157555

image-20240307102304292

3、验证

  • 安装完成后,我们可以使用 kubectl get nodes 命令来查看集群的节点信息:
[root@master ~]#kubectl get po -A
NAMESPACE     NAME                               READY   STATUS    RESTARTS      AGE
kube-system   cilium-5lcvs                       1/1     Running   0             47m
kube-system   cilium-m7wtk                       1/1     Running   0             47m
kube-system   cilium-mplk4                       1/1     Running   0             47m
kube-system   cilium-operator-64b8744fc5-llvgw   1/1     Running   1 (46m ago)   47m
kube-system   coredns-5dd5756b68-dq9rr           1/1     Running   0             47m
kube-system   coredns-5dd5756b68-dzsx8           1/1     Running   0             47m
kube-system   etcd-master                        1/1     Running   0             47m
kube-system   kube-apiserver-master              1/1     Running   0             47m
kube-system   kube-controller-manager-master     1/1     Running   0             47m
kube-system   kube-proxy-5pw7p                   1/1     Running   0             47m
kube-system   kube-proxy-6nkq8                   1/1     Running   0             47m
kube-system   kube-proxy-6qkmr                   1/1     Running   0             47m
kube-system   kube-scheduler-master              1/1     Running   0             47m
kube-system   kube-sealos-lvscare-node1          1/1     Running   0             46m
kube-system   kube-sealos-lvscare-node2          1/1     Running   0             46m
[root@master ~]#kubectl get node
NAME     STATUS   ROLES           AGE   VERSION
master   Ready    control-plane   47m   v1.28.7
node1    Ready    <none>          47m   v1.28.7
node2    Ready    <none>          47m   v1.28.7
[root@master ~]#

完成后,给当前虚机做一个快照。

4、扩展

  • 如果想要增加一个 master 节点,则可以使用如下所示的 sealos add 命令:
sealos add --masters 192.168.0.21,192.168.0.19
  • 如果要增加 node 节点,则使用 --nodes 参数即可:
sealos add --nodes 192.168.64.21,192.168.64.19
  • 同理要删除节点也是非常简单的,使用 sealos delete 命令即可。

  • 如果在安装过程中出现了任何问题也可以使用 sealos reset 命令来重置集群,然后重新安装。

这样我们就成功搭建了一个 K8s 集群,而且还安装了 Cilium 网络插件,非常方便快捷,包括容器运行时、内核参数优化等都是自动化的,非常适合新手使用。

image-20240307102519368

image-20240307102548960

  • 此外我们还可以安装各种分布式应用,比如使用下面的命令即可轻松在 K8s 集群上安装 openebs
sealos run registry.cn-shanghai.aliyuncs.com/labring/openebs:v3.9.0
  • 如果想要自定义安装配置,可以通过使用 sealos gen 命令生成一个 Clusterfile 文件,然后修改其中的配置,最后使用 sealos apply -f Clusterfile 命令来启动集群,例如:
sealos gen labring/kubernetes:v1.25.0 labring/helm:v3.8.2 labring/calico:v3.24.1 \
   --masters 192.168.0.2,192.168.0.3,192.168.0.4 \
   --nodes 192.168.0.5,192.168.0.6,192.168.0.7 --passwd 'xxx' > Clusterfile

注意:labring/helm 应当在 labring/calico 之前。

  • 然后可以参考官方文档或运行 kubeadm config print init-defaults 命令来打印 kubeadm 配置文件的默认值,然后修改 Clusterfile 文件中的配置,最后使用 sealos apply -f Clusterfile 命令来启动集群。

  • 如果你还想在集群中集成 sealos cloud 的服务, 那么这 master 节点直接知行下面的命令即可:

curl -sfL https://mirror.ghproxy.com/https://raw.githubusercontent.com/labring/sealos/main/scripts/cloud/install.sh -o /tmp/install.sh && bash /tmp/install.sh \
  --image-registry=registry.cn-shanghai.aliyuncs.com --zh \
  --proxy-prefix=https://mirror.ghproxy.com

默认情况下 sealos cloud 需要一个域名用于访问 Sealos 及相关服务,如果您没有域名,可以使用 nip.io 提供的免费域名服务。同样 sealos cloud 还需要使用证书来保证通信安全,默认在不提供证书的情况下会使用 cert-manager 来自动签发证书。如果可以提供证书,证书需要解析下列域名 (假设提供的域名为:cloud.example.io):

  • *.cloud.example.io
  • cloud.example.io

​ 我们这里没有公网域名,也不需要自定义域名,所以选择直接使用 nip.io 提供的免费域名服务。nip.io 是一个免费的通配符 DNS 服务,它可以将动态分配的 IP 地址映射到一个固定的子域名上,特别适合用于本地开发环境。具体的工作原理为:

​ 可以使用任何 IP 地址作为 nip.io 子域名的一部分,而 nip.io 会将它解析回相应的 IP 地址。例如,如果你有一个内网 IP 地址 192.168.1.10,你可以使用 192.168.1.10.nip.io 作为域名,所有向这个域名发送的请求都会被解析到 192.168.1.10 这个 IP 地址上。这样就无需修改本地 hosts 文件,也不需要搭建内网 DNS 服务,直接通过这个域名就能访问内网服务了。

​ 当执行上面命令需要输入 Sealos Cloud 域名时,你需要输入这种格式的域名:[ip].nip.io,其中 [ip] 是你的 Master 节点 IP。

​ 安装完成后,终端会输出 Sealos 访问域名以及用户名和密码,例如:

Sealos cloud login info:
Cloud Version: latest
URL: https://10.214.210.102.nip.io
admin Username: admin
admin Password: sealos2023

FAQ

其它版本

  • 老师文档版本
Ubuntu 22.04 系统,内核版本:`5.15.0-94-generic` v1.27.10 k8s集群

sealos run registry.cn-shanghai.aliyuncs.com/labring/kubernetes:v1.27.10 registry.cn-shanghai.aliyuncs.com/labring/helm:v3.9.4 registry.cn-shanghai.aliyuncs.com/labring/cilium:v1.13.4 \
     --masters 192.168.0.111 \
     --nodes 192.168.0.116,192.168.0.118 -p [your-ssh-passwd]
  • 老师实际测试版本(测试成功)
Ubuntu 22.04 系统,内核版本:`5.15.0-94-generic` v1.28.7 k8s集群

sealos run registry.cn-shanghai.aliyuncs.com/labring/kubernetes:v1.28.7 registry.cn-shanghai.aliyuncs.com/labring/helm:v3.9.4 registry.cn-shanghai.aliyuncs.com/labring/cilium:v1.14.7 \
     --masters 172.29.9.80 \
     --nodes 172.29.9.81,172.29.9.82 -p your_host_password
  • 自己测试版本(测试成功)
centos系统(CentOS Linux release 7.6.1810),内核版本:`5.4.270-1` Linux master 5.4.270-1.el7.elrepo.x86_64 v1.28.7 k8s集群

sealos run registry.cn-shanghai.aliyuncs.com/labring/kubernetes:v1.28.7 registry.cn-shanghai.aliyuncs.com/labring/helm:v3.9.4 registry.cn-shanghai.aliyuncs.com/labring/cilium:v1.14.7 \
     --masters 172.29.9.80 \
     --nodes 172.29.9.81,172.29.9.82 -p your_host_password

image-20240307100946988

查看集群镜像

https://sealos.run/docs/self-hosting/lifecycle-management/quick-start/deploy-kubernetes#%E6%9F%A5%E7%9C%8B%E9%9B%86%E7%BE%A4%E9%95%9C%E5%83%8F

image-20240307112207452

集群镜像版本支持说明

https://sealos.run/docs/self-hosting/lifecycle-management/quick-start/deploy-kubernetes#%E9%9B%86%E7%BE%A4%E9%95%9C%E5%83%8F%E7%89%88%E6%9C%AC%E6%94%AF%E6%8C%81%E8%AF%B4%E6%98%8E

image-20240307112253933

Sealos 集群镜像构建

https://sealos.run/docs/self-hosting/lifecycle-management/operations/build-image/

image-20240307112411099

LVScare 使用指南

https://sealos.run/docs/self-hosting/lifecycle-management/reference/lvscare/

image-20240307112517135

image-20240307112553701

离线安装 K8s

https://sealos.run/docs/self-hosting/lifecycle-management/quick-start/deploy-kubernetes#%E7%A6%BB%E7%BA%BF%E5%AE%89%E8%A3%85-k8s

image-20240307112635218

本地仓库

image-20240307112917334

[root@master ~]#cat /etc/containerd/config.toml

image-20240307113028881

关于我

我的博客主旨:

  • 排版美观,语言精炼;
  • 文档即手册,步骤明细,拒绝埋坑,提供源码;
  • 本人实战文档都是亲测成功的,各位小伙伴在实际操作过程中如有什么疑问,可随时联系本人帮您解决问题,让我们一起进步!

🍀 微信二维码

x2675263825 (舍得), qq:2675263825。

image-20230107215114763

🍀 微信公众号

《云原生架构师实战》

image-20230107215126971

🍀 个人博客站点

https://onedayxyy.cn/

🍀 语雀

https://www.yuque.com/xyy-onlyone

🍀 csdn

https://blog.csdn.net/weixin_39246554?spm=1010.2135.3001.5421

image-20230107215149885

🍀 知乎

https://www.zhihu.com/people/foryouone

image-20230107215203185

最后

好了,关于本次就到这里了,感谢大家阅读,最后祝大家生活快乐,每天都过的有意义哦,我们下期见!


文章作者: hg
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 hg !
  目录