继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

使用GitOps和Sveltos构建自己的事件驱动型内部开发者平台

慕斯709654
关注TA
已关注
手记 323
粉丝 38
获赞 183
看看如何搭建一个基于事件的云环境,与云提供商使用的架构相似

注意: 这是一份需要具备 Kubernetes 和 Helm 使用经验的动手指南。为了跟随本教程的步骤,你还需要三个正在运行的 Kubernetes 集群。

如果你支持开源并认同这一理念,请考虑给这个项目点个 ⭐️ 以支持这些出色的工具的开发者

您的事件驱动型云

想象你是一位访问提供商XY门户的用户,正在探索他们的数据库即服务(DbaaS)或托管数据库产品。点击一个按钮或调用API(如果有提供的话),然后——你的数据库实例就会准备好。但你有没有想过,这个数据库是不是真的运行在传统的虚拟机上?这感觉更像是在一个Kubernetes集群里运行,对吧?你有没有想过,他们是如何基于内部开发者平台来构建这个云环境,并将其部署到门户上的呢?

让我们顺着这个想法继续想下去:想象一下数据库确实运行在Kubernetes上。当你点击 “创建” 按钮的时候会发生什么?这个操作会触发一个事件资源,指示何时以及如何部署数据库集群。这时,Sveltos 就开始发挥作用了,负责将部署管理到适当的集群中,获取所需的配置,并提供你需要的详细信息,使你能够无缝地连接到你的数据库。

虽然我不能透露所有像主要云服务提供商那样的云的技术细节(让我们避免任何法律问题!),或者也许我会自己搭建一个IDP解决方案。我将带你搭建一个类似的事件驱动型云架构。我们将逐一介绍每个组件,到最后,你将对这种架构有一个扎实的理解——甚至可能你自己也能搭建出一个基于IDP的云!

快速浏览

在我们开始之前,首先,这里有几个要点你需要知道:本指南从头到尾都是实战操作,从零开始起步!你只需要准备三个运行中的集群:

  1. 管理群组
  2. 服务团队
  3. 工作负载及应用团队

我们将按以下步骤来:

  1. 安装先决条件:安装 sveltosctlcert-managersveltos,并在管理集群上应用所需的标签。
  2. 注册服务集群:准备服务集群以进行部署管理。
  3. 部署数据库操作符:在服务集群上安装 cloudnative-pg 操作符。
  4. 自动化数据库部署:让 Sveltos 自动部署一个 Postgres 数据库实例。
  5. 注册工作负载集群:将工作负载集群连接到架构。
  6. 部署应用:启动一个与 Postgres 数据库连接的应用。

图1:你会选哪条路呢?

咱们直接说正题。下面有两部分,分别是A和B。A是一个详细的指南,会解释背后发生了哪些事。B是一个快速部署的方法,无需真正理解,你可以相信任何你想要相信的事情。

咱们从A或B路线开始吧!

Path A: 深入研究

在这节里,我们将一起一步步地进行,解释每个命令的作用,让你更好地了解背后发生了什么。

1. 安装 sveltosctl、cert-manager 和 sveltos,并在管理集群上添加标签。

首先,我们来安装sveltosctl(可以从这里下载),这是一个用于与Sveltos交互的命令行工具。这个工具将帮助我们跨集群管理部署。

这里是如何安装它:

#MacOS系统  
# 下载并安装sveltosctl工具到/usr/local/bin/sveltosctl  
sudo wget https://github.com/projectsveltos/sveltosctl/releases/download/v0.41.1/sveltosctl-darwin-arm64 -O /usr/local/bin/sveltosctl  
# 设置权限,使下载的文件可执行  
sudo chmod +x /usr/local/bin/sveltosctl  

#Linux系统  
# 下载并安装sveltosctl工具到/usr/local/bin/sveltosctl  
sudo wget https://github.com/projectsveltos/sveltosctl/releases/download/v0.41.1/sveltosctl-linux-amd64 -O /usr/local/bin/sveltosctl  
# 设置权限,使下载的文件可执行  
sudo chmod +x /usr/local/bin/sveltosctl

图2:在客户端设备上安装Sveltosctl软件

现在,我们来用Helm安装一下Cert-Manager。这个工具帮我们管理证书,这对于集群间的安全通讯来说非常重要。

helm install cert-manager jetstack/cert-manager --namespace cert-manager --create-namespace --version v1.16.1 --set crds.enabled=true

注:helm 是一个包管理工具,用于管理和部署 Kubernetes 应用程序。cert-manager 是一个 Kubernetes 自定义资源,用于自动管理和处理 TLS/SSL 证书。namespace 是 Kubernetes 中用于隔离不同组或用户的资源管理方式。这里的命令是在 cert-manager 命名空间中安装 cert-manager 并设置相应的参数。

图3:安装Cert-Manager的Helm Chart包

接下来,我们将通过Helm来部署Sveltos栈。在这个步骤中,将在我们的管理集群上设置Sveltos的核心组件。

    helm install projectsveltos projectsveltos/projectsveltos -n projectsveltos --create-namespace

此命令用于在projectsveltos 命名空间中安装 Projectsveltos Helm 图表。

图4:安装Projectsveltos的Helm Chart

给管理集群打上标签有助于 Sveltos 识别和组织各类集群,从而简化后续部署。

kubectl label sveltoscluster -n mgmt mgmt type=mgmt

注释:此命令用于为名为 sveltoscluster 的集群添加标签,指定命名空间为 mgmt,标签为 type=mgmt

图5:标签管理集群

为了允许 Sveltos 使用诸如 ConfigMapsSecrets 等资源,我们需要赋予特定权限。以下是具体步骤,如何修补 addon-controller-role-extra ClusterRole

    kubectl patch clusterrole addon-controller-role-extra --type='json' -p='[  
      {  
        "op": "add",  
        "path": "/rules",  
        "value": [  
          {  
            "apiGroups": [""],  
            "resources": ["configmaps", "secrets"],  
            "verbs": ["*"]  
          }  
        ]  
      }  
    ]'

注:此命令用于为 addon-controller-role-extra 集群角色添加对 configmapssecrets 的资源访问权限。

恭喜你!你完成了基本设置。我们继续来做第二步吧。

2. 注册服务集群账号

这一步非常简单,多亏了 sveltosctl ,以下是连接管理集群和服务集群的步骤:

在命令行输入以下命令:

kubectl create 命名空间 service-cluster  
sveltosctl 注册 集群 --命名空间=service-cluster --集群=service-cluster --fleet-cluster-context=service-cluster --标签=type=services

图6:注册服务集群,并给它标上标签。

在这一步里,我们连接了管理集群与受管服务集群。但是,让我们看看提供的参数,更好地理解一下。

--namespace=service-cluster:将为受管集群在管理集群中创建命名空间

--cluster=service-cluster:会在名为sveltoscluster的CustomResource管理集群中指定一个标识符。

--fleet-cluster-context=service-cluster:将使用你的上下文名来连接应由 sveltos 管理的集群。比如我这里的上下文名是 service-cluster

--labels=types=services:这会将标签(label)添加到所加入的托管集群,并允许通过标签在 sveltoscluster 自定义资源中部署应用,其中 sveltoscluster 允许基于标签部署应用。

使用以下命令来验证标签:

    kubectl get sveltoscluster -A --show-labels  

    NAMESPACE          NAME               READY   VERSION:        标签:  
    mgmt               mgmt               true    v1.29.2+k3s1     projectsveltos.io/k8s-version=v1.29.2,sveltos-agent=存在,type=管理  
    service-cluster    service-cluster    true    v1.29.2+k3s1     projectsveltos.io/k8s-version=v1.29.2,sveltos-agent=存在,type=服务

这样的设置使 Sveltos 能够识别并管理带有标签的服务集群,这在部署应用时非常有用。

如果你对 Sveltos 管理附加组件的方式有兴趣,可以进一步探索更多资源。现在,让我们继续部署 [cloudnative-pg](https://cloudnative-pg.io) 运算符来帮助在服务集群上设置托管服务。

3. 在服务集群中部署 cloudnative-pg 操作符

要部署 CloudNative-PG 操作符,我们需要在管理集群上应用一个 ClusterProfile 自定义资源对象。这个 ClusterProfile 告诉 Sveltos 在具有特定标签的集群上部署操作符(operator)。

运行以下命令来应用ClusterProfile

运行以下命令来应用云原生 PostgreSQL 配置文件:

kubectl apply -f https://raw.githubusercontent.com/projectsveltos/sveltos/main/docs/assets/cloudnative-pg.yaml

完成这一步后,我们的设置就会是这样。

图7:根据ClusterProfile配置部署PG-Operator组件

ClusterProfile 是什么?

一个 ClusterProfile 类似于一个蓝图,定义了应该部署在带有特定标签的集群上的资源。在这种情况下,该配置档针对带有 type=services 标签的集群,并指示 Sveltos 在那里安装 CloudNative-PG Helm chart。这里是一个示例配置档。

---
apiVersion: config.projectsveltos.io/v1beta1
kind: ClusterProfile
metadata:
  name: deploy-cnpg
spec:
  clusterSelector:
    matchLabels:
      type: 服务
  sync: 同步
  helm图表清单:
  - repositoryURL: https://cloudnative-pg.github.io/charts
    repositoryName: cloudnative-pg
    chartName: 图表名称
    chartVersion: 图表版本
    releaseName: 发布名称
    releaseNamespace: 发布命名空间
    helm操作: 安装

在本例中,带有 type=services 标签的任何集群都将自动安装 CloudNative-PG Helm 图,并持续同步,按照指定的方式。

要检查部署在服务集群中的资源,你可以用这些方法。

    sveltosctl 显示插件列表   

    +-----------------------------------+----------------------------+------------------+-----------------------------------+---------+-------------------------------+---------------------------------------------+  
    |              集群                |       资源类型             |    命名空间       |               名称                | 版本     |             时间              |                  配置文件名称              |  
    +-----------------------------------+----------------------------+------------------+-----------------------------------+---------+-------------------------------+---------------------------------------------+  
    | service-cluster/service-cluster   | Helm 图表                 | cnpg-system      | cnpg                              | 0.22.1  | 2024-11-02 11:35:40 +0100 CET | ClusterProfile/deploy-cnpg                  |  
    +-----------------------------------+----------------------------+------------------+-----------------------------------+---------+-------------------------------+---------------------------------------------+

这表明 CloudNative-PG 操作符已经在服务集群上成功部署。

4. 让 Sveltos 自动部署一下 PostgreSQL

在这一步中,我们将配置 Sveltos 使其自动在带有 postgres=required 标签的集群上部署 PostgreSQL 数据库。每当 Sveltos 检测到带有此标签的集群时,它将开始部署流程。

  • 在一个集群上创建一个 PostgreSQL 实例。
  • 通过负载均衡器服务暴露数据库。
  • 获取凭证信息和连接信息,包括外部 IP 和端口。

要开启这个功能,你可以使用以下设置。

    kubectl apply -f https://raw.githubusercontent.com/projectsveltos/sveltos/main/docs/assets/auto-deploy-postgres-cluster.yaml  # 这条命令会应用一个自动部署PostgreSQL集群的配置文件。
    kubectl apply -f https://raw.githubusercontent.com/projectsveltos/sveltos/main/docs/assets/fetch-postgres-data.yaml  # 这条命令会应用一个用于获取PostgreSQL数据的配置文件。

这些设置创建了两个工作流程:

  • 自动部署 PostgreSQL 数据库集群:在触发后,在带有 type=services 标签的集群上部署 PostgreSQL。
  • 获取 PostgreSQL 数据库集群信息:根据特定触发事件获取 PostgreSQL 集群的连接信息和凭据。

第一个工作流程会是这样的,比如:

图8:工作流程1:自动部署 PostgreSQL 集群

在 Sveltos 中,EventSource 定义了要监控的特定事件(例如资源的创建或删除),而 EventTrigger 则指定了在这些事件发生时要部署的插件或应用。

这是应用资源的样子。

    #  any SveltosCluster with label postgres: required is created, a postgres cluster will be deployed.
    # 源集群是管理集群,目标集群是带有标签 type:services 的集群。
    apiVersion: lib.projectsveltos.io/v1beta1
    kind: EventSource
    metadata:
      name: detect-cluster-requiring-postgres
    spec:
      collectResources: true
      resourceSelectors:
      - group: "lib.projectsveltos.io"
        version: "v1beta1"
        kind: "SveltosCluster"
        labelFilters:
        - key: postgres
          operation: Equal
          value: required
    ---
    apiVersion: lib.projectsveltos.io/v1beta1
    kind: EventTrigger
    metadata:
      name: deploy-postgres-cluster
    spec:
      sourceClusterSelector:
        matchLabels:
          type: mgmt
      destinationClusterSelector:
        matchLabels:
          type: services
      eventSourceName: detect-cluster-requiring-postgres
      oneForEvent: true
      policyRefs:
      - name: postgres-cluster
        namespace: default
        kind: ConfigMap
    ---
    apiVersion: v1
    data:
      cluster.yaml: |
        apiVersion: postgresql.cnpg.io/v1
        kind: Cluster
        metadata:
          name: cluster-{{ .Resource.metadata.name }}
          namespace: {{ .Resource.metadata.namespace }}
          labels:
            cluster: {{ .Resource.metadata.namespace }}-{{ .Resource.metadata.name }}
        spec:
          instances: 3
          bootstrap:
            initdb:
              database: todo
          storage:
            size: 1Gi
          managed:
            services:
              disabledDefaultServices: ["ro", "r"]
              additional:
              - selectorType: rw
                serviceTemplate:
                  metadata:
                    name: cluster-rw-lb
                  spec:
                    type: LoadBalancer
    kind: ConfigMap
    metadata:
      annotations:
        projectsveltos.io/instantiate: ok
      name: postgres-cluster
      namespace: default

这是将会发生的情况的解释以及Sveltos将如何处理这种情况。

  • EventSource 的定义:监控带有 postgres: required 标签的 SveltosCluster 对象的创建。当创建了这样的标记集群时,Sveltos 会识别该事件为重要事件。
  • EventTrigger 的定义:EventTrigger deploy-postgres-cluster 在该事件发生时触发。它配置为在目标集群(带有 type: services 标签)中部署 PostgreSQL 集群,源集群是带有 type: mgmt 标签的管理集群。
  • PostgreSQL 集群部署:EventTrigger 引用了包含 PostgreSQL 集群模板的 ConfigMappostgres-cluster)。当事件被触发时,Sveltos 使用该模板在目标集群中创建 PostgreSQL 集群。模板动态地包含了原集群的名称和命名空间等详细信息。

总之,Sveltos 会查看带有特定标签的集群,当发现匹配时,自动部署一个 PostgreSQL 集群在指定的目标集群里。

第二个工作流程是由两个工作流程组合而成,它看起来像:

图9:工作流2:抓取PostgreSQL集群数据

在此设置中,Sveltos 被配置为从服务集群中提取 PostgreSQL 凭证和负载均衡器的相关信息,并将这些信息在管理集群中使可用,以便在管理集群中使用。

获取 PostgreSQL 凭据

  • 事件来源 : detect-credentials-secret 监控那些带有标签 cnpg.io/reload: trueSecret 对象,表明这些秘密包含 PostgreSQL 凭证。
  • 触发器 : 当检测到带有 type: services 标签的集群中的此类 Secret 时,credentials-secret 会被激活,从而启动创建一个包含 PostgreSQL 凭证的 Secret 对象。
  • ConfigMap 模板 : credentials ConfigMap 包含一个模板,用于在管理集群中创建名为 pg-credentialsSecret 对象。此模板动态地从服务集群中的原始 Secret 中提取用户名和密码,让 Sveltos 能够安全地复制这些凭证。

查询负载均衡器信息:

  • 事件来源 : detect-loadbalancer 会监控 services 集群中标记为 cnpg.io/isManaged: trueService 对象,表明这些是受管理的 PostgreSQL 负载均衡器。
  • 事件触发器 : 当检测到这样的 Service 时,cnpg-loadbalancer-data 会触发,并在管理集群中创建一个 ConfigMap,存储着负载均衡器的外部 IP 和端口信息。
  • ConfigMap 模板 : 使用 loadbalancer-data ConfigMap 模板在管理集群中生成一个名为 pg-loadbalancer-data 的 ConfigMap。该 ConfigMap 包含负载均衡器的外部 IP 地址和端口,从而允许从管理集群外部可访问 PostgreSQL 实例。

这样,管理集群就可以安全且灵活地访问服务集群中实例的PostgreSQL凭证和连接信息。

接下来,我们按照以下步骤来注册工作负载集群来触发事件。

5. 注册工作集群。

现在,让我们使用 Sveltos 来注册工作负载集群。通过给该集群加上 postgres=required 的标签,我们让 Sveltos 在服务集群中部署一个新的 PostgreSQL 实例并获取所需的连接信息。这里是如何注册工作负载集群。

使用 `kubectl` 创建名为 `workload-cluster` 的命名空间,然后使用 `sveltosctl` 注册集群,指定命名空间为 `workload-cluster`,集群名称也为 `workload-cluster`,并设置 `fleet-cluster-context` 为 `workload-cluster`,同时添加标签 `postgres=required`。

一旦集群注册成功,Sveltos 会自动触发我们在第 4 步设置的工作流(Workflow)。以下是幕后发生的情况:

  • 触发部署并收集数据
    Sveltos 使用之前 EventTrigger 配置中定义的模板创建 ClusterProfilesConfigMaps。基于这些模板,它在服务集群的 workload-cluster 命名空间下部署一个 PostgreSQL 集群。它还会将数据库的连接信息(例如凭证和负载均衡器 IP 地址)存储到管理集群的 workload-cluster 命名空间中。
  • 自动创建 ClusterProfile 和 ConfigMap 对象
    Sveltos 生成一个 ClusterProfile,该配置针对类型为 services 的集群,并引用该从模板创建的新 ConfigMap。以下是一个生成的 ClusterProfile 示例:

这会看起来像:

图10:将PG-Cluster部署到Service-Cluster上并获取PG-Data数据

所以 Sveltos 根据目标集群创建匹配的 ClusterProfile。它会让 ClusterProfile 引用新创建的 ConfigMap

你可以看到它是如何创建一个新的_ClusterProfile_的。

apiVersion: config.projectsveltos.io/v1beta1
kind: ClusterProfile
metadata:
finalizers:
- clusterprofilefinalizer.projectsveltos.io
generation: 1
labels:
  eventtrigger.lib.projectsveltos.io/clusterNamespace: mgmt
  eventtrigger.lib.projectsveltos.io/clustername: mgmt
  eventtrigger.lib.projectsveltos.io/clustertype: Sveltos
  eventtrigger.lib.projectsveltos.io/eventreportname: detect-cluster-requiring-postgres
  eventtrigger.lib.projectsveltos.io/eventtriggername: deploy-postgres-cluster
  eventtrigger.lib.projectsveltos.io/resourcename: workload-cluster
  eventtrigger.lib.projectsveltos.io/resourcenamespace: workload-cluster
  projectsveltos.io/cluster-name: service-cluster
  projectsveltos.io/cluster-profile-name: sveltos-j7dn263no745a5e58uya
  projectsveltos.io/cluster-type: Sveltos
name: sveltos-j7dn263no745a5e58uya
spec:
  clusterSelector:
    matchLabels:
      type: services
  continueOnConflict: false
  policyRefs:
  - deploymentType: Remote
    kind: ConfigMap
    name: sveltos-bnnnp8dv2ndb8i7dx1vo
    namespace: projectsveltos
  reloader: false
  stopMatchingBehavior: WithdrawPolicies
  syncMode: Continuous
  tier: 100

在这里你可以看到 ConfigMap 引用了用于创建集群的 CustomResource

apiVersion: v1  
kind: 配置映射  
metadata:  
  labels:  
    eventtrigger.lib.projectsveltos.io/clusterNamespace: mgmt  
    eventtrigger.lib.projectsveltos.io/clustername: mgmt  
    eventtrigger.lib.projectsveltos.io/clustertype: Sveltos  
    eventtrigger.lib.projectsveltos.io/eventreportname: 检测需要PostgreSQL的集群  
    eventtrigger.lib.projectsveltos.io/eventtriggername: 部署PostgreSQL集群  
    eventtrigger.lib.projectsveltos.io/refname: postgres-cluster  
    eventtrigger.lib.projectsveltos.io/refnamespace: default  
    eventtrigger.lib.projectsveltos.io/resourcename: workload-cluster  
    eventtrigger.lib.projectsveltos.io/resourcenamespace: workload-cluster  
  name: sveltos-bnnnp8dv2ndb8i7dx1vo  
  namespace: 命名空间  
data:  
  cluster.yaml: |  
    apiVersion: postgresql.cnpg.io/v1  
    kind: 集群  
    metadata:  
      name: cluster-workload-cluster  
      namespace: workload-cluster  
      labels:  
        cluster: workload-cluster-workload-cluster  
    spec:  
      实例: 3  
      引导:  
        初始化数据库:  
          数据库: todo  
      存储:  
        大小: 1Gi  
      管理:  
        服务:  
          禁用默认服务: ["ro", "r"]  
          额外:  
          - 选择器类型: rw  
            服务模板:  
              元数据:  
                名称: cluster-rw-lb  
              规范:  
                类型: 负载均衡器  

当然,这只是其中一个例子——你可以做更多的事情,比如使用Helm安装一个图表,从而无需在_ConfigMap_中指定它(详见结尾部分)。

现在,让我们验证Sveltos是否已成功部署PostgreSQL实例并获取连接信息。要检查连接信息,请使用:

kubectl get secret -n workload-cluster

# 输出
名称                                  类型     数据量   持续时间  
workload-cluster-sveltos-kubeconfig   Opaque   1      47h  
pg-credentials                        Opaque   2      47h

The pg-credentials secret 包含 PostgreSQL 凭据:

    data:  
      password: bTloa....  
      账号: d...

查看连接信息(外部IP和端口信息),可以使用:

kubectl get configmap -n workload-cluster service-cluster-loadbalancer-data -oyaml                                                                               04.11.24  11:32:44  management-cluster/default ⎈  

# 输出像这样  
apiVersion: v1  
data:  
  external-ip: 212.2.....  
  port: "5432"

这完成了设置,现在管理集群可以安全且自动地获取PostgreSQL实例的连接信息和凭证。

6. 部署一个能访问Postgres数据库的应用程序

现在可以使用 Sveltos 在 workload-cluster 集群中部署一个(任务)。这个(任务)将访问运行在 services-cluster 中的 Postgres 数据库服务器。

这个“任务”以模板的形式存在,并将在所有带有 type=app 标签的集群中由 Sveltos 部署。

使用以下命令应用 YAML 文件:

kubectl apply -f https://raw.githubusercontent.com/projectsveltos/sveltos/main/docs/assets/job-to-create-table.yaml

使用以下命令为工作负载集群添加标签:

kubectl label sveltoscluster -n workloadcluster workload-cluster type=app

注意:这些命令用于在 Kubernetes 环境中执行特定操作。第一个命令应用一个 YAML 文件,该文件定义了一个作业来创建表。第二个命令为指定的工作负载集群添加了一个标签,以便进行进一步的管理和识别。

它将会看起来像这样:

在可以访问服务集群中PG-DB的工作集群上部署一个任务

它连接到工作负载集群,创建一个新的ClusterProfile,指示Sveltos在该集群上部署一个type=appJob

如果你仔细看看ClusterProfile

apiVersion: config.projectsveltos.io/v1beta1
kind: ClusterProfile
metadata:
  finalizers:
  - 冒号clusterprofilefinalizer.projectsveltos.io冒号
  name: deploy-job
spec:
  clusterSelector:
    matchLabels:
      type: app
  continueOnConflict: false
  policyRefs:
  - deploymentType: Remote
    kind: ConfigMap
    name: job-to-create-table
    namespace: default
  reloader: false
  stopMatchingBehavior: WithdrawPolicies
  syncMode: Continuous
  templateResourceRefs:
  - identifier: 凭证
    resource:
      apiVersion: v1
      kind: Secret
      name: pg-credentials
  - identifier: 负载均衡器
    resource:
      apiVersion: v1
      kind: ConfigMap
      name: pg-loadbalancer-data
  tier: 100

这里发生了什么。

  • Sveltos 使用名为 job-to-create-table 的 ConfigMap,在 default 命名空间中。
  • 它用来自 Secret pg-credentialsConfigMap pg-loadbalancer-data 中的数据替换模板中的值,根据标签 type=app(即 workload-cluster)匹配的命名空间。
  • 然后,Sveltos 使用这些信息在远程集群中创建一个 Job,该 Job 匹配 type=app 标签(例如 workload-cluster)。

你可以检查资源配置是否按预期运行。

    kubectl get clustersummaries -A -owide  

    NAMESPACE          名称                                                   HELMCHARTS    KUSTOMIZEREFS   POLICYREFS  
    命名空间: mgmt       名字: sveltos-1a6ec1ce3bandndeqixd-sveltos-mgmt      HELMCHARTS    KUSTOMIZEREFS   POLICYREFS   已配置
    命名空间: mgmt       名字: sveltos-p46z943e935h2vtev56i-sveltos-mgmt      HELMCHARTS    KUSTOMIZEREFS   POLICYREFS   已配置
    命名空间: service-cluster  名字: deploy-cnpg-sveltos-service-cluster         HELMCHARTS    KUSTOMIZEREFS   POLICYREFS   已配置
    命名空间: service-cluster  名字: sveltos-xind5b6qvvrnbeur2flf-sveltos-service-cluster  HELMCHARTS    KUSTOMIZEREFS   POLICYREFS   已配置
    命名空间: workload-cluster 名字: deploy-job-sveltos-workload-cluster         HELMCHARTS    KUSTOMIZEREFS   POLICYREFS   已配置

你现在应该能看到在工作负载集群中正在运行的 Job todo-table

B路:捷径
1. 安装 sveltosctl、cert-manager 和 sveltos,然后在管理集群上添加标签到管理集群
     #MacOs  
    # 下载并安装 sveltosctl for macOS
    sudo wget https://github.com/projectsveltos/sveltosctl/releases/download/v0.41.1/sveltosctl-darwin-arm64 -O /usr/local/bin/sveltosctl  
    sudo chmod +x /usr/local/bin/sveltosctl  

    #Linux  
    # 下载并安装 sveltosctl for Linux
    sudo wget https://github.com/projectsveltos/sveltosctl/releases/download/v0.41.1/sveltosctl-linux-amd64 -O /usr/local/bin/sveltosctl  
    sudo chmod +x /usr/local/bin/sveltosctl  

    #Cert-Manager  
    # 使用 Helm 安装 cert-manager
    helm install cert-manager jetstack/cert-manager --namespace cert-manager --create-namespace --version v1.16.1 --set crds.enabled=true  

    #Sveltos  
    # 使用 Helm 安装 Sveltos
    helm install projectsveltos projectsveltos/projectsveltos -n projectsveltos --create-namespace  

    # 标记管理的集群
    kubectl label sveltoscluster -n mgmt mgmt type=mgmt  

    # 授予额外权限
    kubectl patch clusterrole addon-controller-role-extra --type='json' -p='[  
      {  
        "op": "add",  
        "path": "/rules",  
        "value": [  
          {  
            "apiGroups": [""],  
            "resources": ["configmaps", "secrets"],  
            "verbs": ["*"]  
          }  
        ]  
      }  
    ]'  
2. 注册服务组
# 创建服务集群的命名空间并注册集群
kubectl create ns service-cluster  
sveltosctl register cluster --namespace=service-cluster --cluster=service-cluster --fleet-cluster-context=service-cluster --labels=type=services

检查标签:看看它们是否正确。

    kubectl get sveltoscluster -A --show-labels  

    NAMESPACE          名称/NAME           就绪状态/READY   版本/VERSION        标签/LABELS  
    mgmt               mgmt               true   v1.29.2+k3s1   projectsveltos.io/k8s-version=v1.29.2,sveltos-agent=present,type=mgmt  
    service-cluster    服务集群           true   v1.29.2+k3s1   projectsveltos.io/k8s-version=v1.29.2,sveltos-agent=present,类型=服务
3. 在服务集群中部署 CloudNative-PG 操作符
kubectl apply -f https://raw.githubusercontent.com/projectsveltos/sveltos/main/docs/assets/cloudnative-pg.yaml

运行此命令来部署CloudNative PG。

现在你可以查看服务集群中部署的资源,方法如下:

    sveltosctl 显示插件信息   

    +-----------------------------------+--------------------------+------------------+-----------------------------------+---------+-------------------------------+---------------------------------------------+  
    |              集群                |       资源种类            |    命名空间       |               插件名称             | 版本号   |             时间戳            |                  配置文件                 |  
    +-----------------------------------+--------------------------+------------------+-----------------------------------+---------+-------------------------------+---------------------------------------------+  
    | service-cluster/service-cluster   | helm chart               | cnpg-system      | cnpg                              | 0.22.1  | 2024-11-02 11:35:40 +0100 CET | 部署配置文件/deploy-cnpg                  |  
    +-----------------------------------+--------------------------+------------------+-----------------------------------+---------+-------------------------------+---------------------------------------------+
4. 让 Sveltos 自动部署一个 PostgreSQL 数据库
执行以下命令来自动部署PostgreSQL集群和获取PostgreSQL数据:

kubectl apply -f https://raw.githubusercontent.com/projectsveltos/sveltos/main/docs/assets/auto-deploy-postgres-cluster.yaml
kubectl apply -f https://raw.githubusercontent.com/projectsveltos/sveltos/main/docs/assets/fetch-postgres-data.yaml


## 5\. 注册工作负载集群:
创建名为 workload-cluster 的命名空间

kubectl create ns workload-cluster

注册名为 workload-cluster 的集群,并设置相应的标签和上下文

sveltosctl register cluster --namespace=workload-cluster --cluster=workload-cluster --fleet-cluster-context=workload-cluster --labels=postgres=required


现在 Sveltos 已经部署好了 Postgres 集群环境,并获取了连接所需的必要信息。
kubectl get secret -n workload-cluster   

#结果
名称:                                  类型:     数据:   年龄:  
workload-cluster-sveltos-kubeconfig   Opaque   1      47h  
pg-credentials                        Opaque   2      47h

## 6\. 部署一个可以访问PostgreSQL数据库的应用程序

使用 kubectl 应用从 GitHub 获取的 YAML 文件,并为 sveltoscluster 添加标签
kubectl apply -f https://raw.githubusercontent.com/projectsveltos/sveltos/main/docs/assets/job-to-create-table.yaml  

kubectl label sveltoscluster -n workload-cluster workload-cluster type=app

检查是否按预期正确供应了:
kubectl get clustersummaries -A -owide  

NAMESPACE          名称(NAME)                                                   HELMCHARTS    KUSTOMIZEREFS   POLICYREFS  
mgmt               sveltos-1a6ec1ce3bandndeqixd-sveltos-mgmt                                            已提供  
mgmt               sveltos-p46z943e935h2vtev56i-sveltos-mgmt                                            已提供  
service-cluster    deploy-cnpg-sveltos-service-cluster                    已提供  
service-cluster    sveltos-xind5b6qvvrnbeur2flf-sveltos-service-cluster                                 已提供  
workload-cluster   deploy-job-sveltos-workload-cluster                                                  已提供


你现在应该能看到有`todo-table`任务在工作负载集群中运行。

**恭喜!** 您已经创建了一个事件驱动的、管理型数据库即服务(DBaaS)! 您可以通过定义作业来扩展此设置,让用户或服务共享凭证,这些用户或服务是在UI中被引用的,如前面提到的例子所示。

# 结尾

我可以想象你现在在想GitOps部分在哪里呢?标题是不是只是想引起你的注意呢?实际上,Sveltos Addon-Controller的工作流实际上是基于GitOps方法的,但要获得完整的GitOps体验效果,你可以将Sveltos与Flux CD配对——它们已经集成在一起了。为什么使用Flux CD?要部署_ClusterProfiles_和应用其他的Sveltos自定义资源,你需要使用如Flux CD这样的GitOps工具。为什么使用Flux CD?要部署_ClusterProfiles_和应用其他的Sveltos自定义资源,你需要使用如Flux CD这样的GitOps工具。为什么使用Flux CD?要部署_ClusterProfiles_和应用其他的Sveltos自定义资源,你需要使用如Flux CD这样的GitOps工具。为什么使用Flux CD?要部署_ClusterProfiles_和应用其他的Sveltos自定义资源,你需要使用如Flux CD这样的GitOps工具。为什么要使用Flux CD?要部署_ClusterProfiles_和应用其他的Sveltos自定义资源,你需要使用如Flux CD这样的GitOps工具。为什么要使用Flux CD?要部署_ClusterProfiles_和应用其他的Sveltos自定义资源,你需要使用如Flux CD这样的GitOps工具。为什么要使用Flux CD?要部署_ClusterProfiles_和应用其他的Sveltos自定义资源,你需要使用如Flux CD这样的GitOps工具。为什么要使用Flux CD?要部署_ClusterProfiles_和应用其他的Sveltos自定义资源,你需要使用如Flux CD这样的GitOps工具。为什么要使用Flux CD?要部署_ClusterProfiles_和应用其他的Sveltos自定义资源,你需要使用如Flux CD这样的GitOps工具。为什么要使用Flux CD?要部署_ClusterProfiles_和应用其他的Sveltos自定义资源,你需要使用如Flux CD这样的GitOps工具。为什么要使用Flux CD?要部署_ClusterProfiles_和应用其他的Sveltos自定义资源,你需要使用如Flux CD这样的GitOps工具。为什么要使用Flux CD?要部署_ClusterProfiles_和应用其他的Sveltos自定义资源,你需要使用如Flux CD这样的GitOps工具。为什么要使用Flux CD?要部署_ClusterProfiles_和应用其他的Sveltos自定义资源,你需要使用如Flux CD这样的GitOps工具。为什么要使用Flux CD?要部署_ClusterProfiles_和应用其他的Sveltos自定义资源,你需要使用如Flux CD这样的GitOps工具。为什么要使用Flux CD?要部署_ClusterProfiles_和应用其他的Sveltos自定义资源,你需要使用如Flux CD这样的GitOps工具。为什么要使用Flux CD?要部署_ClusterProfiles_和应用其他的Sveltos自定义资源,你需要使用如Flux CD这样的GitOps工具。为什么要使用Flux CD?要部署_ClusterProfiles_和应用其他的Sveltos自定义资源,你需要使用如Flux CD这样的GitOps工具。为什么要使用Flux CD?要部署_ClusterProfiles_和应用其他的Sveltos自定义资源,你需要使用如Flux CD这样的GitOps工具。为什么要使用Flux CD?要部署_ClusterProfiles_和应用其他的Sveltos自定义资源,你需要使用如Flux CD这样的GitOps工具。为什么要使用Flux CD?要部署_ClusterProfiles_和应用其他的Sveltos自定义资源,你需要使用如Flux CD这样的GitOps工具。为什么要使用Flux CD?要部署_ClusterProfiles_和应用其他的Sveltos自定义资源,你需要使用如Flux CD这样的GitOps工具。为什么要使用Flux CD?要部署_ClusterProfiles_和应用其他的Sveltos自定义资源,你需要使用如Flux CD这样的GitOps工具。为什么要使用Flux CD?要部署_ClusterProfiles_和应用其他的Sveltos自定义资源,你需要使用如Flux CD这样的GitOps工具。为什么要使用Flux CD?要部署_ClusterProfiles_和应用其他的Sveltos自定义资源,你需要使用如Flux CD这样的GitOps工具。为什么要使用Flux CD?要部署_ClusterProfiles_和应用其他的Sveltos自定义资源,你需要使用如Flux CD这样的GitOps工具。为什么要使用Flux CD?要部署_ClusterProfiles_和应用其他的Sveltos自定义资源,你需要使用如Flux CD这样的GitOps工具。为什么要使用Flux CD?要部署_ClusterProfiles_和应用其他的Sveltos自定义资源,你需要使用如Flux CD这样的GitOps工具。为什么要使用Flux CD?要部署_ClusterProfiles_和应用其他的Sveltos自定义资源,你需要使用如Flux CD这样的GitOps工具。为什么要使用Flux CD?要部署_ClusterProfiles_和应用其他的Sveltos自定义资源,你需要使用如Flux CD这样的GitOps工具。为什么要使用Flux CD?要部署_ClusterProfiles_和应用其他的Sveltos自定义资源,你需要使用如Flux CD这样的GitOps工具。为什么要使用Flux CD?要部署_ClusterProfiles_和应用其他的Sveltos自定义资源,你需要使用如Flux CD这样的GitOps工具。为什么要使用Flux CD?要部署_ClusterProfiles_和应用其他的Sveltos自定义资源,你需要使用如Flux CD这样的GitOps工具。为什么要使用Flux CD?要部署_ClusterProfiles_和应用其他的Sveltos自定义资源,你需要使用如Flux CD这样的GitOps工具。为什么要使用Flux CD?要部署_ClusterProfiles_和应用其他的Sveltos自定义资源,你需要使用如Flux CD这样的GitOps工具。为什么要使用Flux CD?要部署_ClusterProfiles_和应用其他的Sveltos自定义资源,你需要使用如Flux CD这样的GitOps工具。为什么要使用Flux CD?要部署_ClusterProfiles_和应用其他的Sveltos自定义资源,你需要使用如Flux CD这样的GitOps工具。为什么要使用Flux CD?要部署_ClusterProfiles_和应用其他的Sveltos自定义资源,你需要使用如Flux CD这样的GitOps工具。为什么要使用Flux CD?要部署_ClusterProfiles_和应用其他的Sveltos自定义资源,你需要使用如Flux CD这样的GitOps工具。为什么要使用Flux CD?要部署_ClusterProfiles_和应用其他的Sveltos自定义资源,你需要使用如Flux CD这样的GitOps工具。为什么要使用Flux CD?要部署_ClusterProfiles_和应用其他的Sveltos自定义资源,你需要使用如Flux CD这样的GitOps工具。为什么要使用Flux CD?要部署_ClusterProfiles_和应用其他的Sveltos自定义资源,你需要使用如Flux CD这样的GitOps工具。为什么要使用Flux CD?要部署_ClusterProfiles_和应用其他的Sveltos自定义资源,你需要使用如Flux CD这样的GitOps工具。为什么要使用Flux CD?要部署_ClusterProfiles_和应用其他的Sveltos自定义资源,你需要使用如Flux CD这样的GitOps工具。为什么要使用Flux CD?要部署_ClusterProfiles_和应用其他的Sveltos自定义资源,你需要使用如Flux CD这样的GitOps工具。为什么要使用Flux CD?要部署_ClusterProfiles_和应用其他的Sveltos自定义资源,你需要使用如Flux CD这样的GitOps工具。为什么要使用Flux CD?要部署_ClusterProfiles_和应用其他的Sveltos自定义资源,你需要使用如Flux CD这样的GitOps工具。为什么要使用Flux CD?要部署_ClusterProfiles_和应用其他的Sveltos自定义资源,你需要使用如Flux CD这样的GitOps工具。为什么要使用Flux CD?要部署_ClusterProfiles_和应用其他的Sveltos自定义资源,你需要使用如Flux CD这样的GitOps工具。为什么要使用Flux CD?要部署_ClusterProfiles_和应用其他的Sveltos自定义资源,你需要使用如Flux CD这样的GitOps工具。为什么要使用Flux CD?要部署_ClusterProfiles_和应用其他的Sveltos自定义资源,你需要使用如Flux CD这样的GitOps工具。为什么要使用Flux CD?要部署_ClusterProfiles_和应用其他的Sveltos自定义资源,你需要使用如Flux CD这样的GitOps工具。为什么要使用Flux CD?要部署_ClusterProfiles_和应用其他的Sveltos自定义资源,你需要使用如Flux CD这样的GitOps工具。为什么要使用Flux CD?要部署_ClusterProfiles_和应用其他的Sveltos自定义资源,你需要使用如Flux CD这样的GitOps工具。为什么要使用Flux CD?要部署_ClusterProfiles_和应用其他的Sveltos自定义资源,你需要使用如Flux CD这样的GitOps工具。为什么要使用Flux CD?要部署_ClusterProfiles_和应用其他的Sveltos自定义资源,你需要使用如Flux CD这样的GitOps工具。为什么要使用Flux CD?要部署_ClusterProfiles_和应用其他的Sveltos自定义资源,你需要使用如Flux CD这样的GitOps工具。为什么要使用Flux CD?要部署_ClusterProfiles_和应用其他的Sveltos自定义资源,你需要使用如Flux CD这样的GitOps工具。为什么要使用Flux CD?要部署_ClusterProfiles_和应用其他的Sveltos自定义资源,你需要使用如Flux CD这样的GitOps工具。为什么要使用Flux CD?要部署_ClusterProfiles_和应用其他的Sveltos自定义资源,你需要使用如Flux CD这样的GitOps工具。为什么要使用Flux CD?要部署_ClusterProfiles_和应用其他的Sveltos自定义资源,你需要使用如Flux CD这样的GitOps工具。为什么要使用Flux CD?要部署_ClusterProfiles_和应用其他的Sveltos自定义资源,你需要使用如Flux CD这样的GitOps工具。为什么要使用Flux CD?要部署_ClusterProfiles_和应用其他的Sveltos自定义资源,你需要使用如Flux CD这样的GitOps工具。为什么要使用Flux CD?要部署_ClusterProfiles_和应用其他的Sveltos自定义资源,你需要使用如Flux CD这样的GitOps工具。为什么要使用Flux CD?要部署_ClusterProfiles_和应用其他的Sveltos自定义资源,你需要使用如Flux CD这样的GitOps工具。为什么要使用Flux CD?要部署_ClusterProfiles_和应用其他的Sveltos自定义资源,你需要使用如Flux CD这样的GitOps工具。为什么要使用Flux CD?要部署_ClusterProfiles_和应用其他的Sveltos自定义资源,你需要使用如Flux CD这样的GitOps工具。为什么要使用Flux CD?要部署_ClusterProfiles_和应用其他的Sveltos自定义资源,你需要使用如Flux CD这样的GitOps工具。为什么要使用Flux CD?要部署_ClusterProfiles_和应用其他的Sveltos自定义资源,你需要使用如Flux CD这样的GitOps工具。为什么要使用Flux CD?要部署_ClusterProfiles_和应用其他的Sveltos自定义资源,你需要使用如Flux CD这样的GitOps工具。为什么要使用Flux CD?要部署_ClusterProfiles_和应用其他的Sveltos自定义资源,你需要使用如Flux CD这样的GitOps工具。为什么要使用Flux CD?要部署_ClusterProfiles_和应用其他的Sveltos自定义资源,你需要使用如Flux CD这样的GitOps工具。为什么要使用Flux CD?要部署_ClusterProfiles_和应用其他的Sveltos自定义资源,你需要使用如Flux CD这样的GitOps工具。为什么要使用Flux CD?要部署_ClusterProfiles_和应用其他的Sveltos自定义资源,你需要使用如Flux CD这样的GitOps工具。为什么要使用Flux CD?要部署_ClusterProfiles_和应用其他的Sveltos自定义资源,你需要使用如Flux CD这样的GitOps工具。为什么要使用Flux CD?要部署_ClusterProfiles_和应用其他的Sveltos自定义资源,你需要使用如Flux CD这样的GitOps工具。为什么要使用Flux CD?要部署_ClusterProfiles_和应用其他的Sveltos自定义资源,你需要使用如Flux CD这样的GitOps工具。为什么要使用Flux CD?要部署_ClusterProfiles_和应用其他的Sveltos自定义资源,你需要使用如Flux CD这样的GitOps工具。为什么要使用Flux CD?要部署_ClusterProfiles_和应用其他的Sveltos自定义资源,你需要使用如Flux CD这样的GitOps工具。为什么要使用Flux CD?要部署_ClusterProfiles_和应用其他的Sveltos自定义资源,你需要使用如Flux CD这样的GitOps工具。为什么要使用Flux CD?要部署_ClusterProfiles_和应用其他的Sveltos自定义资源,你需要使用如Flux CD这样的GitOps工具。为什么要使用Flux CD?要部署_ClusterProfiles_和应用其他的Sveltos自定义资源,你需要使用如Flux CD这样的GitOps工具。为什么要使用Flux CD?要部署_ClusterProfiles_和应用其他的Sveltos自定义资源,你需要使用如Flux CD这样的GitOps工具。为什么要使用Flux CD?要部署_ClusterProfiles_和应用其他的Sveltos自定义资源,你需要使用如Flux CD这样的GitOps工具。为什么要使用Flux CD?要部署_ClusterProfiles_和应用其他的Sveltos自定义资源,你需要使用如Flux CD这样的GitOps工具。为什么要使用Flux CD?要部署_ClusterProfiles_和应用其他的Sveltos自定义资源,你需要使用如Flux CD这样的GitOps工具。为什么要使用Flux CD?要部署_ClusterProfiles_和应用其他的Sveltos自定义资源,你需要使用如Flux CD这样的GitOps工具。为什么要使用Flux CD?要部署_ClusterProfiles_和应用其他的Sveltos自定义资源,你需要使用如Flux CD这样的GitOps工具。为什么要使用Flux CD?要部署_ClusterProfiles_和应用其他的Sveltos自定义资源,你需要使用如Flux CD这样的GitOps工具。为什么要使用Flux CD?要部署_ClusterProfiles_和应用其他的Sveltos自定义资源,你需要使用如Flux CD这样的GitOps工具。为什么要使用Flux CD?要部署_ClusterProfiles_和应用其他的Sveltos自定义资源,你需要使用如Flux CD这样的GitOps工具。为什么要使用Flux CD?要部署_ClusterProfiles_和应用其他的Sveltos自定义资源,你需要使用如Flux CD这样的GitOps工具。为什么要使用Flux CD?要部署_ClusterProfiles_和应用其他的Sveltos自定义资源,你需要使用如Flux CD这样的GitOps工具。为什么要使用Flux CD?要部署_ClusterProfiles_和应用其他的Sveltos自定义资源,你需要使用如Flux CD这样的GitOps工具。为什么要使用Flux CD?要部署_ClusterProfiles_和应用其他的Sveltos自定义资源,你需要使用如Flux CD这样的GitOps工具。为什么要使用Flux CD?要部署_ClusterProfiles_和应用其他的Sveltos自定义资源,你需要使用如Flux CD这样的GitOps工具。为什么要使用Flux CD?要部署_ClusterProfiles_和应用其他的Sveltos自定义资源,你需要使用如Flux CD这样的GitOps工具。为什么要使用Flux CD?要部署_ClusterProfiles_和应用其他的Sveltos自定义资源,你需要使用如Flux CD这样的GitOps工具。为什么要使用Flux CD?要部署_ClusterProfiles_和应用其他的Sveltos自定义资源,你需要使用如Flux CD这样的GitOps工具。为什么要使用Flux CD?要部署_ClusterProfiles_和应用其他的Sveltos自定义资源,你需要使用如Flux CD这样的GitOps工具。为什么要使用Flux CD?要部署_ClusterProfiles_和应用其他的Sveltos自定义资源,你需要使用如Flux CD这样的GitOps工具。为什么要使用Flux CD?要部署_ClusterProfiles_和应用其他的Sveltos自定义资源,你需要使用如Flux CD这样的GitOps工具。为什么要使用Flux CD?要部署_ClusterProfiles_和应用其他的Sveltos自定义资源,你需要使用如Flux CD这样的GitOps工具。为什么要使用Flux CD?要部署_ClusterProfiles_和应用其他的Sveltos自定义资源,你需要使用如Flux CD这样的GitOps工具。为什么要使用Flux CD?要部署_ClusterProfiles_和应用其他的Sveltos自定义资源,你需要使用如Flux CD这样的GitOps工具。为什么要使用Flux CD?要部署_ClusterProfiles_和应用其他的Sveltos自定义资源,你需要使用如Flux CD这样的GitOps工具。为什么要使用Flux CD?要部署_ClusterProfiles_和应用其他的Sveltos自定义资源,你需要使用如Flux CD这样的GitOps工具。为什么要使用Flux CD?要部署_ClusterProfiles_和应用其他的Sveltos自定义资源,你需要使用如Flux CD这样的GitOps工具。为什么要使用Flux CD?要部署_ClusterProfiles_和应用其他的Sveltos自定义资源,你需要使用如Flux CD这样的GitOps工具。为什么要使用Flux CD?要部署_ClusterProfiles_和应用其他的Sveltos自定义资源,你需要使用如Flux CD这样的GitOps工具。为什么要使用Flux CD?要部署_ClusterProfiles_和应用其他的Sveltos自定义资源,你需要使用如Flux CD这样的GitOps工具。为什么要使用Flux CD?要部署_ClusterProfiles_和应用其他的Sveltos自定义资源,你需要使用如Flux CD这样的GitOps工具。

这只是你可以实现的一小部分。Sveltos 提供了多种事件驱动的管理服务。同时,该管理服务可以集成到内部开发者平台,为团队提供自助服务。

我们描绘了以下场景:

![](https://imgapi.imooc.com/aa0453670ad14b8a08560620.jpg)

图12所示:1 K8s-集群 : 1 PG-集群

因为我们配置了ClusterProfiles,所以我们在服务集群内为工作负载集群与PostgreSQL集群建立了一一对应的关系,因为我们根据集群标签配置了ClusterProfiles。

也可以选择这样构建。

![](https://imgapi.imooc.com/cc0f3e670ad14b8e08560691.jpg)

图13:关系 1 K8s-Cluster:N-PG-Cluster

与其根据集群的标签响应,你可以使用一个ConfigMap,例如,来表示需要一个PostgreSQL集群。基于这一点,Sveltos 可以基于每个命名空间/ConfigMap 创建多个 PostgreSQL 集群。但这超出了本文的讨论范围,但你可以在 [这里](https://projectsveltos.github.io/sveltos/events/db-as-a-service-multiple-db-per-cluster/) 找到相关说明和指导。

如果你不想让所有托管服务的凭证留在管理集群里,来解决安全问题的担忧,你可以这样做。

![](https://imgapi.imooc.com/ee9509670ad14b9208560691.jpg)

图14:1个K8s集群:N个PG集群和增强的安全性

在这里,凭证被存储在相应的计算集群中。  
希望你能看到,这里的可能性是无限的,而你的想象力也许是这里唯一的限制。

如果你正在构建激动人心的解决方案,欢迎通过博客、教程等形式分享。但更重要的是,如果你相信开源并践行这一理念,[请给一个⭐️](https://github.com/projectsveltos/addon-controller)! 更酷的是通过博客分享,或者直接为[Projectsveltos](https://github.com/projectsveltos)贡献代码,如果你有足够的技能。

**附言**:请在评论中留言说明你选择了哪条路——你是“需要知道每个细节”的类型,还是“直接部署然后祈祷”的类型? 😬

# 联络方式

有问题想问、想聊天,或者只是想保持联系?不要在 Medium 的评论区停留,我们可以 [LinkedIn](http://www.linkedin.com/in/lajko) 上见 🤙。别忘了订阅 [Medium Newsletter](https://medium.com/@artem_lajko/subscribe),这样你就不会错过任何更新了。
打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP