• OpenShift 4 - 用 Operator 部署 Redis 集群


    OpenShift 4.x HOL教程汇总
    说明:本文已经在OpenShift 4.10 环境中验证


    在 OpenShift 中提供了丰富的 PaaS 软件,其中之一就是企业版 Redis 集群软件。企业版 Redis 集群软件是通过 OpenShift 的 OperatorHub 安装部署的,本文介绍如何安装 Redis Enterprise Operator,并用其配置 Redis 集群环境。

    Redis 企业集群

    Redis 企业集群是一组具有无共享/对称架构的节点。“不共享”是指在一个节点内部运行的各种 Redis 分片(Redis 实例)互不感知,相互隔离,防止相互影响。 “对称”是指 Redis Enterprise 集群节点都知道相同的事情:它们每个都拥有接管集群角色所需的所有信息,这意味着集群可以在节点关闭或被替换后幸存下来。更重要的是,它可以简单地通过添加更多节点来线性扩展。

    Redis 企业集群提供管理 API、图形 UI 和代理等功能,为应用程序提供单一端点、对开发人员和应用程序透明的分片数据库。它还负责数据复制、集群中的分片放置和分片故障转移。
    在这里插入图片描述

    在 Redis Enterprise Operator 中包含以下两个 CRD 对象:

    • Redis 企业集群(REC):一个用于创建 Redis 企业集群的 API。每个 Operator 部署只支持一个集群。
    • Redis 企业数据库(REDB):一个用于创建在 Redis 企业集群上运行的 Redis 数据库的 API。

    使用 Redis Enterprise Operator 创建 Redis Cluster 和 DB 过程如下:

    1.一个 Redis Enterprise Cluster 自定义资源(“CR”)在 Operator 中被创建。
    2. 集群 StatefulSet、Service Rigger、集群管理 Secret 、RS/UI 服务被创建。
    3. 一个 Redis Enterprise DB 的 CR 在 Operator 中被创建。
    4. Redis Enterprise DB 在集群上被创建,数据库访问凭证被存储在 Kubernetes Secret 对象中。
    5. Service Rigger 发现新的数据库并为数据库配置 Kubernetes 服务。
    6. 应用程序工作负载使用数据库 Secret 和服务来访问 Redis 数据。
    在这里插入图片描述

    安装 Redis Operator 并创建 Redis 集群

    集群要求

    为了在 OpenShift 集群中部署运行 Redis 集群,OpenShift 集群最少需要有 3 个 Worker 节点。同时还至少还有 3GB 可用内存空间和 10GB 存储空间。

    准备环境

    1. 创建项目。
    $ REDIS_PROJ=my-redis
    $ oc new-project $REDIS_PROJ
    
    • 1
    • 2
    1. 创建 SecurityContextConstraints 对象。
    $ cat << EOF | oc -n my-redis apply -f -
    kind: SecurityContextConstraints
    apiVersion: security.openshift.io/v1
    metadata:
      name: redis-enterprise-scc
    allowPrivilegedContainer: false
    allowedCapabilities:
      - SYS_RESOURCE
    runAsUser:
      type: MustRunAs
      uid: 1001
    FSGroup:
      type: MustRunAs
      ranges: 1001,1001
    seLinuxContext:
      type: RunAsAny
    EOF
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    1. 执行命令,为 ServiceAccount 提供 redis-enterprise-scc 权限。
     $ oc adm policy add-scc-to-user redis-enterprise-scc system:serviceaccount:$REDIS_PROJ
    
    • 1

    安装 Redis Enterprise Operator,创建 Redis 集群

    1. 在 OperatorHub 中找到 Redis Enterprise Operator ,然后将其安装到 my-redis 命名空间下。
      在这里插入图片描述
    2. 在安装好的 Redis Enterprise Operator 中使用以下配置创建一个 RedisEnterpriseCluster 实例。注意:将 uiServiceType 设为 LoadBalancer
    apiVersion: app.redislabs.com/v1
    kind: RedisEnterpriseCluster
    metadata:
      name: rec
      namespace: my-redis
    spec:
      redisEnterpriseNodeResources:
        limits:
          cpu: 2000m
          memory: 2Gi
        requests:
          cpu: 2000m
          memory: 2Gi
      bootstrapperImageSpec:
        repository: registry.connect.redhat.com/redislabs/redis-enterprise-operator
      persistentSpec:
        enabled: true
      redisEnterpriseServicesRiggerImageSpec:
        repository: registry.connect.redhat.com/redislabs/services-manager
      redisEnterpriseImageSpec:
        imagePullPolicy: IfNotPresent
        repository: registry.connect.redhat.com/redislabs/redis-enterprise
      nodes: 3
      uiServiceType: ClusterIP
      username: demo@redislabs.com
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    1. 完成后可以在 OpenShift 的 “拓扑” 中看到部署资源和状态。
      在这里插入图片描述
    2. 查看 Service。
    $ oc get svc
    NAME                                TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)             AGE
    rec                                 ClusterIP   None             <none>        9443/TCP,8001/TCP   16m
    rec-prom                            ClusterIP   None             <none>        8070/TCP            16m
    rec-ui                              ClusterIP   172.30.210.112   <none>        8443/TCP            16m
    redis-enterprise-operator-service   ClusterIP   172.30.189.212   <none>        8443/TCP            17m
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    1. (可选) 根据 rec-ui 服务创建 Route,然后获取 Route 的访问地址。另外还有登录 Redis 控制台的用户名和密码。
    $ oc create route passthrough rec-ui --service=rec-ui --insecure-policy=Redirect
    $ oc get route rec-ui -o jsonpath=https://'{.spec.host}'; echo
    $ oc get secret rec -o jsonpath="{.data.username}" | base64 --decode; echo
    $ oc get secret rec -o jsonpath="{.data.password}" | base64 --decode; echo
    
    • 1
    • 2
    • 3
    • 4
    1. (可选) 登录 Redis 控制台,可以看到以下 create new database 界面。
      在这里插入图片描述
      另外还可进入 cluster 和 nodes 查看。
      在这里插入图片描述
    2. 创建以下配置的 RedisEnterpriseDatabase 实例
    apiVersion: app.redislabs.com/v1alpha1
    kind: RedisEnterpriseDatabase
    metadata:
      name: redb
      namespace: my-redis
    spec:
      redisEnterpriseCluster:
        name: rec
      tlsMode: disable
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    1. 完成后可以在 “所有实例” 中查看状态。
      在这里插入图片描述
      此时在 Redis 控制台也可以在 database 中看到 redb 。
      在这里插入图片描述
    2. 查看 Service 和 Pod,确认名为 rec-0、rec-1、rec-2 的 Pod 中的 2 个容器都运行正常。
    $ oc get svc
    NAME                                TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)             AGE
    rec                                 ClusterIP   None             <none>        9443/TCP,8001/TCP   76m
    rec-prom                            ClusterIP   None             <none>        8070/TCP            76m
    rec-ui                              ClusterIP   172.30.210.112   <none>        8443/TCP            76m
    redb                                ClusterIP   172.30.105.156   <none>        17933/TCP           60m
    redb-headless                       ClusterIP   None             <none>        17933/TCP           60m
    redis-enterprise-operator-service   ClusterIP   172.30.189.212   <none>        8443/TCP            76m
     
    $ oc get pod
    NAME                                         READY   STATUS    RESTARTS   AGE
    rec-0                                        2/2     Running   0          65m
    rec-1                                        2/2     Running   0          64m
    rec-2                                        2/2     Running   0          58m
    rec-services-rigger-fdff5f664-z2k68          1/1     Running   0          65m
    redis-enterprise-operator-767d5f6b67-lxg8r   2/2     Running   0          75m
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    1. 获取访问 redb 的端口和密码
    $ oc get secret redb-redb -o jsonpath="{.data.service_names}" | base64 --decode
    redb, redb-headless
    $ oc get secret redb-redb -o jsonpath="{.data.port}" | base64 --decode
    17933
    $ oc get secret redb-redb -o jsonpath="{.data.password}" | base64 --decode
    PW7WIEKQ
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    1. 进入名为 rec-0 的 pod,然后使用 redis-cli 命令和对应的端口和密码访问 redb,最后设置并获取 name。
    $ oc debug pod/rec-0
    Defaulting container name to redis-enterprise-node.
    Use 'oc describe pod/rec-0-debug -n redis' to see all of the containers in this pod.
    
    Starting pod/rec-0-debug ...
    Pod IP: 10.130.0.19
    If you don't see a command prompt, try pressing enter.
    sh-4.4$ redis-cli -h redb -p 17933
    redb:17933> auth PW7WIEKQ
    
    OK
    redb:17933> set name lxy
    OK
    redb:17933> get name
    "lxy"
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    参考

    https://medium.com/@moreal70/redis-on-openshift-at-ibm-cloud-2c9a34f46b2b
    https://community.intel.com/t5/Blogs/Thought-Leadership/Big-Ideas/Validating-Redis-Enterprise-Operator-on-Bare-Metal-with-Red-Hat/post/1386198
    https://developer.redis.com/create/openshift/
    https://darshanadinushal.blogspot.com/2021/02/redis-enterprise-on-openshift-to-manage.html
    https://developer.redis.com/create/kubernetes/kubernetes-operator/

  • 相关阅读:
    LeetCode·34.在排序数组中查询元素的第一个和最后一个位置·二分查找
    Cisco Packet Tracer官网安装配置
    Stream流
    Bean的生命周期及演示
    前端自动化部署,Devops,CI/CD
    【AIGC】GPT-4o技术分析-浅谈
    高数中的高斯公式
    【C++】速通类和对象,看这一篇就够了
    PDF转Word文档怎么转?这个方法亲测好用,快来学习
    数据中心通识
  • 原文地址:https://blog.csdn.net/weixin_43902588/article/details/126018279