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 文档 中查看支持的版本。

部署 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 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 官方文档中的案例

自定义配置

  • 如果你需要使用自己的域名,可以将 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 load 命令加载镜像:

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

注意:在内网环境下如果缺少 Docker 镜像,还需要您自己操作导入 Docker 镜像。当然,Sealos CLI 同样也可以。

Q&A

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

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

应该选择哪个 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 架构?

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

Sealos 私有化部署完全指南的更多相关文章

  1. Docker技术浅谈:私有化部署的优势以及在顶象内部的应用实践

    顶象全景式业务安全风控体系基于新一代风控体系构建,并采用Docker技术进行私有云和公有云部署.本文主要和大家分享下Docker容器技术和顶象风控系统私有化部署的优势以及Docker容器技术在顶象内部 ...

  2. 免费开源《OdooERP系统部署架构指南》试读:第一章 Odoo架构概述

    文/开源智造联合创始人老杨 本文来自<OdooERP系统部署架构指南>的试读章节.书籍尚未出版,请勿转载.欢迎您反馈阅读意见. 从web浏览器到PostgreSQL,多层与其他层交互以处理 ...

  3. 《开源自主OdooERP部署架构指南》试读:第二章数据库服务构建

    文/开源智造联合创始人老杨 本文来自<开源自主OdooERP部署架构指南>的试读章节.书籍尚未出版,请勿转载.欢迎您反馈阅读意见. 使用apt.postgresql.org 您可以选择使用 ...

  4. Spire.Cloud 私有化部署教程(二)- Ubuntu 18.04 系统

    本教程主要介绍如何在Ubuntu 18.04系统上实现Spire.Cloud私有化部署.CentOS 7系统部署请参考 这篇教程. 详细步骤如下: 一.环境配置 1.关闭防火墙 1)首先查看防火墙状态 ...

  5. Spire.Cloud 私有化部署教程(一) - CentOS 7 系统

    Spire.Cloud支持的Linux服务器系统包括CentOS和Ubuntu(推荐使用CentOS 7和Ubuntu 18版本),本教程主要介绍如何在CentOS 7系统上实现Spire.Cloud ...

  6. .net core 和 WPF 开发升讯威在线客服系统【私有化部署免费版】发布

    希望 .net 和 WPF 技术时至今日,还能有一些存在感. 这个项目源于2015年前后,当时开发的初版,我使用了 ASP.NET MVC 做为后端,数据库使用原生 ADO.NET 进行操作.WPF ...

  7. 10分钟学会VS NuGet包私有化部署

    前言 我们之前实现了打包发布NuGet,但是发布后的引用是公有的,谁都可以访问,显然这种方式是不可取的. 命令版本:10分钟学会Visual Studio将自己创建的类库打包到NuGet进行引用(ne ...

  8. Spire.Cloud 私有化部署教程(三) - Windows 系统

    本教程主要介绍如何在 Windows 系统上实现 Spire.Cloud 私有化部署. 详细步骤如下: 一.安装依赖 我们的私有部署的依赖有 Nodejs.MySQL.Redis 和 RabbitMQ ...

  9. Twikoo私有化部署教程--迁移腾讯云

    目录 备份数据 私有化部署 创建容器 导入数据 重新配置twikoo面板设置 引入前端CDN Nginx https反代http 作者:小牛呼噜噜 | https://xiaoniuhululu.co ...

  10. GitLab私有化部署 - CI/CD - 持续集成/交付/部署 - 源代码托管 & 自动化部署

    预期目标 源代码管理 借助GitLab实现源代码托管,私有化部署版本,创建项目,创建用户组,分配权限,项目的签入/牵出等. 自动化部署 源代码产生变更时(如签入),自动化编译并发布到指定服务器中部署, ...

随机推荐

  1. mysql大表修改工具: pt-online-schame-change

    在表数据量很大的时候直接添加字段,以及其他表结构修改,会严重影响线上使用,而且耗费时间很长:使用这个工具可以很好的在线修改表结构. 好处: 降低主从延时的风险 可以限速.限资源,避免操作时MySQL负 ...

  2. Eclipse中添加Shell脚本(如start.sh)

    Eclipse中添加Shell脚本(如start.sh)       使用eclipse时,我们有时候会在自己的工程文件下添加一些脚本(比如将Qt代码在eclipse中运行生成moc文件时,或者要拷贝 ...

  3. [双目视差] 立体匹配算法推理 - SGBM算法(一)

    文章目录 立体匹配算法推理 - SGBM算法(一) 一.SGBM与SGM的区别 二.代价计算 立体匹配算法推理 - SGBM算法(一) SGBM立体匹配算法,总体来讲包含以下6个步骤: Preproc ...

  4. Nginx 面试题总结大全

    转载请注明出处: 1 介绍下nginx特点与常用模块 2 nginx特点详细 3 反向代理和正向代理 4 负载均衡策略有哪些 5 Nginx如何实现动静分离?  6 Nginx 常用命令有哪些? 7 ...

  5. 从七个方面聊聊linux到底强在哪

    从事计算机相关行业的同学不难发现,身边总有一些朋友在学习linux,有的开发同学甚至自己的电脑就是它.经常听他们说linux如何好用等等.那么linux到底好在那里,能让大家如此喜欢.这也是我经常问自 ...

  6. Flutter 如何将代码显示到界面上

    前言 如何优雅的将项目中的代码,亦或是你的demo代码展示到界面上?本文对使用简单.便于维护且通用的解决方案,进行相关的对比和探究 为了节省大家的时间,把最终解决方案的相关接入和用法写在前面 预览代码 ...

  7. 2022-04-23:给定你一个整数数组 nums 我们要将 nums 数组中的每个元素移动到 A 集合 或者 B 集合中 使得 A 集合和 B 集合不为空,并且 average(A) == aver

    2022-04-23:给定你一个整数数组 nums 我们要将 nums 数组中的每个元素移动到 A 集合 或者 B 集合中 使得 A 集合和 B 集合不为空,并且 average(A) == aver ...

  8. 2022-12-30:某天小美进入了一个迷宫探险,根据地图所示,这个迷宫里有无数个房间 序号分别为1、2、3、...入口房间的序号为1 任意序号为正整数x的房间,都与序号 2*x 和 2*x + 1

    2022-12-30:某天小美进入了一个迷宫探险,根据地图所示,这个迷宫里有无数个房间 序号分别为1.2.3.-入口房间的序号为1 任意序号为正整数x的房间,都与序号 2x 和 2x + 1 的房间之 ...

  9. 2020-11-20:java中,听说过CMS的并发预处理和并发可中断预处理吗?

    福哥答案2020-11-20:[答案来自此链接:](http://bbs.xiangxueketang.cn/question/391)1.首先,CMS是一个关注停顿时间,以回收停顿时间最短为目标的垃 ...

  10. Java网络编程----通过实现简易聊天工具来聊聊BIO

    IO模型即输入输出模型,我们今天主要来聊的是java网络编程中的IO模型---BIO模型.BIO即阻塞式IO,Blocking IOblocking [ˈblɒkɪŋ] v. 堵塞; 阻塞; 堵住(某 ...