OpenShift 4 - 用 Operator 部署 Redis 集群(附视频)

发布于:2023-02-09 ⋅ 阅读:(612) ⋅ 点赞:(0)

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. 创建 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. 执行命令,为 ServiceAccount 提供 redis-enterprise-scc 权限。
 $ oc adm policy add-scc-to-user redis-enterprise-scc system:serviceaccount:$REDIS_PROJ

安装 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. 完成后可以在 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. (可选) 根据 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. (可选) 登录 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. 完成后可以在 “所有实例” 中查看状态。
    在这里插入图片描述
    此时在 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. 获取访问 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. 进入名为 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"

演示视频

视频

参考

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/

本文含有隐藏内容,请 开通VIP 后查看