Closed zzjin closed 1 year ago
clusterFile
actions
readme
operator
provider
cli
terminal
GUI
编写镜像(actions)sealos
build
readme.md
.sealos-actions
push
可以修改readme和tag信息
TODO: Demo案例
TODO: Image Hub (管理中心. 实际image的blob可以继续放在docker.io/或者阿里云镜像)
对于常见的已有的应用, 其本身可能有多种模式来运行在k8s上, 我们通过抽象一层provider来进行统一的与独立的管理与封装 目前总结有三种应用模式:
mysql-operator
sealos cloud
kubernetes-dashboard
AFFiNE
下面详细的描述不同模式下的设计思路与实现方式
pgsql
这一类的应用, 是会有一个全局的管理器operator去监听实际的业务/镜像的cr, 来实际的创建需要的资源. 比如: mysql,redis,pgsql 等等
mysql
redis
flowchart LR cli[CLI] -- command --> po cli -- actions --> pp gui[GUI] -- all --> pp subgraph one[all-in-one manage] pp[pgsql-provider] --> po[pgsql-operator] po --> pgsql[pgsql-image] end
这种模式的应用, 实际 Image Hub 推送与启动的是sealos提供的provider服务,通过provider服务去安装operator服务,再通过operator去监听实际的业务镜像的cr, 来实际的创建需要的资源.
Image Hub
Note: 使用一个自己编写的provider的好处在于, 可以在不修改上下游的任何image的情况下(可以直接使用现成的operator和image的cr, 不需要任何重新封装), 实现整体资源的整体编排与管控
最终的pgsql的cluster的cr:
cluster
cr
pgsql.yaml
apiVersion: "acid.zalan.do/v1" kind: postgresql metadata: name: acid-minimal-cluster namespace: ns-xxx spec: # image: labring/postgres:latest # image for actions or provider ??? teamId: "acid" volume: size: 1Gi numberOfInstances: 3 users: zalando: # database owner - superuser - createdb test_user: [] # role for application test databases: test: test # dbname: owner preparedDatabases: bar: {} postgresql: version: "14"
CLI模式下面,用户其实可以直接与operator打交道,实际provider就成为简单的提供actions的注入与管理
sealos run labring/pgsql-provider:latest #安装provider-会内部安装operator sealos apply -f pgsql.yaml #启动一个pgsql的集群 kubectl get pgsql -n ns-xxxx #查看当前启动的集群信息 sealos delete -f pgsql.yaml #删除一个pgsql的集群 #更新一个pgsql的集群 How to? sealos actions update pgsql --env=http://pgsql.ns-xxx.cluster.local --version=latest
说明: 这里安装的是pgsql-provider,是因为我们需要我们自己实现的这个provider来提供actions的能力
pgsql-provider
image hub
postgres
postgres-provider
postgres-operator
这一类的应用, 会在用户的ns内启动一组pod去提供统一的对外服务, pod是完全独立于自己的ns的, 只有自己能够使用, 比如: AFFiNE,wordpress 等等
wordpress
flowchart LR cli[CLI] --> ns[User Namespace] cli -- actions? --> ns gui[GUI] --> ns gui -- actions? --> ns ns --> cr[User AFFiNE]
这种模式的应用, 如果应用提供方需要支持actions的功能, 就需要重新打包自己的镜像来做支持. 同理, 如果需要自定义计费, 也需要实现计费的插件
CLI模式下面, 使用方式与正常的安装无异
sealos run labring/affine:latest -n ns-xxx sealos actions update affine --version=latest #自定义actions,如果有的话
说明: 这里是直接安装到用户的ns下面的普通应用
AppManager
这一类的应用, 基本上全局只有一组pod去提供统一的对外服务, 多人其实共用的是一套服务能力, 基本都是单纯的web界面应用. 比如: kubernetes-dashboard,redis-insight,kuboard,phpmyadmin,sealos cloud任务管理器
redis-insight
kuboard
phpmyadmin
sealos cloud任务管理器
flowchart LR cli[CLI] --> cr[GLobal Kubernetes Dashboard] cli -- actions? --> cr gui[GUI] --> cr gui -- actions? --> cr
这种模式的应用, 和第二种模式是一样的, 需要应用提供方去支持actions/metering功能
这种模式下没有cli的特殊需求或者单独的命令
kubernetes-dashboard的demo
这种模式下, 其实应用一直在后台全局的运行, AppManager就是单纯的负责吧图标/页面相关数据装载到用户的空间就好
https://github.com/labring/sealos/issues/1902
This issue has been automatically closed because we haven't heard back for more than 60 days, please reopen this issue if necessary.
APP-Manager 核心需求流程与设计思路
关键名词:
clusterFile
+actions
集群镜像readme
operator
第三方维护,不做修改provider
sealos维护,提供多集群管理,action操作透出cli
/terminal
/GUI
*镜像发布流程:
编写镜像(actions)sealos
CLI下
build
:readme.md
,.sealos-actions
数据push
:GUI下(sealos cloud image-hub web interface)
可以修改readme和tag信息
TODO: Demo案例
TODO: Image Hub (管理中心. 实际image的blob可以继续放在docker.io/或者阿里云镜像)
设计模式综述
对于常见的已有的应用, 其本身可能有多种模式来运行在k8s上, 我们通过抽象一层
provider
来进行统一的与独立的管理与封装 目前总结有三种应用模式:operator
, 实际通过监听cr的创建来管理资源, 比如mysql-operator
sealos cloud
内的所有用户都可以访问这一个唯一的资源, 比如kubernetes-dashboard
AFFiNE
下面详细的描述不同模式下的设计思路与实现方式
目的: 用户希望创建一个
pgsql
的高可用集群模式抽象
这一类的应用, 是会有一个全局的管理器
operator
去监听实际的业务/镜像的cr, 来实际的创建需要的资源. 比如:mysql
,redis
,pgsql
等等Note: 使用一个自己编写的provider的好处在于, 可以在不修改上下游的任何image的情况下(可以直接使用现成的operator和image的cr, 不需要任何重新封装), 实现整体资源的整体编排与管控
使用
pgsql
作为案例说明最终的
pgsql
的cluster
的cr
:pgsql.yaml
CLI下
CLI模式下面,用户其实可以直接与operator打交道,实际provider就成为简单的提供actions的注入与管理
说明: 这里安装的是
pgsql-provider
,是因为我们需要我们自己实现的这个provider
来提供actions
的能力GUI下
sealos cloud
image hub
应用postgres
详情页postgres
@lingdiepostgres-provider
(如果集群内没安装的话)postgres-operator
(如果集群内没安装的话)postgres-provider
的图标安装到用户界面上postgres
图标postgres-provider
应用目的: 用户希望使用独立的应用
AFFiNE
模式抽象
这一类的应用, 会在用户的ns内启动一组pod去提供统一的对外服务, pod是完全独立于自己的ns的, 只有自己能够使用, 比如:
AFFiNE
,wordpress
等等CLI下
CLI模式下面, 使用方式与正常的安装无异
说明: 这里是直接安装到用户的ns下面的普通应用
GUI下
sealos cloud
image hub
应用AFFiNE
详情页AFFiNE
AppManager
系统安装AFFiNE
AppManager
系统把AFFiNE
的图标安装到用户界面上AFFiNE
图标AFFiNE
应用目的: 用户希望访问
kubernetes-dashboard
进行管理模式抽象
这一类的应用, 基本上全局只有一组pod去提供统一的对外服务, 多人其实共用的是一套服务能力, 基本都是单纯的web界面应用. 比如:
kubernetes-dashboard
,redis-insight
,kuboard
,phpmyadmin
,sealos cloud任务管理器
CLI下
这种模式下没有cli的特殊需求或者单独的命令
GUI下
kubernetes-dashboard的demo
sealos cloud
image hub
应用kubernetes-dashboard
详情页kubernetes-dashboard
kubernetes-dashboard
的图标安装到用户界面上kubernetes-dashboard
图标kubernetes-dashboard
应用这种模式下, 其实应用一直在后台全局的运行,
AppManager
就是单纯的负责吧图标/页面相关数据装载到用户的空间就好Provider的作用与边界条件
三个实体: