当前位置:网站首页>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/
边栏推荐
- MySQL 23 classic interviews hang the interviewer
- Detailed guide to compare two tables using natural full join in SQL
- 使用NVM进行node版本切换管理
- ERROR: Failed building wheel for osgeo
- Sentinel安装与部署
- C# using ComboBox control
- 龟速乘【模板】
- DELL SC compellent 康贝存储系统怎么抓取配置信息
- Node version switching management using NVM
- 1小时直播招募令:行业大咖干货分享,企业报名开启丨量子位·视点
猜你喜欢
技能大赛训练题:域用户和组织单元的创建
机器学习模型验证:被低估的重要一环
How to grab configuration information for DELL SC compellent storage system
使用NVM进行node版本切换管理
什么是消息队列呢?
Motion capture system for end-positioning control of flexible manipulators
LeetCode·每日一题·1161.最大层内元素和·层次遍历
Sentinel服务熔断和降级
AWS implements scheduled tasks - Lambda+EventBridge
MySQL 23道经典面试吊打面试官
随机推荐
Asynchronous processing business using CompletableFuture
[QNX Hypervisor 2.2用户手册]9.14 safety
"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
20.nn.Module
SetoolKit User Guide
[Blue Bridge Cup Trial Question 46] Scratch Magnet Game Children's Programming Scratch Blue Bridge Cup Trial Question Explanation
jOOQ 3.14 released - SQL/XML and SQL/JSON support
技能大赛训练题:域用户和组织单元的创建
【redis】发布和订阅消息
对数字化时代的企业来说,数据治理难做,但应该去做
The Selenium IDE of the Selenium test automation
技能大赛训练题:交换机的远程管理
使用CompletableFuture进行异步处理业务
拥塞控制,CDN,端到端
4.爬虫之Scrapy框架2数据解析&配置参数&数据持久化&提高Scrapy效率
技能大赛训练题:登录安全加固
Linux bash: redis-server: command not found
OAuth2:使用JWT令牌
OAuth2:资源服务器
1-hour live broadcast recruitment order: industry leaders share dry goods, and enterprise registration is open丨qubit · point of view