管理多个命名空间中的数据库
Redis Enterprise for Kubernetes 允许您部署到 Kubernetes 集群中的多个命名空间。本文向您展示如何配置 Redis Enterprise 集群以连接到多个命名空间中的数据库。
多个Redis Enterprise数据库资源(REDBs)可以与单个Redis Enterprise集群资源(REC)关联,即使它们位于不同的命名空间中。
要了解更多关于设计多命名空间Redis Enterprise集群的信息,请参阅灵活的部署选项。
先决条件
在配置多命名空间部署之前,您必须拥有一个正在运行的Redis Enterprise集群(REC)。更多信息请参见部署部分。
为托管命名空间创建角色和角色绑定
操作员和RedisEnterpriseCluster(REC)资源都需要访问REC将管理的每个命名空间。对于每个管理的命名空间,在管理的命名空间内创建一个role.yaml
和role_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>
更新 Redis Enterprise 操作员 ConfigMap
有两种方法可以更新操作员的ConfigMap(operator-environment-config
)以指定要管理的命名空间。
- 方法1:配置操作符以监视命名空间标签,并将此标签添加到受管理的命名空间中(适用于6.4.2-4或更高版本)。
- 方法2:使用明确列出的命名空间列表来配置操作符进行管理。
您可以在部署前手动创建此ConfigMap,或者在操作员部署后自动创建。
方法1:命名空间标签(适用于6.4.2-4或更高版本)
- 创建
cluster_role_binding.yaml
和cluster_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
- 应用文件。
kubectl apply -f operator_cluster_role.yaml
kubectl apply -f operator_cluster_role_binding.yaml
- 在REC命名空间(
<rec-namespace>
)中修补ConfigMap,以使用您的标签(<label-name>
)识别受管理的命名空间。
kubectl patch ConfigMap/operator-environment-config \
-n <rec-namespace> \
--type merge \
-p '{"data": {"REDB_NAMESPACES_LABEL": "<label-name>"}}'
- 对于每个受管理的命名空间,应用相同的标签。将
<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"}}'