目录

[toc]

原文链接

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

推荐文章

我的开源项目:

开源项目 | 彦

实验环境

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官方文档:

什么是 Sealos? | Sealos: 专为云原生开发打造的以 K8s 为内核的云操作系统

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

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

另外 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以上就行)

具体内核升级脚本:

实战-centos7升级内核(yum方式)-2023.1.5(测试成功) | 彦

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 仓库里找到。

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 网络插件,非常方便快捷,包括容器运行时、内核参数优化等都是自动化的,非常适合新手使用。

  • 此外我们还可以安装各种分布式应用,比如使用下面的命令即可轻松在 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

查看集群镜像

https://sealos.run/docs/self-hosting/lifecycle-management/quick-start/deploy-kubernetes#查看集群镜像

集群镜像版本支持说明

https://sealos.run/docs/self-hosting/lifecycle-management/quick-start/deploy-kubernetes#集群镜像版本支持说明

Sealos 集群镜像构建

Sealos 集群镜像构建 | Sealos: 专为云原生开发打造的以 K8s 为内核的云操作系统

LVScare 使用指南

LVScare 使用指南 | Sealos: 专为云原生开发打造的以 K8s 为内核的云操作系统

离线安装 K8s

https://sealos.run/docs/self-hosting/lifecycle-management/quick-start/deploy-kubernetes#离线安装-k8s

本地仓库

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

关于我

我的博客主旨:

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

🍀 微信二维码

x2675263825 (舍得), qq:2675263825。

🍀 微信公众号

《云原生架构师实战》

🍀 个人博客站点

明心静性 | 彦

🍀 语雀

One · 语雀

🍀 csdn

一念一生~one-CSDN博客

🍀 知乎

一个人 - 知乎

最后

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

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐