Sealos 公众号已接入了 GPT-4,完全免费!欢迎前来调戏👇
Sealos 用了五年的时间从一个 K8s 一键安装工具蜕变成了一个真正的云操作系统,将产品体验提升到了极致,也收获了 10w+ 的社区用户。
一个多月前,Sealos 正式发布了公有云托管版本,社区用户狂喜,纷纷寻找私有化部署教程。现在教程来了,本文将会手把手教你如何私有化部署 Sealos 桌面环境。
准备工作
1. 服务器配置要求
推荐使用奇数台 Master 节点和若干 Node 节点
操作系统 :Ubuntu 22.04 LTS
内核版本 :5.4 及以上
配置推荐 :CPU 4 核 , 内存 8GB, 存储空间 100GB 以上
最小配置 :CPU 2 核 , 内存 4GB, 存储空间 60GB
2. 网络要求
所有节点之间网络互通
Master 节点可以通过 SSH 免密登陆到其他节点
所有节点可以通过 Ping 通信
3. 域名要求
需要一个域名用于访问 Sealos 及相关服务
没有域名可以使用 nip.io 免费域名服务
在线部署
部署 Kubernetes 集群
得益于 Sealos CLI 强大的 Kubernetes 生命周期管理,Kubernetes 集群部署变得非常简单:
# 注意:helm 版本需要在 3.12.0 及以上!$ sealos gen labring/kubernetes:v1.25.6 \ labring/helm:v3.12.0 \ labring/calico:v3.24.1 \ labring/cert-manager:v1.8.0 \ labring/openebs:v3.4.0 \ --masters 10.140.0.16 \ --nodes 10.140.0.54 > Clusterfile# 请修改 Clusterfile 中的 PodSubnet 及 ServiceSubnet# 默认的 PodSubnet: 100.64.0.0/10# 默认的 ServiceSubnet: 10.96.0.0/22$ sealos apply -f Clusterfile
等待集群就绪后 , 使用 kubectl get pods -A 查看集群状态:
在所有 Pod 均为 Ready 状态后,即可进行下一步操作。如果您需要部署其他版本的 Kubernetes 集群,可以在 Sealos 文档[1] 中查看支持的版本。
部署 Sealos 依赖组件
使用下面的脚本即可一键安装 Sealos 所有的依赖组件:
#!/bin/bashset -ecat << EOF > ingress-nginx-config.yamlapiVersion: apps.sealos.io/v1beta1kind: Configmetadata: creationTimestamp: null name: ingress-nginx-configspec: data: | controller: hostNetwork: true kind: DaemonSet service: type: NodePort match: docker.io/labring/ingress-nginx:v1.5.1 path: charts/ingress-nginx/values.yaml strategy: mergeEOFsealos run docker.io/labring/kubernetes-reflector:v7.0.151\ docker.io/labring/ingress-nginx:v1.5.1\ docker.io/labring/zot:v1.4.3\ docker.io/labring/kubeblocks:v0.6.2\ --env policy=anonymousPolicy\ --config-file ingress-nginx-config.yamlecho "patch ingress-nginx-controller tolerations to allow run on master node, if you don't want to run on master node, please ignore this step"kubectl -n ingress-nginx patch ds ingress-nginx-controller -p '{"spec":{"template":{"spec":{"tolerations":[{"key":"node-role.kubernetes.io/control-plane","operator":"Exists","effect":"NoSchedule"}]}}}}'echo "waitting for kubeblocks crd created, this may take a while"while ! kubectl get clusterdefinitions.apps.kubeblocks.io redis >/dev/null 2>&1; do sleep 5doneecho "start patch redis clusterdefinition"kubectl patch clusterdefinitions.apps.kubeblocks.io redis --type='json' -p '[{"op": "add", "path": "/spec/componentDefs/0/podSpec/containers/1/resources/limits", "value": {"cpu":"100m", "memory":"100Mi"}}]'echo "patch redis success"echo "wait for all pod to be ready then install Sealos"kubectl get po -A
过程可能稍长,等待所有 Pod 均为 Ready 状态后,即可进行下一步。
部署 Sealos
只需一条命令即可一键部署 Sealos:
$ sealos run docker.io/labring/sealos-cloud:latest\ --env cloudDomain="34.81.60.57.nip.io"
等待所有 Pod 均为 Ready 状态后,即可访问 Sealos,最终集群 Pod 如下:
浏览器访问 https://34.81.60.57.nip.io 即可进入 Sealos,由于是自签名证书,浏览器会显示不安全,无法打开 App,可参考下文 Q&A 中的解决方案。
关于 Sealos 的使用,可以参考 Sealos 官方文档中的案例[2]。
自定义配置
如果你需要使用自己的域名,可以将 cloudDomain 参数修改为你的域名,例如:cloudDomain="sealos.cloud";
如果你需要使用自己的证书,你可以使用下面的脚本(注意需要修改证书位置及 yaml_content 中的 match image)生成 tls-secret.yaml 文件,然后在 sealos run sealos-cloud 时使用 --config-file 参数指定该文件:
#!/bin/bash# 读取原始证书和密钥文件tls_crt_file="tls.cer"tls_key_file="tls.key"# 使用 base64 转换tls_crt_base64=$(cat $tls_crt_file | base64 | tr -d '')tls_key_base64=$(cat $tls_key_file | base64 | tr -d '')# 定义 YAML 文件内容yaml_content="apiVersion: apps.sealos.io/v1beta1kind: Configmetadata: name: secretspec: path: manifests/tls-secret.yaml # please change the match image to your own image match: docker.io/labring/sealos-cloud:latest strategy: merge data: | data: tls.crt: $tls_crt_base64 tls.key: $tls_key_base64"# 创建新的 cloud-config.yaml 文件echo "$yaml_content" > tls-secret.yaml sealos run docker.io/labring/sealos-cloud:latest\--env cloudDomain="34.81.60.57.nip.io"\--config-file tls-secret.yaml
离线部署
镜像准备
离线部署依赖于 Sealos 强大的离线交付能力,离线部署步骤也非常简单,需要在公网环境下需要提前使用 sealos pull/save 保存镜像:
#!/bin/bash# pull_images.shset -exmkdir -p tarsimages=( docker.io/labring/kubernetes:v1.25.6 docker.io/labring/helm:v3.12.0 docker.io/labring/calico:v3.24.1 docker.io/labring/cert-manager:v1.8.0 docker.io/labring/openebs:v3.4.0 docker.io/labring/kubernetes-reflector:v7.0.151 docker.io/labring/ingress-nginx:v1.5.1 docker.io/labring/zot:v1.4.3 docker.io/labring/kubeblocks:v0.6.2 docker.io/labring/sealos-cloud:latest)for image in "${images[@]}"; do sealos pull "$image" filename=$(echo "$image" | cut -d':' -f1 | tr / -) sealos save -o "tars/${filename}.tar" "$image"done
执行完这个脚本后,会在当前目录下生成一个 tars 目录,里面包含了所有的镜像文件。
然后将镜像拷贝到内网环境下,使用 sealos load 命令加载镜像:
#!/bin/bash# load_images.shset -exfor file in tars/*.tar; do sealos load -i "$file"done
❝
注意:在内网环境下如果缺少 Docker 镜像,还需要您自己操作导入 Docker 镜像。当然,Sealos CLI 同样也可以。
Q&A
安装过程中出现问题怎么办?
如果您在安装过程中遇到任何问题,可以在 Sealos 开发者社区[3] 或者 Sealos issues[4] 中提出,我们将尽快回复并帮助您解决问题。或者您也可以加入我们的微信交流群,与与开发者和其他用户进行亲切友好的交流👇
应该选择哪个 Sealos 镜像版本?
由于 Sealos 项目还在快速迭代中,我们推荐使用最新版(latest 版本)。如果您需要固定版本,可以在 Docker Hub[5] 中选择合适的版本。
Sealos 可以商用吗?
首先,非常感谢您对我们的开源项目的支持和关注。您完全可以根据我们的开源许可证 Apache 2.0 自由使用我们的软件,包括商业用途。但请确保遵守许可证要求,这可能包括但不限于:保留必要的版权声明、明显的更改通知,以及在某些情况下,您可能需要发布对源代码的改动等。
如果没有域名怎么办?
如果您有公网 IP,那么您可以直接使用 nip.io[6]。这样,您就可以使用 {{ $ip }}.nip.io 作为部署时的域名。
浏览器访问 Sealos 网址时提示“不安全”
如果您在部署过程中提供了正确的证书,但仍然收到这个提示,可以采取以下措施:
检查证书是否和域名匹配:证书需要解析 {{ $domain }} 及 *.{{ $domain }};
检查证书是否被正确地使用 base64 编码并写入到 tls-secret.yaml 文件中;
如果您在部署过程中没有提供证书,那么这种现象是正常的,因为默认使用的是 Sealos 的自签名证书。您可以选择以下两种方式解决:
信任证书:在浏览器中导出证书,然后双击证书打开,导入到受信任的根证书颁发机构中;
关闭浏览器的安全检查:以 Chrome 为例,修改 Chrome 浏览器的快捷方式,在目标后面添加 --ignore-certificate-errors 参数,然后重新打开浏览器。
部署时卡在 Waiting waiting for mongodb secret generated 怎么办?
Sealos 依赖 kubeblocks 提供的数据库服务。如果在部署过程中卡在这一步,说明在上一步,部署 Sealos 依赖组件时出错了。您应该尝试重新部署。
如何重新部署?
如果您需要重新部署,只需执行以下命令:
$ sealos reset
这个命令将清理所有集群资源,让您可以从头开始部署。
如何在 Windows 上的 Linux 虚拟机中部署 Sealos?
假设您的 Linux 虚拟机能够联网,那么您可以按照在线部署方案进行部署。需要注意的是,域名需要在虚拟机管理器中配置。如果没有证书,系统将默认使用 Sealos 的自签名证书。
Sealos 是否支持 ARM64 架构?
我们正在进行相关测试。测试完成后,我将在文档中更新相关信息。
引用链接
[1]
Sealos 文档: https://sealos.io/docs/lifecycle-management/quick-start/[2]
Sealos 官方文档中的案例: https://sealos.io/docs/category/examples/[3]
Sealos 开发者社区: https://forum.laf.run/[4]
Sealos issues: https://github.com/labring/sealos/issues[5]
Docker Hub: https://hub.docker.com/r/labring/sealos-cloud/tags?page=1&ordering=last_updated[6]
nip.io: https://nip.io
关于 Sealos
Sealos 是一款以 Kubernetes 为内核的云操作系统发行版。它以云原生的方式,抛弃了传统的云计算架构,转向以 Kubernetes 为云内核的新架构,使企业能够像使用个人电脑一样简单地使用云。
🌟GitHub:https://github.com/labring/sealos
🏠官网:https://sealos.io
💻开发者论坛:https://forum.laf.run
关注 Sealos 公众号与我们一同成长👇👇👇