使用OpenShift CLI部署Kubernetes上的Redis Enterprise

Redis Enterprise for Kubernetes 和集群可以通过 CLI 工具 OpenShift 安装

按照以下步骤使用OpenShift设置Redis Enterprise Software集群。

先决条件

要查看哪个版本的 Redis Enterprise for Kubernetes 支持您的 OpenShift 版本,请参阅 支持的 Kubernetes 发行版

部署操作员

  1. 创建一个新项目。

    oc new-project <your-project-name> 
    
  2. 验证新创建的项目。

    oc project <your-project-name>
    
  3. 获取部署文件。

    git clone https://github.com/RedisLabs/redis-enterprise-k8s-docs
    
  4. 部署OpenShift操作员包。

    如果您使用的是6.2.18-41或更早版本,您必须在操作员捆绑包之前应用安全上下文约束

    oc apply -f openshift.bundle.yaml
    
    警告:
    openshift.bundle.yaml文件的更改可能会导致意外结果。
  5. 验证您的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 各种权利,例如更改系统限制或以特定用户身份运行的能力。

  1. 应用文件 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

  2. 为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 集群自定义资源

  1. 应用RedisEnterpriseCluster资源文件(rec_rhel.yaml)。

    您可以将文件重命名为<your_cluster_name>.yaml,但这不是必须的。下面的示例使用<rec_rhel>.yamlRedis Enterprise集群选项提供了有关Redis Enterprise集群(REC)自定义资源的更多信息,或者查看Redis Enterprise集群API以获取完整的选项列表。

    集群创建后,REC名称无法更改。

    注意:
    每个Redis Enterprise集群至少需要3个节点。不支持单节点的REC。
  2. 应用自定义资源文件来创建您的Redis企业集群。

    oc apply -f <rec_rhel>.yaml
    

    操作员通常会在几分钟内创建REC。

  3. 检查集群状态。

    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  |
    

配置准入控制器

  1. 验证admission-tls密钥是否存在。

    kubectl get secret admission-tls
    

    输出应该看起来类似于

    NAME            TYPE     DATA   AGE
    admission-tls   Opaque   2      2m43s
    
  2. 将证书保存到本地环境变量。

    CERT=`kubectl get secret admission-tls -o jsonpath='{.data.cert}'`
    
  3. 创建一个Kubernetes验证webhook,将<namespace>替换为安装REC的命名空间。

    webhook.yaml 模板可以在 redis-enterprise-k8s-docs/admission 中找到

    sed 's/OPERATOR_NAMESPACE/<namespace>/g' webhook.yaml | kubectl create -f -
    
  4. 为Kubernetes验证webhook创建一个补丁文件。

    cat > modified-webhook.yaml <<EOF
    webhooks:
    - name: redisenterprise.admission.redislabs
      clientConfig:
       caBundle: $CERT
    EOF
    
  5. 使用证书修补webhook。

    kubectl patch ValidatingWebhookConfiguration \
        redis-enterprise-admission --patch "$(cat modified-webhook.yaml)"
    

将webhook限制在相关的命名空间

如果没有限制,webhook 会拦截来自所有命名空间的请求。如果您的 Kubernetes 集群中有多个 REC 对象,请将 webhook 限制在相关的命名空间。如果您没有使用多个命名空间,请跳过此步骤。

  1. 验证您的命名空间是否已标记,并且该标记对于此命名空间是唯一的,如下一个示例所示。

    apiVersion: v1
    kind: Namespace
    metadata:
      labels:
       namespace-name: staging
    name: staging
    
  2. 使用namespaceSelector字段修补webhook规范。

    cat > modified-webhook.yaml <<EOF
    webhooks:
    - name: redisenterprise.admission.redislabs
      namespaceSelector:
       matchLabels:
         namespace-name: staging
    EOF
    
  3. 应用补丁。

    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集群上的数据库。

  1. 创建一个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
    
  2. 应用新创建的REDB资源。

    oc apply -f /tmp/redis-enterprise-database.yml
    

更多信息

RATE THIS PAGE
Back to top ↑