管理多个命名空间中的数据库

Redis Enterprise for Kubernetes 允许您部署到 Kubernetes 集群中的多个命名空间。本文向您展示如何配置 Redis Enterprise 集群以连接到多个命名空间中的数据库。

多个Redis Enterprise数据库资源(REDBs)可以与单个Redis Enterprise集群资源(REC)关联,即使它们位于不同的命名空间中。

要了解更多关于设计多命名空间Redis Enterprise集群的信息,请参阅灵活的部署选项

警告:
多命名空间安装不支持主动-主动数据库(REEADB)。目前,在多命名空间部署中仅支持使用REDB资源创建的数据库。

先决条件

在配置多命名空间部署之前,您必须拥有一个正在运行的Redis Enterprise集群(REC)。更多信息请参见部署部分。

为托管命名空间创建角色和角色绑定

操作员和RedisEnterpriseCluster(REC)资源都需要访问REC将管理的每个命名空间。对于每个管理的命名空间,在管理的命名空间内创建一个role.yamlrole_binding.yaml文件,如下面的示例所示。

注意:
每次升级时都需要重新应用这些设置。

<rec-namespace>替换为REC所在的命名空间。 将<service-account-name>替换为您自己的值(默认为REC名称)。

role.yaml 示例:

kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: redb-role
  labels:
    app: redis-enterprise
rules:
  - apiGroups:
      - app.redislabs.com
    resources: ["redisenterpriseclusters", "redisenterpriseclusters/status", "redisenterpriseclusters/finalizers",
                "redisenterprisedatabases", "redisenterprisedatabases/status", "redisenterprisedatabases/finalizers",
                "redisenterpriseremoteclusters", "redisenterpriseremoteclusters/status",
                "redisenterpriseremoteclusters/finalizers",
                "redisenterpriseactiveactivedatabases", "redisenterpriseactiveactivedatabases/status",
                "redisenterpriseactiveactivedatabases/finalizers"]
    verbs: ["delete", "deletecollection", "get", "list", "patch", "create", "update", "watch"]
  - apiGroups: [""]
    resources: ["secrets"]
    verbs: ["update", "get", "read", "list", "listallnamespaces", "watch", "watchlist",
            "watchlistallnamespaces", "create","patch","replace","delete","deletecollection"]
  - apiGroups: [""]
    resources: ["endpoints"]
    verbs: ["get", "list", "watch"]
  - apiGroups: [""]
    resources: ["events"]
    verbs: ["create"]
  - apiGroups: [""]
    resources: ["services"]
    verbs: ["get", "watch", "list", "update", "patch", "create", "delete"]

role_binding.yaml 示例:

kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: redb-role
  labels:
    app: redis-enterprise
subjects:
- kind: ServiceAccount
  name: redis-enterprise-operator
  namespace: <rec-namespace>
- kind: ServiceAccount
  name: <service-account-name>
  namespace: <rec-namespace>
roleRef:
  kind: Role
  name: redb-role
  apiGroup: rbac.authorization.k8s.io

应用文件,将<managed-namespace>替换为您自己的值:

kubectl apply -f role.yaml -n <managed-namespace>
kubectl apply -f role_binding.yaml -n <managed-namespace>
注意:
如果REC配置为监视一个没有设置角色和角色绑定权限的命名空间,或者一个尚未创建的命名空间,操作员将失败并停止正常操作。

更新 Redis Enterprise 操作员 ConfigMap

有两种方法可以更新操作员的ConfigMap(operator-environment-config)以指定要管理的命名空间。

  • 方法1:配置操作符以监视命名空间标签,并将此标签添加到受管理的命名空间中(适用于6.4.2-4或更高版本)。
  • 方法2:使用明确列出的命名空间列表来配置操作符进行管理。

您可以在部署前手动创建此ConfigMap,或者在操作员部署后自动创建。

方法1:命名空间标签(适用于6.4.2-4或更高版本)

  1. 创建cluster_role_binding.yamlcluster_role.yaml文件。将<rec-namespace>替换为Redis Enterprise集群(REC)所在的命名空间。

operator_cluster_role.yaml 示例:

  apiVersion: rbac.authorization.k8s.io/v1
  kind: ClusterRole
  metadata:
    name: redis-enterprise-operator-consumer-ns
    labels:
      app: redis-enterprise
  rules:
    - apiGroups: [""]
      resources: ["namespaces"]
      verbs: ["list", "watch"]

operator_cluster_role_binding.yaml 示例:

  kind: ClusterRoleBinding
  apiVersion: rbac.authorization.k8s.io/v1
  metadata:
    name: redis-enterprise-operator-consumer-ns
    labels:
      app: redis-enterprise
  subjects:
  - kind: ServiceAccount
    name: redis-enterprise-operator
    namespace: <rec-namespace>
  roleRef:
    kind: ClusterRole
    name: redis-enterprise-operator-consumer-ns
    apiGroup: rbac.authorization.k8s.io
  1. 应用文件。
kubectl apply -f operator_cluster_role.yaml
kubectl apply -f operator_cluster_role_binding.yaml 
  1. 在REC命名空间(<rec-namespace>)中修补ConfigMap,以使用您的标签(<label-name>)识别受管理的命名空间。
 kubectl patch ConfigMap/operator-environment-config \
-n <rec-namespace> \
--type merge \
-p '{"data": {"REDB_NAMESPACES_LABEL": "<label-name>"}}'
  1. 对于每个受管理的命名空间,应用相同的标签。将<managed-namespace>替换为REC将管理的命名空间。将<label-name>替换为上一步中使用的值。如果您为<label-value>指定了一个值,则受管理命名空间中的标签名称和值都必须匹配才能被操作员检测到。如果<label-value>为空,则只需受管理命名空间中的标签名称匹配,值将被忽略。
kubectl label namespace <managed-namespace> <label-name>=<label-value>
注意:
当检测到命名空间标签被添加或删除时,操作符会重新启动。

方法2:显式命名空间列表

在REC命名空间中修补operator-environment-config,添加一个新的环境变量(REDB_NAMESPACES)。

kubectl patch ConfigMap/operator-environment-config \ 
-n <rec-namespace> \
--type merge \
-p '{"data":{"REDB_NAMESPACES": "<comma,separated,list,of,namespaces,to,watch"}}'
警告:
只有在命名空间创建并按照上述说明配置了角色/角色绑定后,才配置操作员以监视该命名空间。如果配置为监视尚未设置这些权限或尚未创建的命名空间,操作员将失败且无法执行正常操作。
RATE THIS PAGE
Back to top ↑