搭建 K8s 的方式方法有很多,主要有二进制和 Kubeadm(容器)两种方式,对于初学者来说不建议使用二进制方式搭建,因为二进制方式搭建 K8s 集群需要手动安装各种组件,而且还需要手动配置各种组件,非常麻烦,而且容易出错。更推荐大家使用 Kubeadm 快速搭建一套集群起来,先用起来,等熟悉了之后再去了解各个组件的原理和配置。另外,还有一种方式是使用 Kind
工具来搭建集群,Kind
是一个用于在 Docker 容器中运行本地 Kubernetes 集群的工具,它使用 Docker 容器作为节点,这样就可以在本地快速搭建一个 K8s 集群,非常适合用于本地开发和测试。
前面四期我们都是重点讲解的使用 Kubeadm 来搭建 K8s 集群,这一期我们讲使用一个更方便快捷的工具 Sealos
来搭建 K8s 集群,Sealos
是一个基于 Kubeadm 的 K8s 一键安装工具,它可以帮助我们快速搭建一个 K8s 集群,而且还可以帮我们自动安装一些常用的插件,甚至要搭建一个高可用的集群也是非常方便的。
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 信息:
☸ ➜ 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。
以下是一些基本的安装要求:
sealos run
命令,目前集群外的节点不支持集群安装。首先我们需要在 master
节点下载 Sealos
命令行工具,我们可以通过运行命令来获取版本列表:
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`
这里我们使用的版本为 v4.3.7
。
然后可以使用下面的命令自动下子二进制文件:
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
版本需要使用 sealos v5.0.0
版本以上),并使用 Cilium
网络插件,然后指定 master
和 node
节点的 IP 地址,最后指定 ssh
的密码即可:
$ 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
命令来查看集群的节点信息:
$ 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
命令:
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 访问域名以及用户名和密码,根据提示访问即可。
参考文档:https://sealos.run/docs/self-hosting/lifecycle-management/