使用OpenShift CLI部署Kubernetes上的Redis Enterprise
Redis Enterprise for Kubernetes 和集群可以通过 CLI 工具 OpenShift 安装
按照以下步骤使用OpenShift设置Redis Enterprise Software集群。
先决条件
- OpenShift cluster 至少需要3个节点(每个节点满足开发安装的最低要求)
- OpenShift CLI
要查看哪个版本的 Redis Enterprise for Kubernetes 支持您的 OpenShift 版本,请参阅 支持的 Kubernetes 发行版。
部署操作员
-
创建一个新项目。
oc new-project <your-project-name>
-
验证新创建的项目。
oc project <your-project-name>
-
获取部署文件。
git clone https://github.com/RedisLabs/redis-enterprise-k8s-docs
-
部署OpenShift操作员包。
如果您使用的是6.2.18-41或更早版本,您必须在操作员捆绑包之前应用安全上下文约束。
oc apply -f openshift.bundle.yaml
警告:对openshift.bundle.yaml
文件的更改可能会导致意外结果。 -
验证您的
redis-enterprise-operator
部署是否正在运行。oc get deployment
典型的响应如下所示:
NAME READY UP-TO-DATE AVAILABLE AGE redis-enterprise-operator 1/1 1 1 0m36s
警告:请勿修改或删除部署过程中创建的有状态集(StatefulSet)。这样做可能会破坏您的Redis Enterprise集群(REC)。
安装安全上下文约束
Redis Enterprise 的 pod 必须在 OpenShift 中运行,并设置 Security Context Constraint 中的权限。这授予 pod 各种权利,例如更改系统限制或以特定用户身份运行的能力。
-
应用文件
scc.yaml
文件。警告:不要编辑此文件。oc apply -f openshift/scc.yaml
您应该收到以下响应:
securitycontextconstraints.security.openshift.io "redis-enterprise-scc-v2" configured
6.4.2-6 之前的版本使用的是早期版本的 SCC,名为
redis-enterprise-scc
。 -
为pod提供操作员权限。
oc adm policy add-scc-to-user redis-enterprise-scc-v2 \ system:serviceaccount:<my-project>:<rec>
Note:如果您使用的是6.2.18-41或更早的版本,请为您的集群添加额外的权限。
oc adm policy add-scc-to-user redis-enterprise-scc \ system:serviceaccount:<my-project>:redis-enterprise-operator
您可以使用oc project
命令检查项目的名称。要替换项目名称,请使用oc edit project myproject
。如果不同,请将rec
替换为您的Redis Enterprise集群的名称。
创建一个 Redis Enterprise 集群自定义资源
-
应用
RedisEnterpriseCluster
资源文件(rec_rhel.yaml)。您可以将文件重命名为
<your_cluster_name>.yaml
,但这不是必须的。下面的示例使用<rec_rhel>.yaml
。Redis Enterprise集群选项提供了有关Redis Enterprise集群(REC)自定义资源的更多信息,或者查看Redis Enterprise集群API以获取完整的选项列表。集群创建后,REC名称无法更改。
注意:每个Redis Enterprise集群至少需要3个节点。不支持单节点的REC。 -
应用自定义资源文件来创建您的Redis企业集群。
oc apply -f <rec_rhel>.yaml
操作员通常会在几分钟内创建REC。
-
检查集群状态。
oc get pod
您应该会收到类似于以下的响应:
NAME | READY | STATUS | RESTARTS | AGE | | -------------------------------- | ----- | ------- | -------- | --- | | rec-name-0 | 2/2 | Running | 0 | 1m | | rec-name-1 | 2/2 | Running | 0 | 1m | | rec-name-2 | 2/2 | Running | 0 | 1m | | rec-name-controller-x-x | 1/1 | Running | 0 | 1m | | Redis-enterprise-operator-x-x | 1/1 | Running | 0 | 5m |
配置准入控制器
-
验证
admission-tls
密钥是否存在。kubectl get secret admission-tls
输出应该看起来类似于
NAME TYPE DATA AGE admission-tls Opaque 2 2m43s
-
将证书保存到本地环境变量。
CERT=`kubectl get secret admission-tls -o jsonpath='{.data.cert}'`
-
创建一个Kubernetes验证webhook,将
<namespace>
替换为安装REC的命名空间。webhook.yaml
模板可以在 redis-enterprise-k8s-docs/admission 中找到sed 's/OPERATOR_NAMESPACE/<namespace>/g' webhook.yaml | kubectl create -f -
-
为Kubernetes验证webhook创建一个补丁文件。
cat > modified-webhook.yaml <<EOF webhooks: - name: redisenterprise.admission.redislabs clientConfig: caBundle: $CERT EOF
-
使用证书修补webhook。
kubectl patch ValidatingWebhookConfiguration \ redis-enterprise-admission --patch "$(cat modified-webhook.yaml)"
将webhook限制在相关的命名空间
如果没有限制,webhook 会拦截来自所有命名空间的请求。如果您的 Kubernetes 集群中有多个 REC 对象,请将 webhook 限制在相关的命名空间。如果您没有使用多个命名空间,请跳过此步骤。
-
验证您的命名空间是否已标记,并且该标记对于此命名空间是唯一的,如下一个示例所示。
apiVersion: v1 kind: Namespace metadata: labels: namespace-name: staging name: staging
-
使用
namespaceSelector
字段修补webhook规范。cat > modified-webhook.yaml <<EOF webhooks: - name: redisenterprise.admission.redislabs namespaceSelector: matchLabels: namespace-name: staging EOF
-
应用补丁。
oc patch ValidatingWebhookConfiguration \ redis-enterprise-admission --patch "$(cat modified-webhook.yaml)"
Note:对于6.4.2-4之前的版本,请使用以下命令:
oc patch ValidatingWebhookConfiguration \ redb-admission --patch "$(cat modified-webhook.yaml)"
6.4.2-4 版本引入了一个新的
ValidatingWebhookConfiguration
来替换redb-admission
。请参阅 6.4.2-4 发布说明。
验证准入控制器的安装
应用一个无效的资源,如下所示,以强制准入控制器拒绝它。如果它成功应用,则准入控制器未正确安装。
oc apply -f - << EOF
apiVersion: app.redislabs.com/v1alpha1
kind: RedisEnterpriseDatabase
metadata:
name: redis-enterprise-database
spec:
evictionPolicy: illegal
EOF
你应该会从准入控制器webhook redisenterprise.admission.redislabs
看到这个错误。
Error from server: error when creating "STDIN": admission webhook "redisenterprise.admission.redislabs" denied the request: eviction_policy: u'illegal' is not one of [u'volatile-lru', u'volatile-ttl', u'volatile-random', u'allkeys-lru', u'allkeys-random', u'noeviction', u'volatile-lfu', u'allkeys-lfu']
创建一个 Redis Enterprise 数据库自定义资源
操作员使用Redis Enterprise数据库(REDB)自定义资源中的指令来管理Redis Enterprise集群上的数据库。
-
创建一个
RedisEnterpriseDatabase
自定义资源。此示例创建了一个测试数据库。对于生产数据库,请参阅创建数据库和RedisEnterpriseDatabase API参考。
cat << EOF > /tmp/redis-enterprise-database.yml apiVersion: app.redislabs.com/v1alpha1 kind: RedisEnterpriseDatabase metadata: name: redis-enterprise-database spec: memorySize: 100MB EOF
-
应用新创建的REDB资源。
oc apply -f /tmp/redis-enterprise-database.yml