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 检查集群状况:

Sealos 私有化部署完全指南

在一切 Pod 均为 Ready 状况后,即可进行下一步操作。假如您需求布置其他版别的 Kubernetes 集群,可以在 Sealos 文档 中检查支撑的版别。

布置 Sealos 依靠组件

运用下面的脚本即可一键装置 Sealos 一切的依靠组件:

#!/bin/bash
set -e
cat << EOF > ingress-nginx-config.yaml
apiVersion: apps.sealos.io/v1beta1
kind: Config
metadata:
  creationTimestamp: null
  name: ingress-nginx-config
spec:
  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: merge
EOF
sealos 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.5.3\
    --env policy=anonymousPolicy\
    --config-file ingress-nginx-config.yaml
echo "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 5
done
echo "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:

$ sealos run docker.io/labring/sealos-cloud:latest\
    --env cloudDomain="34.81.60.57.nip.io"

等候一切 Pod 均为 Ready 状况后,即可拜访 Sealos,终究集群 Pod 如下:

Sealos 私有化部署完全指南

浏览器拜访 https://34.81.60.57.nip.io 即可进入 Sealos,因为是自签名证书,浏览器会显示不安全,无法翻开 App,可参阅下文 Q&A 中的解决计划

Sealos 私有化部署完全指南

关于 Sealos 的运用,可以参阅 Sealos 官方文档中的案例。

自定义装备

  • 假如你需求运用自己的域名,可以将 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 '\n')
tls_key_base64=$(cat $tls_key_file | base64 | tr -d '\n')
# 定义 YAML 文件内容
yaml_content="
apiVersion: apps.sealos.io/v1beta1
kind: Config
metadata:
  name: secret
spec:
  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.sh
set -ex
mkdir -p tars
images=(
  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.5.3
  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 私有化部署完全指南

然后将镜像拷贝到内网环境下,运用 sealos load 指令加载镜像:

#!/bin/bash
# load_images.sh
set -ex
for file in tars/*.tar; do
  sealos load -i "$file"
done

Sealos 私有化部署完全指南

Sealos 私有化部署完全指南

留意:在内网环境下假如短少 Docker 镜像,还需求您自己操作导入 Docker 镜像。当然,Sealos CLI 相同也可以。

Q&A

装置过程中出现问题怎么办?

假如您在装置过程中遇到任何问题,可以在 Sealos 开发者社区 或许 Sealos issues 中提出,咱们将尽快回复并帮助您解决问题。或许您也可以参加咱们的微信沟通群,与与开发者和其他用户进行亲切友好的沟通

Sealos 私有化部署完全指南

应该挑选哪个 Sealos 镜像版别?

因为 Sealos 项目还在快速迭代中,咱们推荐运用最新版(latest 版别)。假如您需求固定版别,可以在 Docker Hub 中挑选合适的版别。

Sealos 可以商用吗?

首先,十分感谢您对咱们的开源项目的支撑和关注。您完全可以根据咱们的开源许可证 Apache 2.0 自在运用咱们的软件,包含商业用途。但请保证恪守许可证要求,这或许包含但不限于:保留必要的版权声明、明显的更改通知,以及在某些情况下,您或许需求发布对源代码的改动等

假如没有域名怎么办?

假如您有公网 IP,那么您可以直接运用 nip.io。这样,您就可以运用 {{ $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 架构?

咱们正在进行相关测验。测验完成后,我将在文档中更新相关信息。