当前位置:网站首页>OpenShift 4 - 用 Operator 部署 Redis 集群
OpenShift 4 - 用 Operator 部署 Redis 集群
2022-07-31 14:13:00 【dawnsky.liu】
《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 存储空间。
准备环境
- 创建项目。
$ REDIS_PROJ=my-redis
$ oc new-project $REDIS_PROJ
- 创建 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
- 执行命令,为 ServiceAccount 提供 redis-enterprise-scc 权限。
$ oc adm policy add-scc-to-user redis-enterprise-scc system:serviceaccount:$REDIS_PROJ
安装 Redis Enterprise Operator,创建 Redis 集群
- 在 OperatorHub 中找到 Redis Enterprise Operator ,然后将其安装到 my-redis 命名空间下。
- 在安装好的 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: [email protected]
- 完成后可以在 OpenShift 的 “拓扑” 中看到部署资源和状态。
- 查看 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
- (可选) 根据 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
- (可选) 登录 Redis 控制台,可以看到以下 create new database 界面。
另外还可进入 cluster 和 nodes 查看。 - 创建以下配置的 RedisEnterpriseDatabase 实例
apiVersion: app.redislabs.com/v1alpha1
kind: RedisEnterpriseDatabase
metadata:
name: redb
namespace: my-redis
spec:
redisEnterpriseCluster:
name: rec
tlsMode: disable
- 完成后可以在 “所有实例” 中查看状态。
此时在 Redis 控制台也可以在 database 中看到 redb 。 - 查看 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
- 获取访问 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
- 进入名为 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/
边栏推荐
- uniapp微信小程序引用标准版交易组件
- C语言基础练(九九乘法表)与打印不同星号图案
- I summed up the bad MySQL interview questions
- jvm 一之 类加载器
- Why do we need to sub-library and sub-table?
- 自制的数据库安全攻防题,相关靶机自己制作
- Detailed guide to compare two tables using natural full join in SQL
- Selenium自动化测试之Selenium IDE
- 技能大赛训练题:域用户和组织单元的创建
- 232层3D闪存芯片来了:单片容量2TB,传输速度提高50%
猜你喜欢
Samba 远程命令执行漏洞(CVE-2017-7494)
The 232-layer 3D flash memory chip is here: the single-chip capacity is 2TB, and the transmission speed is increased by 50%
技能大赛训练题:MS15_034漏洞验证与安全加固
LeetCode·每日一题·1161.最大层内元素和·层次遍历
1-hour live broadcast recruitment order: industry leaders share dry goods, and enterprise registration is open丨qubit · point of view
Selenium自动化测试之Selenium IDE
Spark学习(3)-Spark环境搭建-Standalone
组合系列--有排列就有组合
MySQL【子查询】
【redis】发布和订阅消息
随机推荐
一篇文章讲清楚!数据库和数据仓库到底有什么区别和联系?
Spark学习(3)-Spark环境搭建-Standalone
A detailed guide to simulating latency with SQL/JDBC
"Listen to me, thank you" can be said in ancient poetry?Tsinghua University has developed an artifact of "Searching Sentences According to Meaning", which can search for the famous sayings you want wi
[Blue Bridge Cup Trial Question 46] Scratch Magnet Game Children's Programming Scratch Blue Bridge Cup Trial Question Explanation
Use of C# Assembly
IDEA连接MySQL数据库并使用数据
百度网盘安装在c盘显示系统权限限制的解决方法
已解决(pymysqL连接数据库报错)pymysqL.err.ProgrammingError: (1146,“Table ‘test.students‘ doesn‘t exist“)
csdn发文助手问题
微服务架构选型
MySQL [subquery]
Asynchronous processing business using CompletableFuture
SetoolKit使用指南
[QNX Hypervisor 2.2用户手册]9.14 safety
Shell script classic case: detecting whether a batch of hosts is alive
五个维度着手MySQL的优化
Controller层代码这么写,简洁又优雅!
ECCV 2022 | Robotic Interaction Perception and Object Manipulation
Shell脚本经典案例:文件的备份