前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >使用 Sealos 一键搭建 Kubernetes 集群

使用 Sealos 一键搭建 Kubernetes 集群

作者头像
我是阳明
发布2024-03-02 09:28:38
5050
发布2024-03-02 09:28:38
举报
文章被收录于专栏:k8s技术圈k8s技术圈

搭建 K8s 的方式方法有很多,主要有二进制和 Kubeadm(容器)两种方式,对于初学者来说不建议使用二进制方式搭建,因为二进制方式搭建 K8s 集群需要手动安装各种组件,而且还需要手动配置各种组件,非常麻烦,而且容易出错。更推荐大家使用 Kubeadm 快速搭建一套集群起来,先用起来,等熟悉了之后再去了解各个组件的原理和配置。另外,还有一种方式是使用 Kind 工具来搭建集群,Kind 是一个用于在 Docker 容器中运行本地 Kubernetes 集群的工具,它使用 Docker 容器作为节点,这样就可以在本地快速搭建一个 K8s 集群,非常适合用于本地开发和测试。

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

Sealos 简介

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

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

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

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

环境

这里我们将提供 3 个节点,都是 Ubuntu 22.04 系统,内核版本:5.15.0-94-generic,在每个节点上添加 hosts 信息:

代码语言:javascript
复制
☸ ➜ cat /etc/hosts
192.168.0.111 master
192.168.0.116 node1
192.168.0.118 node2

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

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

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

安装

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

代码语言:javascript
复制
curl --silent "https://api.github.com/repos/labring/sealos/releases" | jq -r '.[].tag_name'

设置 VERSION 环境变量为 latest 版本号,或者将 VERSION 替换为您要安装的 Sealos 版本:

代码语言:javascript
复制
VERSION=`curl -s https://api.github.com/repos/labring/sealos/releases/latest | grep -oE '"tag_name": "[^"]+"' | head -n1 | cut -d'"' -f4`

这里我们使用的版本为 v4.3.7

然后可以使用下面的命令自动下子二进制文件:

代码语言:javascript
复制
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 系统,还可以使用包管理工具安装:

代码语言:javascript
复制
$ 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 版本需要使用 sealos v5.0.0 版本以上),并使用 Cilium 网络插件,然后指定 masternode 节点的 IP 地址,最后指定 ssh 的密码即可:

代码语言:javascript
复制
$ 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]
2024-02-22T09:37:11 info Start to create a new cluster: master [192.168.0.111], worker [192.168.0.116 192.168.0.118], registry 192.168.0.111
2024-02-22T09:37:11 info Executing pipeline Check in CreateProcessor.
2024-02-22T09:37:11 info checker:hostname [192.168.0.111:22 192.168.0.116:22 192.168.0.118:22]
2024-02-22T09:37:12 info checker:timeSync [192.168.0.111:22 192.168.0.116:22 192.168.0.118:22]
2024-02-22T09:37:13 info Executing pipeline PreProcess in CreateProcessor.
Trying to pull registry.cn-shanghai.aliyuncs.com/labring/kubernetes:v1.28.6...
Getting image source signatures
Copying blob f598d9089ca8 [====>---------------------------------] 16.2MiB / 117.9MiB
Copying blob 378b9eff9a0e done
Copying blob 34bf9418f9a9 [===>----------------------------------] 7.0MiB / 61.3MiB
Copying blob 10d921f244bc [====>---------------------------------] 21.2MiB / 174.3MiB
.......

2024-02-22T11:38:38 info succeeded in joining 192.168.0.116:22 as worker
192.168.0.118:22
192.168.0.118:22 This node has joined the cluster:
192.168.0.118:22 * Certificate signing request was sent to apiserver and a response was received.
192.168.0.118:22 * The Kubelet was informed of the new secure connection details.
192.168.0.118:22
192.168.0.118:22 Run 'kubectl get nodes' on the control-plane to see this node join the cluster.
192.168.0.118:22
2024-02-22T11:38:39 info succeeded in joining 192.168.0.118:22 as worker
2024-02-22T11:38:39 info start to sync lvscare static pod to node: 192.168.0.118:22 master: [192.168.0.111:6443]
2024-02-22T11:38:39 info start to sync lvscare static pod to node: 192.168.0.116:22 master: [192.168.0.111:6443]
192.168.0.116:22 2024-02-22T11:38:39 info generator lvscare static pod is success
192.168.0.118:22 2024-02-22T11:38:39 info generator lvscare static pod is success
2024-02-22T11:38:39 info Executing pipeline RunGuest in CreateProcessor.
ℹ️  Using Cilium version 1.13.4
🔮 Auto-detected cluster name: kubernetes
🔮 Auto-detected datapath mode: tunnel
🔮 Auto-detected kube-proxy has been installed
2024-02-22T11:38:41 info succeeded in creating a new cluster, enjoy it!
2024-02-22T11:38:41 info
      ___           ___           ___           ___       ___           ___
     /\  \         /\  \         /\  \         /\__\     /\  \         /\  \
    /::\  \       /::\  \       /::\  \       /:/  /    /::\  \       /::\  \
   /:/\ \  \     /:/\:\  \     /:/\:\  \     /:/  /    /:/\:\  \     /:/\ \  \
  _\:\~\ \  \   /::\~\:\  \   /::\~\:\  \   /:/  /    /:/  \:\  \   _\:\~\ \  \
 /\ \:\ \ \__\ /:/\:\ \:\__\ /:/\:\ \:\__\ /:/__/    /:/__/ \:\__\ /\ \:\ \ \__\
 \:\ \:\ \/__/ \:\~\:\ \/__/ \/__\:\/:/  / \:\  \    \:\  \ /:/  / \:\ \:\ \/__/
  \:\ \:\__\    \:\ \:\__\        \::/  /   \:\  \    \:\  /:/  /   \:\ \:\__\
   \:\/:/  /     \:\ \/__/        /:/  /     \:\  \    \:\/:/  /     \:\/:/  /
    \::/  /       \:\__\         /:/  /       \:\__\    \::/  /       \::/  /
     \/__/         \/__/         \/__/         \/__/     \/__/         \/__/

                  Website: https://www.sealos.io/
                  Address: github.com/labring/sealos
                  Version: 4.3.7-f39b2339

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

安装完成后,我们可以使用 kubectl get nodes 命令来查看集群的节点信息:

代码语言:javascript
复制
$ kubectl get nodes
NAME     STATUS   ROLES           AGE   VERSION
master   Ready    control-plane   81s   v1.27.10
node1    Ready    <none>          63s   v1.27.10
node2    Ready    <none>          62s   v1.27.10
$ kubectl get pods -n kube-system
NAME                               READY   STATUS    RESTARTS   AGE
cilium-m7x8d                       1/1     Running   0          4m48s
cilium-mbhfd                       1/1     Running   0          4m48s
cilium-operator-86666d88cb-4w94d   1/1     Running   0          4m48s
cilium-wb8ln                       1/1     Running   0          4m48s
coredns-5d78c9869d-6j7cc           1/1     Running   0          4m54s
coredns-5d78c9869d-xsvrm           1/1     Running   0          4m54s
etcd-master                        1/1     Running   1          5m6s
kube-apiserver-master              1/1     Running   1          5m6s
kube-controller-manager-master     1/1     Running   1          5m6s
kube-proxy-7fv9p                   1/1     Running   0          4m54s
kube-proxy-lk4s6                   1/1     Running   0          4m52s
kube-proxy-s5xnk                   1/1     Running   0          4m51s
kube-scheduler-master              1/1     Running   1          5m7s
kube-sealos-lvscare-node1          1/1     Running   0          4m32s
kube-sealos-lvscare-node2          1/1     Running   0          4m33s

如果想要增加一个 master 节点,则可以使用如下所示的 sealos add 命令:

代码语言:javascript
复制
sealos add --masters 192.168.0.21,192.168.0.19

如果要增加 node 节点,则使用 --nodes 参数即可:

代码语言:javascript
复制
sealos add --nodes 192.168.64.21,192.168.64.19

同理要删除节点也是非常简单的,使用 sealos delete 命令即可。

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

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

此外我们还可以安装各种分布式应用,比如使用下面的命令即可轻松在 K8s 集群上安装 openebs

代码语言:javascript
复制
sealos run registry.cn-shanghai.aliyuncs.com/labring/openebs:v3.9.0

如果想要自定义安装配置,可以通过使用 sealos gen 命令生成一个 Clusterfile 文件,然后修改其中的配置,最后使用 sealos apply -f Clusterfile 命令来启动集群,例如:

代码语言:javascript
复制
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 节点直接知行下面的命令即可:

代码语言:javascript
复制
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 访问域名以及用户名和密码,根据提示访问即可。

参考文档:https://sealos.run/docs/self-hosting/lifecycle-management/

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2024-02-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 k8s技术圈 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Sealos 简介
  • 环境
  • 安装
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档