Kubernetes架构的Redis企业版
Redis Enterprise for Kubernetes 的架构和组件概述。
Redis Enterprise for Kubernetes 为您提供了 Redis Enterprise 的速度和持久性,以及 Kubernetes (K8s) 的灵活性和易用性。Redis Enterprise for Kubernetes 使用 Kubernetes 操作员模式和自定义控制器,将 Redis Enterprise 的最佳特性带到 Kubernetes 平台。
生命周期
Kubernetes 是一个快速发展的平台,发布周期较短(大约4个月)。这种频繁的新功能、增强和错误修复的涌入意味着 Kubernetes 发行版的支持周期快速变化。Redis Enterprise 也是一个快速发展的产品,并且仅在列为支持的发行版上进行兼容性和测试。
每个版本的Redis Enterprise for Kubernetes都经过测试,以确保该版本的Redis Enterprise与当时的支持的Kubernetes发行版兼容。Kubernetes版本和Redis Enterprise版本都必须被支持,以确保操作员能够正常运行。我们鼓励您经常升级Redis Enterprise for Kubernetes,不仅是为了获得增强功能和错误修复的好处,也是为了保持您的软件得到支持。
架构
下图展示了一个单一命名空间、三个节点部署的组件。

操作符
一个operator是Kubernetes API的自定义扩展,旨在管理复杂的有状态应用程序及其组件。这种operator模式通常被数据库和其他应用程序用来扩展集群的行为,而无需更改其底层代码。Kubernetes.io/docs对operator模式有很好的解释。
操作符是一个在命名空间内运行的部署,并使用控制器来管理自定义资源(CRs),确保这些资源被持续监控和维护。
当操作员安装时,将创建以下资源:
- service account 操作员将在此账户下运行
- 一组角色,用于定义操作员执行其任务所需的权限
- 一组角色绑定以授权服务账户
- CustomResourceDefinition (CRD) 用于每个 Redis Enterprise 自定义资源
- 操作员部署
命名空间
Redis Enterprise operator 部署在一个 namespace 内。每个命名空间只能托管一个 operator 和一个 RedisEnterpriseCluster (REC)。命名空间在资源之间创建逻辑边界,允许组织和安全。一些资源仅限于命名空间,而其他资源则是集群范围的。
Redis Enterprise for Kubernetes 还支持 多命名空间部署,这意味着操作员可以监控其他命名空间(托管应用程序的命名空间)中的自定义资源并应用任何更改。
自定义资源
Kubernetes custom resources (CRs) 通常被数据库和其他应用程序用来扩展集群的行为,而无需更改其底层代码。Custom resources (CRs) 扩展了 Kubernetes API,使用户能够以 Kubernetes 的方式管理 Redis 数据库。自定义资源是使用 YAML 配置文件创建和管理的。
这种声明式配置方法允许您为资源指定所需的状态,操作员会进行必要的更改以实现该状态。这简化了安装、升级以及垂直和水平的扩展。
操作员持续监控CRs的变化,自动协调您在YAML配置文件中指定的期望状态与资源实际状态之间的任何差异。自定义资源也可以位于与操作员管理的不同命名空间中,例如在多命名空间安装中。
自定义资源定义
一个自定义资源定义(CRD)是一个集群范围的资源,它指定了可以通过自定义资源文件配置哪些设置。任何未由CRD定义的设置都不由操作员管理。您仍然可以使用标准的Redis Enterprise Software方法对这些未管理的设置进行更改。
对于由操作员管理的设置,任何在CR YAML文件之外进行的更改(例如,通过管理界面)将被操作员覆盖。确保所有由操作员管理的设置都使用CR YAML文件进行更新,以防止冲突。
Redis企业集群 REC
Redis Enterprise集群是一组汇集资源的Redis Enterprise节点。每个节点能够运行多个Redis实例(shards)。

Redis集群由RedisEnterpriseCluster (REC) 自定义资源创建和管理。对REC配置文件的更改会提示操作员对集群进行更改。REC对于标准数据库(REDB)和Active-Active数据库(REAADB)都是必需的。
请参阅RedisEnterpriseCluster API 参考以获取字段和设置的完整列表。
Redis企业数据库 REDB
Redis Enterprise 数据库是一个逻辑实体,用于管理跨多个 Redis 实例的整个数据集。Redis 实例是一个单线程的数据库进程(通常称为分片)。
Redis 数据库由 RedisEnterpriseDatabase (REDB) 自定义资源 (CR) 创建和管理。对 REDB YAML 配置文件的更改会提示操作员对数据库进行更改。
操作员可以管理同一命名空间或不同命名空间中的数据库。有关更多信息,请参阅"灵活部署"选项和"管理多个命名空间中的数据库"。
请参阅RedisEnterpriseDatabase (REDB) API 参考以获取字段和设置的完整列表。
安全
Redis Enterprise for Kubernetes 使用 secrets 来管理您的集群凭据、集群证书和客户端证书。您可以使用 RedisEnterpriseCluster (REC) 规范配置 LDAP 和 节点间加密。
REC 凭证
Redis Enterprise for Kubernetes 使用 RedisEnterpriseCluster (REC) 自定义资源 来创建 Redis Enterprise 集群。在创建过程中,它会生成随机凭证供操作员使用。这些凭证保存在 Kubernetes (K8s) 的 secret 中。secret 的名称默认为集群的名称。
详情请参见管理REC凭证。
REC证书
默认情况下,用于Kubernetes的Redis Enterprise Software在创建期间为集群生成TLS证书。这些自签名证书在每个Redis Enterprise集群(REC)的第一个节点上生成,并复制到集群中的所有其他节点。
详情请参见管理REC证书。
客户端证书
对于您想要使用的每个客户端证书,您需要创建一个Kubernetes secret来保存它。然后,您可以在您的Redis Enterprise database (REDB)自定义资源中引用该secret。
详情请参见添加客户端证书。
存储
Persistent storage is mandatory for Redis Enterprise. Redis Enterprise for Kubernetes requires network-attached storage.
Redis Enterprise for Kubernetes 使用 PersistentVolumeClaims (PVC) 来管理存储资源。PVC 是您的 Redis pods 使用的 PersistentVolume (PV) 资源的抽象表示。PVC 由 Redis Enterprise 操作员创建,并由 RedisEnterpriseCluster (REC) 使用。
PVCs 以特定大小创建,并且可以扩展,如果底层的存储类支持的话。
自动分层
Redis Enterprise Software for Kubernetes 支持 Auto Tiering(以前称为 Redis on Flash),它扩展了您的节点内存,使其能够同时使用 RAM 和闪存存储。SSD(固态硬盘)可以存储不常使用的(温)值,而您的键和经常使用的(热)值仍然存储在 RAM 中。这提高了性能并降低了大数据集的成本。
强烈推荐使用NVMe(非易失性内存快速)SSD以实现最佳性能。
网络
默认情况下,Kubernetes 不允许你从 K8s 集群外部访问你的 Redis 数据库。Kubernetes 的 Redis Enterprise 支持多种方式将外部流量路由到你的 Redis Enterprise 集群 (REC):
- Ingress 控制器 HAProxy 和 NGINX 需要一个
ingress
API 资源。 - Istio 需要
Gateway
和VirtualService
API 资源。 - OpenShift 使用 routes 来路由外部流量。
Active-Active databases 需要在 REC 中使用 ingressOrRouteSpec field 配置上述路由方法之一。
服务装配工
服务装配工负责创建和更新与数据库对象相关的服务。它识别集群中的数据库对象,并根据redisEnterpriseCluster.Spec.servicesRiggerSpec
设置创建服务,以允许访问这些数据库。默认情况下,每个数据库有两个服务,一个与数据库同名的cluster_ip
服务和一个与数据库同名并以-headless
结尾的headless
服务。它还创建其他类型的服务,如Ingress服务或OpenshiftRoutes(在redisEnterpriseCluster.Spec.ingressOrRouteSpec
中定义),旨在提供对REAADB对象的访问。
您可以使用kubectl get services
命令查看服务列表。
Kubernetes 是一个动态环境,节点和 Pod 会根据需要进行变化。服务触发器会监控集群中的这些变化,并更新数据库服务,以确保与数据库的可靠通信。
双活数据库
在Kubernetes上,Redis Enterprise Active-Active 数据库提供从不同Kubernetes集群对同一数据集的读写访问。创建Active-Active数据库需要在位于不同Kubernetes集群中的两个Redis Enterprise集群之间路由网络访问。如果没有为每个集群配置适当的访问权限,数据库实例之间的同步将失败。Kubernetes上的Active-Active数据库还需要准入控制器,以验证对自定义资源的更改。
有关更多详细信息和安装信息,请参阅Active-Active 数据库。有关 Active-Active 的更多一般信息,请参阅Redis Enterprise Software 文档。
Redis企业远程集群 RERC
RedisEnterpriseRemoteCluster (RERC) 包含允许 REC 连接到 RedisEnterpriseActiveActiveDatabase (REAADB) 的详细信息。RERC 资源列在 REAADB 资源中,以成为 Active-Active 数据库的参与集群。
请参阅RERC API参考以获取字段和设置的完整列表。
Redis企业级主动-主动数据库 REAADB
RedisEnterpriseActiveActiveDatabase (REAADB) 资源创建并管理一个跨越多个 Kubernetes 集群的数据库。REAADB 需要 外部路由,至少两个 RECs,以及至少两个 RERCs。
请参阅REAADB API参考以获取字段和设置的完整列表。
指标
要从您的数据库和Redis Enterprise集群(REC)收集指标数据,您可以连接您的Prometheus服务器到REC上暴露的端点。用于Kubernetes的Redis Enterprise创建了一个专用服务来暴露prometheus
端口(8070)以进行数据收集。一个名为ServiceMonitor
的自定义资源允许Prometheus操作符连接到该端口并从Redis Enterprise收集数据。