管理Kubernetes的Redis Enterprise数据库
本节描述了数据库控制器如何通过数据库自定义资源提供创建、管理和使用数据库的能力。
Redis 企业数据库 (REDB) 生命周期
Redis Enterprise 数据库 (REDB) 是通过自定义资源文件创建的。自定义资源定义了 REDB 的大小、名称和其他规格。当您应用自定义资源文件时,数据库将被创建。
Kubernetes 中的 Redis Enterprise 数据库控制器:
- 发现自定义资源
- 确保REDB在与Redis Enterprise集群(REC)相同的命名空间中创建
- 保持自定义资源与REDB之间的一致性
数据库控制器识别新的自定义资源并验证其规范。 如果有效,控制器将自定义资源中指定的值与默认值结合,以创建完整的规范。然后,它使用这个完整的规范在指定的Redis Enterprise集群(REC)上创建数据库。
一旦数据库创建完成,它就会通过服务机制由Redis Enterprise集群的服务触发器暴露出来。 如果数据库自定义资源被删除,数据库及其服务将从集群中删除。
灵活的部署选项
可以在同一个操作员的管理下管理多个命名空间中的数据库。要了解更多信息,请参阅管理多个命名空间中的数据库。
要了解更多关于设计多命名空间Redis Enterprise集群的信息,请参阅灵活的部署选项。
创建数据库
您的 Redis Enterprise 数据库自定义资源必须是 kind: RedisEnterpriseDatabase
类型,并且具有 name
和 memorySize
的值。所有其他值都是可选的,如果未指定,将使用默认值。
-
创建一个文件(在本例中为mydb.yaml),其中包含您的数据库自定义资源。
apiVersion: app.redislabs.com/v1alpha1 kind: RedisEnterpriseDatabase metadata: name: mydb spec: memorySize: 1GB
要在与您的REC不同的命名空间中创建REDB,您需要在RedisEnterpriseDatabase自定义资源的
spec
部分中指定带有redisEnterpriseCluster
的集群。redisEnterpriseCluster: name: rec
-
在您希望数据库所在的命名空间中应用文件。
kubectl apply -f mydb.yaml
-
检查您的数据库状态。
kubectl get redb mydb -o jsonpath="{.status.status}"
当状态为
active
时,数据库已准备就绪,可以使用。
修改数据库
自定义资源定义了数据库的属性。
要更改数据库,您可以编辑原始规范并应用更改或使用kubectl edit
。
要修改数据库:
-
编辑定义:
kubectl edit redb mydb
-
更改规范(仅限
spec
部分中的属性)并保存更改。
有关更多详细信息,请参阅RedisEnterpriseDatabaseSpec或Options for Redis Enterprise databases。 -
监控状态以查看更改何时生效:
kubectl get redb mydb -o jsonpath="{.status.status}"
当状态为
active
时,数据库已准备好使用。
删除数据库
只要自定义资源存在,数据库就会存在。 如果删除自定义资源,数据库控制器将删除数据库。 数据库控制器将从集群中移除数据库及其服务。
要删除数据库,请运行:
kubectl delete redb mydb
连接到数据库
数据库控制器创建数据库后,访问数据库的服务将在同一命名空间中创建。默认情况下有两个服务,一个是'ClusterIP'服务,另一个是'headless'服务。
数据库的连接信息存储在由数据库控制器维护的Kubernetes secret中。这个secret包含:
- 数据库端口 (
port
) - 服务名称的逗号分隔列表(
service_names
) - 用于身份验证的数据库密码 (
password
)
该密钥的名称存储在数据库自定义资源中。
-
检索秘密名称。
kubectl get redb mydb -o jsonpath="{.spec.databaseSecretName}"
数据库密钥名称通常采用
redb-
的形式,因此在我们示例中它将是redb-mydb
。 -
检索并解码密码。
kubectl get secret redb-mydb -o jsonpath="{.data.password}" | base64 --decode
-
检索并解码端口号。
kubectl get secret redb-mydb -o jsonpath="{.data.port}" | base64 --decode
-
检索并解码服务名称。
kubectl get secret redb-mydb -o jsonpath="{.data.service_names}" | base64 --decode
你需要从列出的服务中选择一个来用于连接。
-
从集群中的一个pod,使用
redis-cli
连接到您的数据库。redis-cli -h <service_name> -p <port>
-
输入您从密钥中检索到的密码。
auth <password>
您现在已连接到您的数据库!