Sealos 是一款以 Kubernetes 为内核的云操作系统发行版,使用户能够像使用个人电脑一样简单地使用云。

与此同时,Sealos 还提供一套强大的工具,可以便利地管理整个 Kubernetes 集群的生命周期

Sealos 不仅可以一键安装一个单节点的 Kubernetes 开发环境,还能构建数千节点的生产高可用集群。

Sealos 还可以在 Kubernetes 之上,通过集群镜像能力组装各种上层分布式应用,如数据库、消息队列等。

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

本文将会手把手教大家如何使用 Sealos 一键部署 Kubernetes 集群,包教包会。

原文链接:https://sealos.run/docs/self-hosting/lifecycle-management/quick-start/deploy-kubernetes

突破网络困境

首先我们需要下载 Sealos 命令行工具,Sealos 命令行工具可以到 Sealos 的 Release 页面获取:

有多种方式可以下载 Sealos 命令行工具,但由于国内特殊的网络环境,无论哪一种方式都是需要魔法的。Reelase 页面提供的各个包要么就是无法下载,要么就是速度奇慢。

要想突破网络限制,首先我们需要解决 Release 页面的链接访问问题。

如果你知道如何使用魔法来访问,那么下面的内容就不用看了。以下方案是给不会魔法的同学提供的。

这就需要用到一个浏览器插件:Violentmonkey (暴力猴)。你也可以安装 Tampermonkey (篡改猴)。他们都属于用户脚本管理器,本身无法为我们发挥什么作用,主要依靠各大社区编写的扩展脚本 (JavaScript 代码) 运行在浏览器上,来改变被访问网页的功能,提升我们的网页浏览体验。

我推荐使用 Violentmonkey,更轻量,更新更勤快。下面我们来进行安装。

安装浏览器插件

众所周知,Chrome 浏览器的插件需要到 Chrome Web 应用商店去下载,但你需要开启魔法才能访问这个网站,我们需要寻求他法。

方法一

微软出品的 Edge 浏览器自带一个扩展商店页面,而且这个页面是可以直接访问的。你可以选择使用 Edge 浏览器,然后打开 Edge 浏览器的扩展商店:

然后搜索 violentmonkey,点击获取开始安装:

方法二

对于 Chrome 浏览器,或者其他 Chromium 系的浏览器,我们可以从很多 Chrome 应用商店的镜像站去获取 Violentmonkey 的 crx 文件,这里推荐一个镜像站:

点击下载最新版:

下载完成解压后会得到一个 xxx.crx 文件,你需要打开浏览器设置,打开扩展程序页面,或者直接搜索 Chrome://extensions/进入。然后保持页面开发者模式的开启。找到被解压后的 crx 文件,将其拖动到扩展程序页面,释放并同意完成安装。

GitHub 增强脚本获取

Violentmonkey 插件是以运行用户脚本来实现功能的,借助用户脚本,可以实现各种强大的功能。这里我们需要安装一个 GitHub 增强脚本,这个脚本会给 GitHub Release 页面的文件提供多个 CDN 地址,我们可以通过 CDN 地址来下载文件,不再需要魔法。

脚本的安装非常简单无脑,直接浏览器打开这个链接:

然后点击确认安装:

安装完成后点击关闭即可。

打开 Violentmonkey 扩展的设置页面,然后点击箭头所指的图标打开脚本:

再其中加上一行:// @match *://githubfast.com/*,然后点击保存,关闭。

下载 Sealos 命令行工具

现在我们打开 Sealos 的 Release 页面:https://github.com/labring/sealos/releases。鉴于 GitHub 会时不时抽风,导致无法访问。我们可以在任意 github 链接后面加上 fast,也就是 githubfast.com,以此来访问 GitHub 页面。例如 Release 页面可以通过以下链接来访问:

这里有很多 Sealos 版本,建议使用正式版本,不要下载 alpha 版或者 rc 版。你可以直接使用最新的正式版,可以通过以下链接访问:

现在你可以看到每一个文件后面都提供了多个 CDN 链接,你只需要把鼠标放到其中一个链接上,然后鼠标右键就可以复制该 CDN 链接。

这个仓库里也提供了多个 GitHub 镜像网站:https://githubfast.com/runningcheese/MirrorSite

二进制下载

因为 Sealos 命令行工具只有一个二进制文件,所以所有的 Linux 发行版都可以选择直接下载二进制文件来使用 Sealos 命令行工具。

x86 架构可以选择下载 sealos_xxx_linux_amd64.tar.gz,记得使用右边的 CDN 链接下载。

获得 CDN 链接后,使用下面的命令开始下载:

$ URL=<你的 CDN 链接>
$ wget $URL && tar zxvf sealos_*_linux_amd64.tar.gz sealos && chmod +x sealos && mv sealos /usr/bin

可以多尝试几个链接,找到速度较快的链接。

测试一下:

$ sealos version
SealosVersion:
buildDate: "2023-10-09T10:07:15Z"
compiler: gc
gitCommit: 881c10cb
gitVersion: 4.3.5
goVersion: go1.20.8
platform: linux/amd64

同理,arm64 架构可以下载 sealos_xxx_linux_arm64.tar.gz。

包管理工具安装

Sealos 同时还提供了 DEB 包和 RPM 包,对于 Debian/Ubuntu 系的系统或者 Centos/RHEL 系的系统,可以选择使用包管理工具来安装。

以 Ubuntu 为例,x86 架构可以选择下载 sealos_xxx_linux_amd64.deb,下载完成后使用包管理工具安装即可。命令如下:

$ URL=<你的 CDN 链接>
$ wget $URL && dpkg -i sealos_*_linux_amd64.deb

Centos/RHEL 系的系统可以使用如下命令:

$ URL=<你的 CDN 链接>
$ wget $URL && yum localinstall -y sealos_*_linux_amd64.rpm

安装 Kubernetes 集群

终于进入正题了,接下来开始正式安装 Kubernetes 集群。

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

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

在正式安装之前,先来简单理解一下 Sealos 中的一个特有的概念:集群镜像

Sealos 吸取了 Docker 思想的精髓,把 Docker 的思想衍生到了集群的维度,实现分布式软件的构建、打包、交付、运行等等。

和操作系统 ISO 镜像或 Docker 镜像类似,集群镜像就是用一定的技术手段把整个集群的所有文件以一定格式打成的一个资源包

以 Kubernetes 集群镜像为例,里面包含了除操作系统以外的所有文件:

  • Containerd 依赖的二进制与 systemd 配置、Containerd 配置,以及一个私有的容器镜像仓库。
  • Kubernetes 核心组件二进制、容器镜像、kubelet system 配置等。
  • 其它脚本、配置与二进制工具等应用运行需要的所有依赖。

集群镜像的打包格式兼容了 OCI 标准,可以直接推送到 Docker 镜像仓库中。安装集群时只需要使用 sealos pull 命令将该镜像从镜像仓库里拉取下来,然后再执行 sealos run 命令,整个 Kubernetes 集群就安装好了。。。

Docker 解决了单个容器的镜像化问题,而 Sealos 通过把整个集群打包,实现了分布式软件的一处构建,处处运行

本文由于篇幅有限,集群镜像的具体原理就不展开介绍了,后面有机会再写文章介绍。感兴趣的同学可以参考 Sealos 的官方文档:

集群镜像版本支持说明

推荐使用 Containerd 作为容器运行时 (CRI) 的集群镜像版本,Containerd 是一种轻量级、高性能的容器运行时,与 Docker 兼容。使用 Containerd 的 Kubernetes 镜像可以提供更高的性能和资源利用率。以下是支持 Containerd 的集群镜像版本支持说明:

K8s 版本 Sealos 版本 CRI 版本 集群镜像版本
<1.25 >=v4.0.0 v1alpha2 labring/kubernetes:v1.24.0
>=1.25 >=v4.1.0 v1alpha2 labring/kubernetes:v1.25.0
>=1.26 >=v4.1.4-rc3 v1 labring/kubernetes:v1.26.0
>=1.27 >=v4.2.0-alpha3 v1 labring/kubernetes:v1.27.0

根据 Kubernetes 版本的不同,您可以选择不同的 Sealos 版本和 CRI 版本。例如,如果您要使用 Kubernetes v1.26.0 版本,您可以选择 sealos v4.1.4-rc3 及更高版本,并使用 v1 CRI 版本。

当然,你也可以选择使用 Docker 作为容器运行时,以下是支持 Docker 的集群镜像版本支持说明:

K8s 版本 Sealos 版本 CRI 版本 集群镜像版本
<1.25 >=v4.0.0 v1alpha2 labring/kubernetes-docker:v1.24.0
>=1.25 >=v4.1.0 v1alpha2 labring/kubernetes-docker:v1.25.0
>=1.26 >=v4.1.4-rc3 v1 labring/kubernetes-docker:v1.26.0
>=1.27 >=v4.2.0-alpha3 v1 labring/kubernetes-docker:v1.27.0

与支持 Containerd 的 Kubernetes 镜像类似,您可以根据 Kubernetes 版本的不同选择不同的 Sealos 版本和 CRI 版本。例如,如果您要使用 Kubernetes v1.26.0 版本,您可以选择 sealos v4.1.4-rc3 及更高版本,并使用 v1 cri 版本。

查看集群镜像

Sealos 所有的集群镜像都可以在这个仓库里找到:

除了推送到 Docker Hub 之外,这些镜像还被同步到了阿里云的镜像仓库。Docker Hub 上可以通过以下链接查看 Sealos 所有的集群镜像:

但是集群镜像实在是太多了,假如我想看 Kubernetes 集群镜像的所有版本,有没有更高效的方式来查看呢?

这就需要用到一个工具叫 Registry Explorer,链接如下:

直接输入 registry.cn-shanghai.aliyuncs.com/labring/kubernetes,然后点击 “Submit Query”:

你就会看到这个集群镜像的所有 tag。

Docker Hub 同理,输入 docker.io/labring/kubernetes 即可查看所有 tag。

安装集群

Kubernetes 的小版本号越高,集群越稳定。例如 v1.28.x,其中的 x 就是小版本号。建议使用小版本号比较高的 Kubernetes 版本。到本文截止时间为止,v1.27 最高的版本号是 v1.27.7,而 v1.28 最高的版本号是 v1.28.3,所以建议使用 v1.27.7。你需要根据实际情况来选择最佳的 Kubernetes 版本,不要照抄本文。

推荐使用 Containerd 作为运行时,也就是集群镜像 labring/kubernetes。如果你非要使用 Docker 作为运行时,可以使用集群镜像 labring/kubernetes-docker

如果你只有一个节点,可以使用以下命令来安装:

$ sealos run registry.cn-shanghai.aliyuncs.com/labring/kubernetes:v1.27.7 registry.cn-shanghai.aliyuncs.com/labring/helm:v3.9.4 registry.cn-shanghai.aliyuncs.com/labring/cilium:v1.13.4 --single

记得通过 Registry Explorer 来查看 helm 和 cilium 最新的版本号。

如果你有多个节点,可以使用以下命令来安装:

$ sealos run registry.cn-shanghai.aliyuncs.com/labring/kubernetes:v1.27.7 registry.cn-shanghai.aliyuncs.com/labring/helm:v3.9.4 registry.cn-shanghai.aliyuncs.com/labring/cilium:v1.13.4 \
--masters <master1 的 IP>,<master2 的 IP>,... \
--nodes <node1 的 IP>,<node1 的 IP>,... -p [your-ssh-passwd]

举个例子,假设你有两个节点,master 节点的 IP 是 192.168.64.10,node 节点的 IP 是 192.168.64.11,命令如下:

$ sealos run registry.cn-shanghai.aliyuncs.com/labring/kubernetes:v1.27.7 registry.cn-shanghai.aliyuncs.com/labring/helm:v3.9.4 registry.cn-shanghai.aliyuncs.com/labring/cilium:v1.13.4 \
--masters 192.168.64.10 \
--nodes 192.168.64.11 -p [your-ssh-passwd]

没了。静静等待安装完成即可。安装完成后,可以使用如下命令查看集群状况:

$ kubectl get node
NAME STATUS ROLES AGE VERSION
ycs-master-1 Ready control-plane 18h v1.27.7
ycs-node-1 Ready <none> 18h v1.27.7 $ kubectl -n kube-system get pod
NAME READY STATUS RESTARTS AGE
cilium-fmgcw 1/1 Running 1 (48m ago) 18h
cilium-operator-86666d88cb-6h5kx 1/1 Running 1 (52m ago) 18h
cilium-skggs 1/1 Running 0 18h
coredns-5d78c9869d-j4kkj 1/1 Running 0 18h
coredns-5d78c9869d-snlt7 1/1 Running 0 18h
etcd-ycs-master-1 1/1 Running 9 18h
kube-apiserver-ycs-master-1 1/1 Running 9 18h
kube-controller-manager-ycs-master-1 1/1 Running 9 18h
kube-proxy-g45vv 1/1 Running 0 18h
kube-proxy-vz4dk 1/1 Running 1 (48m ago) 18h
kube-scheduler-ycs-master-1 1/1 Running 9 18h
kube-sealos-lvscare-ycs-node-1 1/1 Running 10 (48m ago) 18h
metrics-server-84c9bd846f-mwfbx 1/1 Running 0 47m

镜像分发原理

Sealos 在安装 Kubernetes 的过程中不会将镜像拷贝到所有节点,而是采用了一种更加优雅的解决方案。Sealos 会在第一个 master 节点 (第一个 master 节点是指创建集群的时候输入的第一个 master 节点的地址) 上启动一个私有镜像仓库,然后将 Kubernetes 集群镜像里的 registry 目录同步到私有镜像仓库中。

同时,每个节点都会运行一个 image-cri-shim 守护进程,kubelet 在拉取镜像的时候会发起一个 grpc 交互命令到 image-cri-shim。该进程会根据镜像名字在私有仓库里面查找,如果镜像存在则从本地镜像仓库拉取,否则就从远端拉取。

这样就完美解决了镜像分发问题。

详细原理请参阅 Sealos 镜像仓库相关文档:

使用 Sealos 一键部署 Kubernetes 集群的更多相关文章

  1. 和我一步步部署 kubernetes 集群

    和我一步步部署 kubernetes 集群 本系列文档介绍使用二进制部署最新 kubernetes v1.6.1 集群的所有步骤,而不是使用 kubeadm 等自动化方式来部署集群: 在部署的过程中, ...

  2. 使用kubeadm部署Kubernetes集群

    一.环境架构与部署准备 1.集群节点架构与各节点所需安装的服务如下图: 2.安装环境与软件版本: Master: 所需软件:docker-ce 17.03.kubelet1.11.1.kubeadm1 ...

  3. 二进制部署 Kubernetes 集群

    二进制部署 Kubernetes 集群   提供的几种Kubernetes部署方式 minikube Minikube是一个工具,可以在本地快速运行一个单点的Kubernetes,尝试Kubernet ...

  4. 使用Rancher的RKE快速部署Kubernetes集群

    简要说明: 本文共涉及3台Ubuntu机器,1台RKE部署机器(192.168.3.161),2台Kubernetes集群机器(3.162和3.163). 先在Windows机器上,将rke_linu ...

  5. 基于TLS证书手动部署kubernetes集群(下)

    一.master节点组件部署 承接上篇文章--基于TLS证书手动部署kubernetes集群(上),我们已经部署好了etcd集群.flannel网络以及每个节点的docker,接下来部署master节 ...

  6. 高可用Kubernetes集群-15. 部署Kubernetes集群统一日志管理

    参考文档: Github:https://github.com/kubernetes/kubernetes/tree/master/cluster/addons/fluentd-elasticsear ...

  7. 高可用Kubernetes集群-14. 部署Kubernetes集群性能监控平台

    参考文档: Github介绍:https://github.com/kubernetes/heapster Github yaml文件: https://github.com/kubernetes/h ...

  8. kubeadm部署Kubernetes集群

    Preface 通过kubeadm管理工具部署Kubernetes集群,相对离线包的二进制部署集群方式而言,更为简单与便捷.以下为个人学习总结: 两者区别在于前者部署方式使得大部分集群组件(Kube- ...

  9. 安装部署 Kubernetes 集群

    安装部署 Kubernetes 集群 阅读目录: 准备工作 部署 Master 管理节点 部署 Minion 工作节点 部署 Hello World 应用 安装 Dashboard 插件 安装 Hea ...

  10. 在CentOS7上部署Kubernetes集群

    在CentOS7上部署Kubernetes集群 文/FCBusquest 2015-12-22 18:36:00 简介 Kubernetes(k8s)是Google开源的大规模容器集群管理系统, 本文 ...

随机推荐

  1. linux笔记一(基础命令)

      总结: 1.ls – List ls会列举出当前工作目录的内容(文件或文件夹),就跟你在GUI中打开一个文件夹去看里面的内容一样. 2.mkdir – Make Directory mkdir 用 ...

  2. [GDOIpj221B] 数列游戏

    第二题 数列游戏 提交文件: sequence.cpp 输入文件: sequence.in 输出文件: sequence.out 时间空间限制: 1 秒, 256 MB 有一个长度为 \(n\) 的序 ...

  3. [ARC145D] Non Arithmetic Progression Set

    Problem Statement Construct a set $S$ of integers satisfying all of the conditions below. It can be ...

  4. liunx系统sed命令使用

    增 sed '$行数i 新增内容' 文件名在文件里某行上面新增内容 sed '$行数a 新增内容' 文件名在文件里某行下面新增内容 -i.bak对源文件进行修改并备份修改之前源文件 #在文件里第5行上 ...

  5. 接手了个项目,被if..else搞懵逼了

    背景 领导:"这个项目,今后就给你维护了啊,仔细点." 小猫:"好,没问题". 可当满怀信心的小猫打开项目工程包翻看一些代码之后,瞬间懵逼没了信心. 是这样的 ...

  6. 中企网安信息科技:数据防泄密DLP管理系统概述

    由华企网安总公司北京中企网安信息科技有限责任公司开发的<数据防泄密DLP管理系统>,获得国家版权局颁发的计算机软件著作权登记证书. 数据防泄密DLP管理系统是用于保护.监控和管理敏感数据的 ...

  7. WebView中的页面调试方法

    在 iOS 12 中,苹果正式弃用 UIWebView,改成 WKWebView,参考官方声明. 后者在性能.稳定性.功能方面有很大提升,并且与 Safari 具有相同的 JavaScript 引擎( ...

  8. proxy代理实现接口调用处理

    proxy代理实现接口调用处理 我们知道,要调用接口必须要实例化才能调用. 那么我们能不能不实例化调用呢?像mybatis.hibernate那样定义一个接口就能注入调用.其实他们的底层实现就是用代理 ...

  9. 文心一言 VS 讯飞星火 VS chatgpt (35)-- 算法导论5.3 5题

    五.证明:在过程 PERMUTE-BY-SORTING的数组 P中,所有元素都唯一的概率至少是1-1/n. 文心一言: 证明: 在过程PERMUTE-BY-SORTING中,对于输入数组P中的每个元素 ...

  10. Ambient Mesh:Istio 数据面新模式

    摘要:基于Istio对于Kubernetes生态的完美补充,随着Kubernetes的大规模普及,Istio 数据面新模式 -Ambient MeshIstio也实现了对用户心智以及市场的快速抢占. ...