Data Grid Operator 指南
在 OpenShift 上创建 Data Grid 集群
摘要
Red Hat Data Grid 复制链接链接已复制到粘贴板!
Data Grid 是一个高性能分布式内存数据存储。
- 无架构数据结构
- 将不同对象存储为键值对的灵活性。
- 基于网格的数据存储
- 旨在在集群中分发和复制数据。
- 弹性扩展
- 动态调整节点数量,以便在不中断服务的情况下满足需求。
- 数据互操作性
- 从不同端点在网格中存储、检索和查询数据。
Data Grid 文档 复制链接链接已复制到粘贴板!
红帽客户门户网站中提供了 Data Grid 的文档。
Data Grid 下载 复制链接链接已复制到粘贴板!
访问红帽客户门户上的 Data Grid 软件下载。
您必须有一个红帽帐户才能访问和下载数据中心软件。
使开源包含更多 复制链接链接已复制到粘贴板!
红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。我们从这四个术语开始:master、slave、黑名单和白名单。由于此项工作十分艰巨,这些更改将在即将推出的几个发行版本中逐步实施。详情请查看 CTO Chris Wright 的信息。
第 1 章 Data Grid Operator 复制链接链接已复制到粘贴板!
Data Grid Operator 提供操作智能,并减少了在 Kubernetes 和 Red Hat OpenShift 上部署 Data Grid 的管理复杂性。
1.1. Data Grid Operator 部署 复制链接链接已复制到粘贴板!
安装 Data Grid Operator 时,它会使用自定义资源定义(CRD)扩展 Kubernetes API,以便在 Red Hat OpenShift 上部署和管理 Data Grid 集群。
要与 Data Grid Operator 交互,OpenShift 用户通过 OpenShift Web 控制台或 oc 客户端应用自定义资源(CR)。Data Grid Operator 侦听 Infinispan CR,并自动置备 Data Grid 部署所需的原生资源,如 StatefulSets 和 Secret。Data Grid Operator 还根据 Infinispan CR 中的规格配置数据网格服务,包括集群的 pod 数量以及跨站点复制的备份位置。
图 1.1. 自定义资源
1.2. 集群管理 复制链接链接已复制到粘贴板!
单个 Data Grid Operator 安装可以在单独的命名空间中管理具有不同 Data Grid 版本的多个集群。每次用户应用 CR 来修改部署时,Data Grid Operator 会将更改全局应用到所有 Data Grid 集群。
图 1.2. Operator 管理的集群
1.3. 资源协调 复制链接链接已复制到粘贴板!
Data Grid Operator 将自定义资源(如 Cache CR)与 Data Grid 集群中的资源协调。
双向协调将 CR 与通过 Data Grid 控制台、命令行界面(CLI)或其他客户端应用程序所做的更改同步,反之亦然。例如,如果您通过 Data Grid 控制台创建缓存,则 Data Grid Operator 会添加声明性 Kubernetes 表示。
要执行协调 Data Grid Operator,为每个 Data Grid 集群创建一个 监听器 pod,用于检测 Infinispan 资源的修改。
有关协调的备注
-
当您通过 Data Grid Console、CLI 或其他客户端应用程序创建缓存时,Data Grid Operator 会创建一个对应的
CacheCR,其唯一名称符合 Kubernetes 命名策略。 -
Data Grid Operator 使用
监听器pod 创建的 Data Grid 资源的声明 Kubernetes 代表与InfinispanCR 链接。
删除InfinispanCR 会删除任何关联的资源声明。
第 2 章 将原生 Data Grid CLI 安装为客户端插件 复制链接链接已复制到粘贴板!
Data Grid 提供了一个编译为原生可执行文件的命令行界面(CLI),您可以作为 oc 客户端插件安装。然后,您可以使用 oc 客户端:
- 创建 Data Grid Operator 订阅并删除 Data Grid Operator 安装。
- 设置 Data Grid 集群并配置服务。
- 通过远程 shell 使用 Data Grid 资源。
2.1. 安装原生 Data Grid CLI 插件 复制链接链接已复制到粘贴板!
将原生 Data Grid 命令行界面(CLI)安装为 oc 客户端的插件。
先决条件
-
有一个
oc客户端。 - 从 Data Grid 软件下载原生 Data Grid CLI 分发。
流程
-
为原生 Data Grid CLI 分发提取
.zip存档。 将原生可执行文件或创建硬链接到名为"kubectl-infinispan"的文件,例如:
cp redhat-datagrid-cli kubectl-infinispan
cp redhat-datagrid-cli kubectl-infinispanCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
在您的
PATH中添加kubectl-infinispan。 验证是否安装了 CLI。
oc plugin list The following compatible plugins are available: /path/to/kubectl-infinispan
oc plugin list The following compatible plugins are available: /path/to/kubectl-infinispanCopy to Clipboard Copied! Toggle word wrap Toggle overflow 使用
infinispan --help命令查看可用的命令。oc infinispan --help
oc infinispan --helpCopy to Clipboard Copied! Toggle word wrap Toggle overflow
2.2. kubectl-infinispan 命令参考 复制链接链接已复制到粘贴板!
本主题提供有关客户端的 kubectl-infinispan 插件的一些详情。
使用 --help 参数查看可用选项的完整列表以及每个命令的描述。
例如,oc infinispan create cluster --help 会打印创建 Data Grid 集群的所有命令选项。
| 命令 | 描述 |
|
| 创建 Data Grid Operator 订阅,并默认安装到全局命名空间中。 |
|
| 创建 Data Grid 集群。 |
|
| 显示正在运行的 Data Grid 集群。 |
|
| 在 Data Grid 集群上启动交互式远程 shell 会话。 |
|
| 删除 Data Grid 集群。 |
|
| 删除 Data Grid Operator 安装及其所有受管资源。 |
第 3 章 安装 Data Grid Operator 复制链接链接已复制到粘贴板!
将 Data Grid Operator 安装到 OpenShift 命名空间中,以创建和管理 Data Grid 集群。
3.1. 在 Red Hat OpenShift 上安装 Data Grid Operator 复制链接链接已复制到粘贴板!
在 OpenShift 上创建 Data Grid Operator 的订阅,以便您可以安装不同的 Data Grid 版本并接收自动更新。
自动更新首先应用到 Data Grid Operator,然后用于每个 Data Grid 节点。Data Grid Operator 一次更新集群一个节点,安全地关闭每个节点,然后在进入下一节点前,使用更新的版本重新上线。
先决条件
- 访问在 OpenShift 上运行的 OperatorHub。一些 OpenShift 环境(如 OpenShift Container Platform)可能需要管理员凭证。
- 如果您计划将其安装到特定命名空间中,则具有 Data Grid Operator 的 OpenShift 项目。
流程
- 登录 OpenShift Web 控制台。
- 导航到 OperatorHub。
- 查找并选择 Data Grid Operator。
- 选择 Install and continue to Create Operator Subscription。
指定订阅的选项。
- 安装模式
- 您可以将 Data Grid Operator 安装到 特定命名空间 或 所有命名空间中。
- 更新频道
- 获取 Data Grid Operator 8.5.x 的更新。
- 批准策略
- 从 8.5.x 频道自动安装更新,或者在安装前需要批准。
- 选择 Subscribe 来安装 Data Grid Operator。
- 进入 Installed Operators 以验证 Data Grid Operator 安装。
3.2. 使用原生 CLI 插件安装 Data Grid Operator 复制链接链接已复制到粘贴板!
使用原生 Data Grid CLI 插件 kubectl-infinispan 安装 Data Grid Operator。
先决条件
-
在您的
PATH上具有kubectl-infinispan。
流程
运行
oc infinispan install命令以创建 Data Grid Operator 订阅,例如:oc infinispan install --channel=8.5.x --source=redhat-operators --source-namespace=openshift-marketplaceoc infinispan install --channel=8.5.x --source=redhat-operators --source-namespace=openshift-marketplaceCopy to Clipboard Copied! Toggle word wrap Toggle overflow 验证安装。
oc get pods -n openshift-operators | grep infinispan-operator NAME READY STATUS infinispan-operator-<id> 1/1 Running
oc get pods -n openshift-operators | grep infinispan-operator NAME READY STATUS infinispan-operator-<id> 1/1 RunningCopy to Clipboard Copied! Toggle word wrap Toggle overflow
使用 oc infinispan install --help 获取命令选项和描述。
3.3. 使用 OpenShift 客户端安装 Data Grid Operator 复制链接链接已复制到粘贴板!
您可以使用 oc 客户端创建 Data Grid Operator 订阅,作为通过 OperatorHub 安装或原生 Data Grid CLI 的替代选择。
先决条件
-
有一个
oc客户端。
流程
设置项目。
- 为 Data Grid Operator 创建一个项目。
如果您希望 Data Grid Operator 只控制特定的 Data Grid 集群,请为该集群创建一个项目。
oc new-project ${INSTALL_NAMESPACE} oc new-project ${WATCH_NAMESPACE}oc new-project ${INSTALL_NAMESPACE}1 oc new-project ${WATCH_NAMESPACE}2 Copy to Clipboard Copied! Toggle word wrap Toggle overflow
创建
OperatorGroup资源。控制所有 Data Grid 集群
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 控制特定 Data Grid 集群
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 为 Data Grid Operator 创建订阅。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意如果要手动批准 8.5.x 频道中的更新,请将
spec.installPlanApproval字段的值改为Manual。验证安装。
oc get pods -n ${INSTALL_NAMESPACE} NAME READY STATUS infinispan-operator-<id> 1/1 Runningoc get pods -n ${INSTALL_NAMESPACE} NAME READY STATUS infinispan-operator-<id> 1/1 RunningCopy to Clipboard Copied! Toggle word wrap Toggle overflow
第 4 章 创建 Data Grid 集群 复制链接链接已复制到粘贴板!
使用 Infinispan CR 或 oc 客户端的原生 Data Grid CLI 插件创建在 OpenShift 上运行的 Data Grid 集群。
4.1. Infinispan 自定义资源(CR) 复制链接链接已复制到粘贴板!
Data Grid Operator 添加了一个类型为 Infinispan 的新自定义资源(CR),可让您将 Data Grid 集群作为 OpenShift 中的复杂单元处理。
Data Grid Operator 侦听您用于实例化和配置 Data Grid 集群并管理 OpenShift 资源(如 StatefulSets 和 Services)的 Infinispan 自定义资源(CR)。
Infinispan CR
| 字段 | 描述 |
|---|---|
|
|
声明 |
|
|
声明 |
|
| 为您的 Data Grid 集群指定一个名称。 |
|
| 指定 Data Grid 集群中的 pod 数量。 |
|
| 指定要创建的 Data Grid 服务的类型。 |
|
| 指定集群的 Data Grid Server 版本。 |
4.2. 创建 Data Grid 集群 复制链接链接已复制到粘贴板!
使用原生 CLI 插件 kubectl-infinispan 创建 Data Grid 集群。
先决条件
- 安装 Data Grid Operator。
-
在您的
PATH上具有kubectl-infinispan。
流程
运行
infinispan create cluster命令。例如,创建带有两个 pod 的 Data Grid 集群,如下所示:
oc infinispan create cluster --replicas=3 -Pservice.type=DataGrid infinispan
oc infinispan create cluster --replicas=3 -Pservice.type=DataGrid infinispanCopy to Clipboard Copied! Toggle word wrap Toggle overflow 提示添加
--version参数来控制集群的 Data Grid 版本。例如,--version=8.4.6-1。如果没有指定版本,Data Grid Operator 会使用最新支持的 Data Grid 版本创建集群。观察 Data Grid Operator 创建 Data Grid pod。
oc get pods -w
oc get pods -wCopy to Clipboard Copied! Toggle word wrap Toggle overflow
后续步骤
创建 Data Grid 集群后,使用 oc 将更改应用到 Infinispan CR 并配置您的 Data Grid 服务。
您还可以删除带有 kubectl-infinispan 的 Data Grid 集群,并根据需要重新创建它们。
oc infinispan delete cluster infinispan
oc infinispan delete cluster infinispan
4.3. 验证 Data Grid 集群视图 复制链接链接已复制到粘贴板!
确认 Data Grid pod 已成功用于组成集群。
先决条件
- 至少创建一个 Data Grid 集群。
流程
检索 Data Grid Operator 的
InfinispanCR。oc get infinispan -o yaml
oc get infinispan -o yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 响应表示 Data Grid pod 已收到集群视图,如下例所示:
conditions: - message: 'View: [infinispan-0, infinispan-1]' status: "True" type: wellFormedconditions: - message: 'View: [infinispan-0, infinispan-1]' status: "True" type: wellFormedCopy to Clipboard Copied! Toggle word wrap Toggle overflow
对自动脚本执行以下操作:
oc wait --for condition=wellFormed --timeout=240s infinispan/infinispan
oc wait --for condition=wellFormed --timeout=240s infinispan/infinispan
从日志检索集群视图
您还可以从 Data Grid 日志获取集群视图,如下所示:
oc logs infinispan-0 | grep ISPN000094
oc logs infinispan-0 | grep ISPN000094
4.4. 修改 Data Grid 集群 复制链接链接已复制到粘贴板!
通过向 Data Grid Operator 提供自定义 Infinispan CR 来配置 Data Grid 集群。
先决条件
- 安装 Data Grid Operator。
- 至少创建一个 Data Grid 集群。
-
有一个
oc客户端。
流程
创建定义
InfinispanCR 的 YAML 文件。例如,创建一个
my_infinispan.yaml文件,该文件将 Data Grid pod 的数量更改为 2:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 应用
InfinispanCR。oc apply -f my_infinispan.yaml
oc apply -f my_infinispan.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 观察 Data Grid Operator 会扩展 Data Grid pod。
oc get pods -w
oc get pods -wCopy to Clipboard Copied! Toggle word wrap Toggle overflow
4.5. 停止并启动 Data Grid 集群 复制链接链接已复制到粘贴板!
以安全、排序的方式停止和启动 Data Grid pod,以正确保留集群状态。
Data Grid 服务 pod 的集群必须使用在关闭前存在的相同 pod 数量重启。这允许 Data Grid 恢复集群中的数据分布。在 Data Grid Operator 完全重启后,可以安全地添加和删除 pod。
流程
将
spec.replicas字段更改为0以停止 Data Grid 集群。spec: replicas: 0
spec: replicas: 0Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在重启集群前,请确保具有正确的 pod 数量。
oc get infinispan infinispan -o=jsonpath='{.status.replicasWantedAtRestart}'oc get infinispan infinispan -o=jsonpath='{.status.replicasWantedAtRestart}'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将
spec.replicas字段更改为同一数量的 pod,以重启 Data Grid 集群。spec: replicas: 6
spec: replicas: 6Copy to Clipboard Copied! Toggle word wrap Toggle overflow
第 5 章 配置 Data Grid 集群 复制链接链接已复制到粘贴板!
将自定义 Data Grid 配置应用到 Data Grid Operator 管理的集群。
5.1. 将自定义配置应用到 Data Grid 集群 复制链接链接已复制到粘贴板!
将 Data Grid 配置添加到 ConfigMap 中,并使其可用于 Data Grid Operator。然后,Data Grid Operator 可以在您的 Data Grid 集群中应用自定义配置。
Data Grid Operator 在自定义配置之上应用默认配置,以确保它可以继续管理您的 Data Grid 集群。
在应用 cache-container 元素或字段外的自定义配置时要小心。您可以将自定义配置应用到底层 Data Grid 服务器机制,如端点、安全域和集群传输。更改此配置可能会导致数据网格部署出现错误,并导致服务停机。
使用 Data Grid Helm Chart 在 OpenShift 上部署完全可配置的 Data Grid Server 实例的集群。
先决条件
- 具有 XML、YAML 或 JSON 格式的有效 Data Grid 配置。
流程
将 Data Grid 配置添加到
ConfigMap的data字段中的infinispan-config.[xml|yaml|json]键中。XML
Copy to Clipboard Copied! Toggle word wrap Toggle overflow YAML
Copy to Clipboard Copied! Toggle word wrap Toggle overflow JSON
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 从 YAML 文件创建
ConfigMap。oc apply -f cluster-config.yaml
oc apply -f cluster-config.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 使用
InfinispanCR 中的spec.configMapName字段指定ConfigMap名称,然后应用更改。spec: configMapName: "cluster-config"
spec: configMapName: "cluster-config"Copy to Clipboard Copied! Toggle word wrap Toggle overflow
后续步骤
如果集群已在运行 Data Grid Operator,重启它以应用配置。每次修改 ConfigMap 中的 Data Grid 配置时,Data Grid Operator 会检测到更新并重启集群以应用更改。
5.2. 自定义数据网格配置 复制链接链接已复制到粘贴板!
您可以将 Data Grid 配置添加到 XML、YAML 或 JSON 格式的 ConfigMap 中。
5.2.1. 缓存模板 复制链接链接已复制到粘贴板!
XML
YAML
JSON
5.2.2. 日志记录配置 复制链接链接已复制到粘贴板!
您还可以将 Apache Log4j 配置包含 XML 格式作为 ConfigMap 的一部分。
使用 Infinispan CR 中的 spec.logging.categories 字段来调整 Data Grid 集群的日志记录级别。仅在需要高级基于文件的日志记录功能时才添加 Apache Log4j 配置。
5.3. 保护自定义 Data Grid 配置 复制链接链接已复制到粘贴板!
安全定义和存储自定义数据网格服务器配置。要保护敏感文本字符串,如密码,请在凭证存储中添加条目,而不是直接在 Data Grid Server 配置中添加。
先决条件
- 具有 XML、YAML 或 JSON 格式的有效 Data Grid 配置。
流程
-
创建
CredentialStore Secret文件。 使用
data字段指定凭证及其别名。user-secret.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 应用您的 Secret 文件。
oc apply -f user-secret.yaml
oc apply -f user-secret.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
打开
InfinispanCR 进行编辑。 在
spec.security.credentialStoreSecretName字段中,指定凭证存储 secret 的名称。Infinispan CR
spec: security: credentialStoreSecretName: user-secretspec: security: credentialStoreSecretName: user-secretCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 应用更改。
- 打开 Data Grid Server 配置以进行编辑。
在您的配置中添加
credential-reference。-
将
凭据指定为存储的名称。 将
alias属性指定为凭证 secret 中定义的键之一。Data Grid.xml
<credential-store> <credential-reference store="credentials" alias="postgres_cred"/> </credential-store><credential-store> <credential-reference store="credentials" alias="postgres_cred"/> </credential-store>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
-
将
第 6 章 升级 Data Grid 集群 复制链接链接已复制到粘贴板!
Data Grid Operator 可让您在不停机或数据丢失的情况下将 Data Grid 集群从一个版本升级到另一个版本。
热 Rod 滚动升级作为技术预览功能提供。
6.1. 技术预览功能 复制链接链接已复制到粘贴板!
红帽产品服务级别协议(SLA)不支持技术预览功能或功能,且可能无法正常工作。
红帽不推荐在生产环境中使用技术预览功能或功能。这些功能为您提供对即将推出的产品功能的早期访问,这些功能允许您在开发过程中测试并提供反馈。
如需更多信息,请参阅红帽技术预览功能支持范围。
6.2. Data Grid 集群升级 复制链接链接已复制到粘贴板!
spec.upgrades.type 字段控制 Data Grid Operator 在新版本可用时如何升级您的 Data Grid 集群。集群升级有两种:
shutdown- 通过服务停机时间升级数据网格集群。这是默认的升级类型。
HotRodRolling- 在不停机服务的情况下升级数据网格集群。
关闭升级
要执行关闭升级,Data Grid Operator 执行以下操作:
- 正常关闭现有集群。
- 删除现有集群。
- 使用目标版本创建新集群。
热 Rod 滚动升级
要执行 Hot Rod 滚动升级,Data Grid Operator 执行以下操作:
- 创建一个新的 Data Grid 集群,其目标版本与您的现有集群一同运行。
- 创建远程缓存存储,将数据从现有集群传输到新集群。
- 将所有客户端重定向到新集群。
- 当所有数据和客户端连接都传送到新集群时,会删除现有集群。
您不应该通过启用持久缓存存储的缓存执行 Hot Rod 滚动升级。如果升级无法成功完成,则当 Data Grid Operator 回滚目标集群时,传递可能会导致数据丢失。
如果您的缓存配置启用了 passivation,您应该执行关闭升级。
6.3. 停机升级 Data Grid 集群 复制链接链接已复制到粘贴板!
升级带有停机时间的 Data Grid 集群会导致服务中断,但不需要额外的容量。
先决条件
- 您安装的 Data Grid Operator 版本支持 Data Grid 目标版本。
如果需要,配置持久性缓存存储以在升级过程中保留您的数据。
重要在升级过程 Data Grid Operator 启动时,关闭您的现有集群。如果没有配置持久性缓存存储,这会导致数据丢失。
流程
-
在
spec.version字段中指定 Data Grid 版本号。 确保将
Shutdown设置为spec.upgrades.type字段的值,这是默认值。spec: version: 8.4.6-1 upgrades: type: Shutdownspec: version: 8.4.6-1 upgrades: type: ShutdownCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 如果需要,请应用您的更改。
当新的 Data Grid 版本可用时,您必须手动更改 spec.version 字段中的值来触发升级。
6.4. 为 Data Grid 集群执行 Hot Rod 滚动升级 复制链接链接已复制到粘贴板!
执行 Hot Rod 滚动升级可让您移至新的 Data Grid 版本,而不会造成服务中断。但是,这个升级类型需要额外的容量,并临时导致有两个具有不同版本的 Data Grid 集群同时运行。
前提条件
- 您安装的 Data Grid Operator 版本支持 Data Grid 目标版本。
流程
-
在
spec.version字段中指定 Data Grid 版本号。 指定
HotRodRolling作为spec.upgrades.type字段的值。spec: version: 8.4.6-1 upgrades: type: HotRodRollingspec: version: 8.4.6-1 upgrades: type: HotRodRollingCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 应用您的更改。
当新的 Data Grid 版本可用时,您必须手动更改 spec.version 字段中的值来触发升级。
6.4.1. 从失败的 Hot Rod 滚动升级中恢复 复制链接链接已复制到粘贴板!
如果原始集群仍然存在,您可以回滚失败的 Hot Rod 滚动升级到之前的版本。
先决条件
- 热 Rod 滚动升级正在进行中,并显示初始 Data Grid 集群。
流程
确保 Hot Rod 滚动升级正在进行中。
oc get infinispan <cr_name> -o yaml
oc get infinispan <cr_name> -o yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow status.hotRodRollingUpgradeStatus字段必须存在。将
Infinispan CR的spec.version字段更新为status.hotRodRollingUpgradeStatus中定义的原始集群版本。Data Grid Operator 删除新创建的集群。
第 7 章 设置 Data Grid 服务 复制链接链接已复制到粘贴板!
使用 Data Grid Operator 创建 Data Grid 服务 pod 的集群。
7.1. 服务类型 复制链接链接已复制到粘贴板!
服务是有状态的应用程序,基于数据网格服务器镜像,提供灵活、强大的内存中数据存储。Data Grid operator 仅支持 DataGrid 服务类型,该类型使用完整配置和功能部署 Data Grid 集群。缓存 服务类型不再被支持。
集群的 datagrid 服务类型可让您:
- 使用跨站点复制在全局集群中备份数据。
- 使用任何有效配置创建缓存。
- 添加基于文件的缓存存储,将数据保存在持久性卷中。
- 使用 Data Grid Query API 查询跨缓存的值。
- 使用高级数据网格特性和功能。
7.2. 创建 Data Grid 服务 pod 复制链接链接已复制到粘贴板!
要使用自定义缓存定义以及 Data Grid 功能(如跨站点复制),请创建 Data Grid 服务 pod 的集群。
流程
创建一个
InfinispanCR,以设置spec.service.type: DataGrid并配置任何其他 Data Grid 服务资源。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重要在创建 pod 后,您无法更改
spec.service.type字段。要更改服务类型,您必须删除现有 pod 并创建新的 pod。-
应用
InfinispanCR 以创建集群。
7.2.1. Data Grid 服务 CR 复制链接链接已复制到粘贴板!
本主题描述了 Data Grid 服务 pod 的 Infinispan CR。
| 字段 | 描述 |
|---|---|
|
| 命名您的数据网格集群。 |
|
|
为集群自动创建 |
|
| 指定集群中的 pod 数量。 |
|
| 指定集群的 Data Grid Server 版本。 |
|
| 控制在新版本可用时 Data Grid Operator 如何升级您的 Data Grid 集群。 |
|
|
配置类型 Data Grid 服务。DataGrid 的值为 |
|
| 为 Data Grid 服务 pod 配置存储资源。 |
|
| 配置跨站点复制。 |
|
| 指定包含 Data Grid 用户凭证的身份验证 secret。 |
|
| 指定 TLS 证书和密钥存储来加密客户端连接。 |
|
| 指定 Data Grid pod 的 JVM、CPU 和内存资源。 |
|
| 配置 Data Grid 日志记录类别。 |
|
| 控制如何在网络上公开数据网格端点。 |
|
|
指定包含 Data Grid 配置的 |
|
|
在每个 Data Grid 集群中创建一个
|
|
|
配置 |
|
| 配置反关联性策略,以保证数据网格可用性。 |
7.3. 分配存储资源 复制链接链接已复制到粘贴板!
默认情况下,Data Grid Operator 为持久性卷声明分配 1Gi。但是,您应该调整 Data Grid 服务 pod 可用的存储量,以便 Data Grid 可以在关闭过程中保留集群状态。
如果可用的容器存储小于可用内存量,则可能会出现数据丢失。
流程
-
使用
spec.service.container.storage字段分配存储资源。 根据需要配置
ephemeralStorage字段或storageClassName字段。注意这些字段是互斥的。只在
InfinispanCR 中添加其中一个。- 应用更改。
临时存储
StorageClass 对象的名称
| 字段 | 描述 |
|---|---|
|
| 指定 Data Grid 服务 pod 的存储量。 |
|
|
定义存储是临时还是永久的。将值设为 |
|
|
指定用于持久性卷声明(PVC)的 |
7.3.1. 持久性卷声明 (PVC) 复制链接链接已复制到粘贴板!
Data Grid Operator 创建一个持久性卷声明(PVC),并在以下位置挂载容器存储:/opt/infinispan/server/data
缓存
在创建缓存时,Data Grid 会永久存储其配置,以便缓存在集群重启后可用。
data
如果您希望 Data Grid 服务 pod 在集群关闭过程中保留数据,使用基于文件的缓存存储,方法是将 < file-store /> 元素添加到 Data Grid 缓存配置中。
7.4. 分配 CPU 和内存 复制链接链接已复制到粘贴板!
使用 Infinispan CR 将 CPU 和内存资源分配给 Data Grid pod。
在创建 Data Grid pod 时,Data Grid Operator 从 OpenShift 调度程序请求 1Gi 内存。默认情况下,CPU 请求会绑定。
流程
-
使用
spec.container.cpu字段分配 CPU 单元数。 使用
spec.container.memory字段分配内存量,以字节为单位。cpu和memory字段的值格式为 <limit>:<requests>。例如,cpu: "2000m:1000m"将 pod 限制为最多2000mCPU,并在启动时为每个 pod 请求1000mCPU。指定单个值可设置限制和请求。应用
InfinispanCR。如果您的集群正在运行,Data Grid Operator 会重启 Data Grid pod,以使更改生效。
spec:
container:
cpu: "2000m:1000m"
memory: "2Gi:1Gi"
spec:
container:
cpu: "2000m:1000m"
memory: "2Gi:1Gi"
7.5. 设置 JVM 选项 复制链接链接已复制到粘贴板!
在启动时向 Data Grid pod 传递额外的 JVM 选项。
流程
-
使用
InfinispanCR 中的spec.container文件配置 JVM 选项。 应用
InfinispanCR。如果您的集群正在运行,Data Grid Operator 会重启 Data Grid pod,以使更改生效。
JVM 选项
spec:
container:
extraJvmOpts: "-<option>=<value>"
routerExtraJvmOpts: "-<option>=<value>"
cliExtraJvmOpts: "-<option>=<value>"
spec:
container:
extraJvmOpts: "-<option>=<value>"
routerExtraJvmOpts: "-<option>=<value>"
cliExtraJvmOpts: "-<option>=<value>"
| 字段 | 描述 |
|---|---|
|
| 为 Data Grid 服务器指定其他 JVM 选项。 |
|
| 为 Gossip 路由器指定额外的 JVM 选项。 |
|
| 为 Data Grid CLI 指定其他 JVM 选项。 |
7.6. 配置 pod 探测 复制链接链接已复制到粘贴板!
(可选)配置 Data Grid pod 使用的存活度、就绪度和启动探测的值。
Data Grid Operator 会自动将探测值配置为可取用的默认值。在确定默认值与要求不匹配后,我们只建议提供自己的值。
流程
使用
spec.service.container prerequisitesProbe字段配置探测值:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重要如果没有为给定探测值指定值,则使用 Data Grid Operator 默认值。
应用
InfinispanCR。如果您的集群正在运行,Data Grid Operator 会重启 Data Grid pod,以使更改生效。
7.7. 配置 pod 优先级 复制链接链接已复制到粘贴板!
创建一个或多个优先级类,以指示 pod 相对于其他 pod 的重要性。优先级更高的 pod 的 pod 排在较低优先级的 pod 之前,确保优先选择运行关键工作负载的 pod,特别是在资源受限时。
先决条件
-
具有
cluster-admin对 OpenShift 的访问权限。
流程
通过指定名称和值来定义
PriorityClass对象。high-priority.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建优先级类。
oc create -f high-priority.yaml
oc create -f high-priority.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 在 pod 配置中引用优先级类名称。
Infinispan CR
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 您必须引用现有的优先级类名称,否则 pod 被拒绝。
- 应用更改。
7.8. Infinispan CR 的 FIPS 模式 复制链接链接已复制到粘贴板!
Red Hat OpenShift Container Platform 可以使用特定的联邦信息处理标准(FIPS)组件来确保 OpenShift 集群满足 FIPS 合规审计的要求。
如果您在 OpenShift 集群上启用了 FIPS 模式,则 Data Grid Operator 会自动为您的 Infinispan 自定义资源(CR)启用 FIPS 模式。
FIPS 模式目前不支持客户端证书身份验证。尝试创建 Infinispan CR,并将 spec.security.endpointEncryption.clientCert 设置为 None 以外的值将失败。
7.9. 调整日志模式 复制链接链接已复制到粘贴板!
要自定义 Data Grid 日志跟踪的日志显示,请更新日志模式。如果没有设置自定义模式,则默认格式为: %d{HH:mm:ss,SSS} %-5p (%t)[%c] %m%throwable%n
流程
使用
InfinispanCR 中的spec.logging.pattern字段配置 Data Grid 日志记录。spec: logging: pattern: %X{address} %X{user} [%d{dd/MMM/yyyy:HH:mm:ss Z}]spec: logging: pattern: %X{address} %X{user} [%d{dd/MMM/yyyy:HH:mm:ss Z}]Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 应用更改。
根据需要从 Data Grid pod 检索日志。
oc logs -f $POD_NAME
oc logs -f $POD_NAMECopy to Clipboard Copied! Toggle word wrap Toggle overflow
7.10. 调整日志级别 复制链接链接已复制到粘贴板!
当您需要调试问题时,对不同的 Data Grid 日志记录类别更改级别。您还可以调整日志级别,以减少特定类别的消息数量,以最大程度降低容器资源的使用。
流程
使用
InfinispanCR 中的spec.logging.categories字段配置 Data Grid 日志记录。spec: logging: categories: org.infinispan: debug org.jgroups: debugspec: logging: categories: org.infinispan: debug org.jgroups: debugCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 应用更改。
根据需要从 Data Grid pod 检索日志。
oc logs -f $POD_NAME
oc logs -f $POD_NAMECopy to Clipboard Copied! Toggle word wrap Toggle overflow
7.10.1. 日志记录参考 复制链接链接已复制到粘贴板!
查找有关日志类别和级别的信息。
| root 类别 | 描述 | 默认级别 |
|---|---|---|
|
| Data Grid 消息 |
|
|
| 集群传输信息 |
|
| 日志级别 | 描述 |
|---|---|
|
| 提供有关运行应用程序状态的详细信息。这是最详细的日志级别。 |
|
| 表示单个请求或活动的进度。 |
|
| 指明应用程序的整体进度,包括生命周期事件。 |
|
| 指明可能导致错误或降低性能的情况。 |
|
| 指明可能会阻止操作或活动成功但不会阻止应用程序运行的错误条件。 |
垃圾回收(GC)信息
默认情况下,Data Grid Operator 不会记录 GC 信息。您可以使用以下 JVM 选项将 GC 消息定向到 stdout :
extraJvmOpts: "-Xlog:gc*:stdout:time,level,tags"
extraJvmOpts: "-Xlog:gc*:stdout:time,level,tags"
7.11. 在 Data Grid 资源中添加标签和注解 复制链接链接已复制到粘贴板!
将键/值标签和注解附加到 Data Grid Operator 创建和管理的 pod 和服务。标签可帮助您识别对象之间的关系,以更好地组织和监控数据网格资源。注解是客户端应用程序或部署和管理工具的任意非标识元数据。
红帽订阅标签自动应用到 Data Grid 资源。
流程
-
打开
InfinispanCR 进行编辑。 在
metadata.annotations部分中,将标签和注解附加到 Data Grid 资源。-
在
metadata.annotations部分中直接为注解定义值。 -
使用
metadata.labels字段定义标签值。
-
在
-
应用
InfinispanCR。
自定义注解
自定义标签
7.12. 使用环境变量添加标签和注解 复制链接链接已复制到粘贴板!
为 Data Grid Operator 设置环境变量来添加标签和注解,以自动传播到所有 Data Grid pod 和服务。
流程
使用 spec.config.env 字段在 Data Grid Operator 订阅中添加标签和注解,使用以下方法之一:
使用
oc edit subscription命令。oc edit subscription datagrid -n openshift-operators
oc edit subscription datagrid -n openshift-operatorsCopy to Clipboard Copied! Toggle word wrap Toggle overflow 使用 Red Hat OpenShift 控制台。
- 导航到 Operators > Installed Operators > Data Grid Operator。
- 在 Actions 菜单中,选择 Edit Subscription。
使用环境变量的标签和注解
7.13. 在 Data Grid Operator 订阅中定义环境变量 复制链接链接已复制到粘贴板!
在创建或编辑订阅时,您可以在 Data Grid Operator 订阅中定义环境变量。
如果使用 Red Hat OpenShift 控制台,您必须首先安装 Data Grid Operator,然后编辑现有订阅。
spec.config.env字段-
包含用于定义环境变量的
name和value字段。 ADDITIONAL_VARS变量-
包含 JSON 数组格式的环境变量名称。
ADDITIONAL_VARS变量的值中的环境变量自动传播到相关 Operator 管理的每个 Data Grid Server pod。
先决条件
- 确保已安装 Operator Lifecycle Manager (OLM)。
-
有一个
oc客户端。
流程
为您的 Data Grid Operator 创建订阅定义 YAML:
-
使用
spec.config.env字段来定义环境变量。 在
ADDITIONAL_VARS变量中,在 JSON 阵列中包含环境变量名称。subscription-datagrid.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 例如,使用环境变量来设置本地时区:
subscription-datagrid.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
-
使用
为 Data Grid Operator 创建订阅:
oc apply -f subscription-datagrid.yaml
oc apply -f subscription-datagrid.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
从
subscription-datagrid.yaml中检索环境变量:oc get subscription datagrid -n openshift-operators -o jsonpath='{.spec.config.env[*].name}'oc get subscription datagrid -n openshift-operators -o jsonpath='{.spec.config.env[*].name}'Copy to Clipboard Copied! Toggle word wrap Toggle overflow
后续步骤
使用
oc edit subscription命令修改环境变量:oc edit subscription datagrid -n openshift-operators
oc edit subscription datagrid -n openshift-operatorsCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
为确保更改对 Data Grid 集群生效,您必须重新创建现有的集群。通过删除与现有
InfinispanCR 关联的StatefulSet来终止 pod。
- 在 Red Hat OpenShift 控制台中,进入到 Operators > Installed Operators > Data Grid Operator。在 Actions 菜单中,选择 Edit Subscription。
第 8 章 配置身份验证 复制链接链接已复制到粘贴板!
应用程序用户需要凭证才能访问 Data Grid 集群。您可以使用默认生成的凭证或自行添加。
8.1. 默认凭证 复制链接链接已复制到粘贴板!
Data Grid Operator 为以下用户生成 base64 编码的凭证:
| 用户 | Secret 名称 | 描述 |
|---|---|---|
|
|
| 默认应用程序用户的凭证。 |
|
|
| Data Grid Operator 用来与 Data Grid 资源交互的凭证。 |
8.2. 检索凭证 复制链接链接已复制到粘贴板!
从身份验证 secret 获取凭证以访问 Data Grid 集群。
流程
从身份验证 secret 检索凭据。
oc get secret infinispan-generated-secret
oc get secret infinispan-generated-secretCopy to Clipboard Copied! Toggle word wrap Toggle overflow Base64-decode 凭证。
oc get secret infinispan-generated-secret -o jsonpath="{.data.identities\.yaml}" | base64 --decodeoc get secret infinispan-generated-secret -o jsonpath="{.data.identities\.yaml}" | base64 --decodeCopy to Clipboard Copied! Toggle word wrap Toggle overflow
8.3. 添加自定义用户凭证 复制链接链接已复制到粘贴板!
使用自定义凭据配置对 Data Grid 集群端点的访问。
修改 spec.security.endpointSecretName 会触发集群重启。
流程
使用要添加的凭证创建一个 identity
.yaml文件。credentials: - username: myfirstusername password: changeme-one - username: mysecondusername password: changeme-two
credentials: - username: myfirstusername password: changeme-one - username: mysecondusername password: changeme-twoCopy to Clipboard Copied! Toggle word wrap Toggle overflow 从 identity
.yaml创建身份验证 secret。oc create secret generic --from-file=identities.yaml connect-secret
oc create secret generic --from-file=identities.yaml connect-secretCopy to Clipboard Copied! Toggle word wrap Toggle overflow 在
InfinispanCR 中使用spec.security.endpointSecretName指定身份验证 secret,然后应用更改。spec: security: endpointSecretName: connect-secretspec: security: endpointSecretName: connect-secretCopy to Clipboard Copied! Toggle word wrap Toggle overflow
8.4. 更改 operator 密码 复制链接链接已复制到粘贴板!
如果您不想使用自动生成的密码,您可以更改 operator 用户的密码。
流程
更新
infinispan-generated-operator-secretsecret 中的password密钥,如下所示:oc patch secret infinispan-generated-operator-secret -p='{"stringData":{"password": "supersecretoperatorpassword"}}'oc patch secret infinispan-generated-operator-secret -p='{"stringData":{"password": "supersecretoperatorpassword"}}'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意您应该只更新
generated-operator-secretsecret中的密码密钥。当您更新密码时,Data Grid Operator 会自动刷新该 secret 中的其他密钥。
8.5. 禁用用户身份验证 复制链接链接已复制到粘贴板!
允许用户访问 Data Grid 集群和操作数据,而无需提供凭证。
如果端点可以通过 spec.expose.type 从 OpenShift 集群外部访问,则不要禁用身份验证。您应该只在开发环境中禁用身份验证。
流程
将
false设置为InfinispanCR 中的spec.security.endpointAuthentication字段的值。spec: security: endpointAuthentication: falsespec: security: endpointAuthentication: falseCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 应用更改。
第 9 章 配置客户端证书身份验证 复制链接链接已复制到粘贴板!
将客户端信任存储添加到项目中,并将 Data Grid 配置为只允许来自存在有效证书的客户端的连接。这会确保客户端被公共证书颁发机构(CA)信任,从而提高部署的安全性。
9.1. 客户端证书身份验证 复制链接链接已复制到粘贴板!
客户端证书身份验证会根据客户端存在的证书限制入站连接。
您可以将 Data Grid 配置为使用带有以下策略之一的信任存储:
validate
要验证客户端证书,Data Grid 需要包含签名机构证书链的任何部分的信任存储,通常是 root CA 证书。任何提供 CA 签名的证书的客户端都可以连接到 Data Grid。
如果使用 Validate 策略来验证客户端证书,还必须将客户端配置为提供有效的 Data Grid 凭证(如果启用身份验证)。
身份验证
除了 root CA 证书外,还需要包含所有公共客户端证书的信任存储。只有存在签名证书的客户端才能连接到 Data Grid。
如果使用 Authenticate 策略来验证客户端证书,您必须确保证书包含有效的 Data Grid 凭证,作为可分辨名称(DN)的一部分。
9.2. 启用客户端证书身份验证 复制链接链接已复制到粘贴板!
要启用客户端证书身份验证,您可以将 Data Grid 配置为使用带有 Validate 或 Authenticate 策略的信任存储。
流程
将
InfinispanCR 中的spec.security.endpointEncryption.clientCert字段设置为Validate或Authenticate。注意默认值为
None。使用
spec.security.endpointEncryption.clientCertSecretName字段指定包含客户端信任存储的 secret。默认情况下,Data Grid Operator 需要名为 <
cluster-name>-client-cert-secret 的信任存储 secret。注意secret 对于 OpenShift 集群中的每个
InfinispanCR 实例必须是唯一的。当您删除InfinispanCR 时,OpenShift 也会自动删除关联的 secret。Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 应用更改。
后续步骤
为 Data Grid Operator 提供包含所有客户端证书的信任存储。或者,您可以使用 PEM 格式提供证书,并让 Data Grid 生成客户端信任存储。
9.3. 提供客户端信任存储 复制链接链接已复制到粘贴板!
如果您有一个包含所需证书的信任存储,您可以将其提供给 Data Grid Operator。
Data Grid 仅支持 PKCS12 格式的信任存储。
流程
指定包含客户端信任存储的 secret 名称,作为
metadata.name字段的值。注意名称必须与
spec.security.endpointEncryption.clientCertSecretName字段的值匹配。-
使用
stringData.truststore-password字段提供信任存储的密码。 使用
data.truststore.p12字段指定信任存储。Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 应用更改。
9.4. 提供客户端证书 复制链接链接已复制到粘贴板!
Data Grid Operator 可以从 PEM 格式的证书生成信任存储。
流程
指定包含客户端信任存储的 secret 名称,作为
metadata.name字段的值。注意名称必须与
spec.security.endpointEncryption.clientCertSecretName字段的值匹配。-
将签名证书或 CA 证书捆绑包指定为
data.trust.ca字段的值。 如果您使用
Authenticate策略来验证客户端身份,请为每个客户端添加可通过data.trust.cert.<name>字段连接到 Data Grid 端点的证书。注意在生成信任存储时,Data Grid Operator 使用 <
name> 值作为证书的别名。(可选)使用
stringData.truststore-password字段为信任存储提供密码。如果没有提供,Data Grid Operator 会将 "password" 设置为信任存储密码。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 应用更改。
第 10 章 配置加密 复制链接链接已复制到粘贴板!
使用 Red Hat OpenShift 服务证书或自定义 TLS 证书加密客户端和 Data Grid pod 之间的连接。
10.1. 使用 Red Hat OpenShift 服务证书加密 复制链接链接已复制到粘贴板!
Data Grid Operator 会自动生成由 Red Hat OpenShift 服务 CA 签名的 TLS 证书。然后,Data Grid Operator 将证书和密钥存储在 secret 中,以便您可以检索它们并用于远程客户端。
如果 Red Hat OpenShift 服务 CA 可用,Data Grid Operator 会将以下 spec.security.endpointEncryption 配置添加到 Infinispan CR 中:
| 字段 | 描述 |
|---|---|
|
| 指定提供 TLS 证书的服务。 |
|
|
使用 PEM 格式的服务证书和密钥指定 secret。默认为 < |
服务证书使用 Data Grid 集群的内部 DNS 名称作为通用名称(CN),例如:
subject: CN = example-infinispan.mynamespace.svc
因此,服务证书只能在 OpenShift 中完全信任。如果要加密与 OpenShift 外部运行的客户端的连接,您应该使用自定义 TLS 证书。
服务证书在一年内有效,并在过期前自动替换。
10.2. 检索 TLS 证书 复制链接链接已复制到粘贴板!
从加密 secret 获取 TLS 证书以创建客户端信任存储。
流程
从加密 secret 检索
tls.crt,如下所示:oc get secret infinispan-cert-secret -o jsonpath='{.data.tls\.crt}' | base64 --decode > tls.crtoc get secret infinispan-cert-secret -o jsonpath='{.data.tls\.crt}' | base64 --decode > tls.crtCopy to Clipboard Copied! Toggle word wrap Toggle overflow
10.3. 禁用加密 复制链接链接已复制到粘贴板!
您可以禁用加密,因此客户端不需要 TLS 证书来建立与 Data Grid 的连接。
如果端点可以通过 spec.expose.type 从 OpenShift 集群外部访问,则不要禁用加密。您应该只为开发环境禁用加密。
流程
将
None设置为InfinispanCR 中的spec.security.endpointEncryption.type字段的值。spec: security: endpointEncryption: type: Nonespec: security: endpointEncryption: type: NoneCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 应用更改。
10.4. 使用自定义 TLS 证书 复制链接链接已复制到粘贴板!
使用自定义 PKCS12 密钥存储或 TLS 证书/密钥对来加密客户端和数据网格集群间的连接。
先决条件
创建密钥存储或证书 secret。
注意secret 对于 OpenShift 集群中的每个
InfinispanCR 实例必须是唯一的。当您删除InfinispanCR 时,OpenShift 也会自动删除关联的 secret。
流程
将加密 secret 添加到 OpenShift 命名空间中,例如:
oc apply -f tls_secret.yaml
oc apply -f tls_secret.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 使用
InfinispanCR 中的spec.security.endpointEncryption.certSecretName字段指定加密 secret。spec: security: endpointEncryption: type: Secret certSecretName: tls-secretspec: security: endpointEncryption: type: Secret certSecretName: tls-secretCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 应用更改。
10.4.1. 自定义加密 secret 复制链接链接已复制到粘贴板!
添加密钥存储或证书/密钥对的自定义加密 secret,以保护数据网格连接必须包含特定的字段。
密钥存储 secret
| 字段 | 描述 |
|---|---|
|
| 指定密钥存储的别名。 |
|
| 指定密钥存储密码。 |
|
| 添加 base64 编码的密钥存储。 |
证书 secret
| 字段 | 描述 |
|---|---|
|
| 添加以 base64 编码的 TLS 密钥。 |
|
| 添加以 base64 编码的 TLS 证书。 |
第 11 章 配置用户角色和权限 复制链接链接已复制到粘贴板!
通过为用户配置基于角色的访问控制(RBAC)来保护对 Data Grid 服务的访问。这要求您为用户分配角色,以便他们具有访问缓存和数据网格资源的权限。
11.1. 启用安全授权 复制链接链接已复制到粘贴板!
默认情况下,禁用授权,以确保向后兼容 Infinispan CR 实例。完成以下步骤以启用授权,并为 Data Grid 用户使用基于角色的访问控制(RBAC)。
流程
将
true设置为InfinispanCR 中的spec.security.authorization.enabled字段的值。spec: security: authorization: enabled: truespec: security: authorization: enabled: trueCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 应用更改。
11.2. 用户角色和权限 复制链接链接已复制到粘贴板!
Data Grid Operator 提供了一组与不同权限关联的默认角色。
| 角色 | 权限 | 描述 |
|---|---|---|
|
| ALL | 具有所有权限的超级用户,包括控制缓存管理器生命周期。 |
|
| ALL_READ、ALL_WRITE、LISTEN、EXEC、MONITOR、CREATE |
除了 |
|
| ALL_READ, ALL_WRITE, LISTEN, EXEC, MONITOR |
除 |
|
| ALL_READ, MONITOR |
除了监控权限外,还具有对 Data Grid |
|
| MONITOR | 可以查看 Data Grid 集群的统计信息。 |
Data Grid Operator 凭证
Data Grid Operator 生成用于与 Data Grid 集群进行身份验证的凭证来执行内部操作。默认情况下,当您启用安全授权时,Data Grid Operator 凭证会自动分配 admin 角色。
11.3. 为用户分配角色和权限 复制链接链接已复制到粘贴板!
为用户分配角色,以控制用户是否有权访问数据网格集群资源。角色可以有不同的权限级别,从只读到不受限制的访问。
用户隐式获取授权。例如,"admin"自动获得 admin 权限。名为 "deployer" 的用户会自动具有 deployer 角色,以此类推。
流程
创建一个
identity.yaml文件,为用户分配角色。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 从 identity
.yaml创建身份验证 secret。如有必要,请首先删除现有 secret。
oc delete secret connect-secret --ignore-not-found oc create secret generic --from-file=identities.yaml connect-secret
oc delete secret connect-secret --ignore-not-found oc create secret generic --from-file=identities.yaml connect-secretCopy to Clipboard Copied! Toggle word wrap Toggle overflow 在
InfinispanCR 中使用spec.security.endpointSecretName指定身份验证 secret,然后应用更改。spec: security: endpointSecretName: connect-secretspec: security: endpointSecretName: connect-secretCopy to Clipboard Copied! Toggle word wrap Toggle overflow
11.4. 添加自定义角色和权限 复制链接链接已复制到粘贴板!
您可以使用不同的权限组合定义自定义角色。
流程
-
打开
InfinispanCR 进行编辑。 使用
spec.security.authorization.roles字段指定自定义角色及其关联的权限。Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 应用更改。
第 12 章 配置对 Data Grid 的网络访问 复制链接链接已复制到粘贴板!
公开数据网格集群,以便您可以访问数据网格控制台、Data Grid 命令行界面(CLI)、REST API 和 Hot Rod 端点。
12.1. 获取内部连接的服务 复制链接链接已复制到粘贴板!
默认情况下,Data Grid Operator 创建一个服务,可从 OpenShift 上运行的客户端提供对 Data Grid 集群的访问。
此内部服务具有与 Data Grid 集群相同的名称,例如:
metadata: name: infinispan
metadata:
name: infinispan
流程
检查内部服务是否可用,如下所示:
oc get services
oc get servicesCopy to Clipboard Copied! Toggle word wrap Toggle overflow
12.2. 通过 LoadBalancer 服务公开数据网格 复制链接链接已复制到粘贴板!
使用 LoadBalancer 服务将 Data Grid 集群提供给在 OpenShift 外部运行的客户端。
要使用未加密的 Hot Rod 客户端连接访问数据网格,您必须使用 LoadBalancer 服务。
流程
-
在
InfinispanCR 中包含spec.expose。 -
使用
spec.expose.type字段指定LoadBalancer作为服务类型。 (可选)使用
spec.expose.port字段指定服务公开的网络端口。spec: expose: type: LoadBalancer port: 65535spec: expose: type: LoadBalancer port: 65535Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 应用更改。
验证
-external服务是否可用。oc get services | grep external
oc get services | grep externalCopy to Clipboard Copied! Toggle word wrap Toggle overflow
12.3. 通过 NodePort 服务公开数据网格 复制链接链接已复制到粘贴板!
使用 NodePort 服务在网络上公开 Data Grid 集群。
流程
-
在
InfinispanCR 中包含spec.expose。 -
使用
spec.expose.type字段将NodePort指定为服务类型。 配置 Data Grid 通过
spec.expose.nodePort字段公开的端口。spec: expose: type: NodePort nodePort: 30000spec: expose: type: NodePort nodePort: 30000Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 应用更改。
验证
-external服务是否可用。oc get services | grep external
oc get services | grep externalCopy to Clipboard Copied! Toggle word wrap Toggle overflow
12.4. 通过路由公开数据网格 复制链接链接已复制到粘贴板!
使用带有 passthrough 加密的 OpenShift Route 使 Data Grid 集群在网络上可用。
要使用 Hot Rod 客户端访问数据网格,您必须使用 SNI 配置 TLS。
流程
-
在
InfinispanCR 中包含spec.expose。 -
使用
spec.expose.type字段指定Route作为服务类型。 (可选)使用
spec.expose.host字段添加主机名。spec: expose: type: Route host: www.example.orgspec: expose: type: Route host: www.example.orgCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 应用更改。
验证路由是否可用。
oc get routes
oc get routesCopy to Clipboard Copied! Toggle word wrap Toggle overflow
路由 端口
当您创建路由时,它会在网络上公开一个端口,该端口接受客户端连接并将流量重定向到侦听端口 11222 的 Data Grid 服务。
可用的 Route 的端口取决于您是否使用加密。
| 端口 | 描述 |
|---|---|
|
| 加密被禁用。 |
|
| 加密已启用。 |
12.5. 网络服务 复制链接链接已复制到粘贴板!
Data Grid Operator 创建和管理的网络服务的参考信息。
| Service | 端口 | 协议 | 描述 |
|---|---|---|---|
|
|
| TCP |
访问 OpenShift 集群内部或 OpenShift |
|
|
| TCP | 访问 OpenShift 集群中的 Data Grid 端点,供内部 Data Grid Operator 使用。这个端口利用不同的 security-realm 到端口 11222,用户应用程序不应该被访问。 |
|
|
| TCP | Data Grid pod 的群集发现。 |
|
|
| TCP |
从 |
|
|
| TCP | JGroups RELAY2 频道进行跨站点通信。 |
Data Grid 控制台应该只通过 OpenShift 服务或公开端口 11222 访问。
第 13 章 设置跨站点复制 复制链接链接已复制到粘贴板!
通过将地理位置分散的集群配置为统一服务,确保 Data Grid Operator 的可用性。
您可以使用以下命令配置集群来执行跨站点复制:
- Data Grid Operator 管理的连接。
- 配置和管理的连接。
您可以在相同的 Infinispan CR 中为 Data Grid 集群使用受管和手动连接。您必须确保 Data Grid 集群在每个站点上以相同的方式建立连接。
13.1. 跨站点复制公开类型 复制链接链接已复制到粘贴板!
您可以使用 NodePort 服务、LoadBalancer 服务或 OpenShift Route 处理 Data Grid 集群间备份操作的网络流量。在开始设置跨站点复制前,您应该决定哪些公开类型可用于 Red Hat OpenShift 集群。在某些情况下,您可能需要在配置公开类型前置备服务。
NodePort
NodePort 是一个服务,它在 OpenShift 集群外部可用的 IP 地址上接受在 30000 到 32767 范围内的网络流量。
要将 NodePort 用作跨站点复制的公开类型,管理员必须为每个 OpenShift 节点调配外部 IP 地址。在大多数情况下,管理员还必须为这些外部 IP 地址配置 DNS 路由。
LoadBalancer
LoadBalancer 是一个将网络流量定向到 OpenShift 集群中正确节点的服务。
是否可以将 LoadBalancer 用作跨站点复制的公开类型取决于主机平台。AWS 支持网络负载均衡器(NLB),而其他云平台则不支持。要使用 LoadBalancer 服务,管理员必须首先创建一个由 NLB 支持的入口控制器。
Route
OpenShift 路由 允许 Data Grid 集群通过公共安全 URL 相互连接。
Data Grid 使用带有 SNI 标头的 TLS,通过 OpenShift Route 在集群间发送备份请求。为此,您必须使用 TLS 证书添加密钥存储,以便 Data Grid 可以为跨站点复制加密网络流量。
当您将 Route 指定为跨站点复制的公开类型时,Data Grid Operator 会为它管理的每个 Data Grid 集群创建一个带有 TLS 透传加密的路由。您可以为 指定主机名,但您不能指定已创建的路由。
Route
13.2. 受管跨站点复制 复制链接链接已复制到粘贴板!
Data Grid Operator 可以发现在不同数据中心中运行的 Data Grid 集群组成全局集群。
当您配置受管跨站点连接时,Data Grid Operator 会在每个 Data Grid 集群中创建路由器 pod。Data Grid pod 使用 & lt;cluster_name>-site 服务连接到这些路由器 pod 并发送备份请求。
路由器 Pod 维护所有 Pod IP 地址记录,并解析 RELAY 消息标头,将备份请求转发到正确的 Data Grid 集群。如果路由器 pod 崩溃,则所有 Data Grid pod 都开始使用任何其他可用的路由器 pod,直到 OpenShift 恢复它。
为了管理跨站点连接,Data Grid Operator 使用 Kubernetes API。每个 OpenShift 集群都必须具有对远程 Kubernetes API 的网络访问权限,以及每个备份集群的服务帐户令牌。
在 Data Grid Operator 发现您配置的所有备份位置前,Data Grid 集群不会启动运行。
13.2.1. 为受管跨站点连接创建服务帐户令牌 复制链接链接已复制到粘贴板!
在 OpenShift 集群上生成服务帐户令牌,允许 Data Grid Operator 自动发现 Data Grid 集群并管理跨站点连接。
先决条件
确保所有 OpenShift 集群都可以访问 Kubernetes API。
Data Grid Operator 使用此 API 管理跨站点连接。注意Data Grid Operator 不修改远程 Data Grid 集群。服务帐户令牌通过 Kubernetes API 提供只读访问。
流程
- 登录 OpenShift 集群。
创建一个服务帐户。
例如,在 LON 创建服务帐户:
oc create sa -n <namespace> lon
oc create sa -n <namespace> lonCopy to Clipboard Copied! Toggle word wrap Toggle overflow 使用以下命令在服务帐户中添加 view 角色:
oc policy add-role-to-user view -n <namespace> -z lon
oc policy add-role-to-user view -n <namespace> -z lonCopy to Clipboard Copied! Toggle word wrap Toggle overflow 如果使用
NodePort服务在网络上公开 Data Grid 集群,还必须将cluster-reader角色添加到服务帐户中:oc adm policy add-cluster-role-to-user cluster-reader -z lon -n <namespace>
oc adm policy add-cluster-role-to-user cluster-reader -z lon -n <namespace>Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 在其他 OpenShift 集群上重复上述步骤。
- 在每个 OpenShift 集群上交换服务帐户令牌。
13.2.2. 交换服务帐户令牌 复制链接链接已复制到粘贴板!
在 OpenShift 集群上生成服务帐户令牌,并将它们添加到每个备份位置的 secret 中。您在此流程中生成的令牌不会过期。有关绑定服务帐户令牌,请参阅交换绑定服务帐户令牌。
先决条件
- 您已创建了一个服务帐户。
流程
- 登录您的 OpenShift 集群。
创建服务帐户令牌 secret 文件,如下所示:
sa-token.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在 OpenShift 集群中创建 secret:
oc -n <namespace> create -f sa-token.yaml
oc -n <namespace> create -f sa-token.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 检索服务帐户令牌:
oc -n <namespace> get secrets ispn-xsite-sa-token -o jsonpath="{.data.token}" | base64 -doc -n <namespace> get secrets ispn-xsite-sa-token -o jsonpath="{.data.token}" | base64 -dCopy to Clipboard Copied! Toggle word wrap Toggle overflow 命令在终端中打印令牌。
- 复制备份 OpenShift 集群中用于部署的令牌。
- 登录备份 OpenShift 集群。
为备份位置添加服务帐户令牌:
oc -n <namespace> create secret generic <token-secret> --from-literal=token=<token>
oc -n <namespace> create secret generic <token-secret> --from-literal=token=<token>Copy to Clipboard Copied! Toggle word wrap Toggle overflow &
lt;token-secret> 是InfinispanCR 中配置的 secret 的名称。
后续步骤
- 在其他 OpenShift 集群上重复上述步骤。
13.2.3. 交换绑定服务帐户令牌 复制链接链接已复制到粘贴板!
创建具有有限的寿命的服务帐户令牌,并将它们添加到每个备份位置的 secret 中。您必须定期刷新令牌,以防止 Data Grid Operator 丢失对远程 OpenShift 集群的访问。有关非过期令牌,请参阅交换服务帐户令牌。
先决条件
- 您已创建了一个服务帐户。
流程
- 登录您的 OpenShift 集群。
为服务帐户创建绑定令牌:
oc -n <namespace> create token <service-account>
oc -n <namespace> create token <service-account>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意默认情况下,服务帐户令牌在一小时内有效。使用命令选项
--duration指定生命周期(以秒为单位)。命令在终端中打印令牌。
- 复制备份 OpenShift 集群中用于部署的令牌。
- 登录备份 OpenShift 集群。
为备份位置添加服务帐户令牌:
oc -n <namespace> create secret generic <token-secret> --from-literal=token=<token>
oc -n <namespace> create secret generic <token-secret> --from-literal=token=<token>Copy to Clipboard Copied! Toggle word wrap Toggle overflow &
lt;token-secret> 是InfinispanCR 中配置的 secret 的名称。- 在其他 OpenShift 集群上重复上述步骤。
删除已过期的令牌
当令牌过期时,删除过期的令牌 secret,然后重复这个过程来生成并交换新的令牌。
- 登录备份 OpenShift 集群。
删除过期的 secret <
token-secret>:oc -n <namespace> delete secrets <token-secret>
oc -n <namespace> delete secrets <token-secret>Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
重复这个过程来创建新令牌并生成新的 <
token-secret>。
13.2.4. 配置管理的跨站点连接 复制链接链接已复制到粘贴板!
配置 Data Grid Operator,以使用 Data Grid 集群建立跨站点视图。
先决条件
-
为跨站点复制确定合适的公开类型。
如果使用 OpenShiftRoute,您必须添加带有 TLS 证书的密钥存储和安全跨站点连接。 - 为每个 Data Grid 集群创建并交换 Red Hat OpenShift 服务帐户令牌。
流程
-
为每个 Data Grid 集群创建一个
InfinispanCR。 -
使用
spec.service.sites.local.name指定本地站点的名称。 为跨站点复制配置公开类型。
将
spec.service.sites.local.expose.type字段的值设置为以下之一:-
NodePort -
LoadBalancer -
Route
-
(可选)使用以下字段指定端口或自定义主机名:
-
如果使用
NodePort服务,spec.service.sites.local.expose.nodePort。 -
如果使用
LoadBalancer服务,则spec.service.sites.local.expose.port。 -
如果使用 OpenShift
Route,则spec.service.sites.local.expose.routeHostName。
-
如果使用
使用
service.sites.local.maxRelayNodes字段指定可以发送 RELAY 消息的 pod 数量。提示配置集群中的所有 pod,以发送
RELAY消息以提高性能。如果所有 pod 直接发送备份请求,则不需要转发备份请求。-
为每个 Data Grid 集群提供名称、URL 和 secret,它们充当
spec.service.sites.locations的备份位置。 如果远程站点上的 Data Grid 集群名称或命名空间与本地站点不匹配,请使用
clusterName和namespace字段指定这些值。以下是 LON 和 NYC 的
InfinispanCR 定义示例:LON
Copy to Clipboard Copied! Toggle word wrap Toggle overflow NYC
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重要务必调整
InfinispanCR 中的日志类别,以减少 JGroups TCP 和 RELAY2 协议的日志级别。这可防止大量日志文件使用容器存储。spec: logging: categories: org.jgroups.protocols.TCP: error org.jgroups.protocols.relay.RELAY2: errorspec: logging: categories: org.jgroups.protocols.TCP: error org.jgroups.protocols.relay.RELAY2: errorCopy to Clipboard Copied! Toggle word wrap Toggle overflow
-
使用任何其他 Data Grid 服务资源配置
InfinispanCR,然后应用更改。 验证 Data Grid 集群是否形成跨站点视图。
检索
InfinispanCR。oc get infinispan -o yaml
oc get infinispan -o yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
检查
type: CrossSiteViewFormed条件。
后续步骤
如果您的集群有一个跨站点视图,您可以开始向缓存添加备份位置。
13.3. 手动配置跨站点连接 复制链接链接已复制到粘贴板!
您可以指定静态网络连接详情,以使用 OpenShift 外部运行的 Data Grid 集群执行跨站点复制。在任何情况下,需要手动跨站点连接,其中运行 Data Grid 的 OpenShift 集群外访问 Kubernetes API。
先决条件
-
为跨站点复制确定合适的公开类型。
如果使用 OpenShiftRoute,您必须添加带有 TLS 证书的密钥存储和安全跨站点连接。 确保每个 Data Grid 集群和每个 <
cluster-name>-site服务都有正确的主机名和端口。手动连接数据网格集群以跨站点视图需要可预测的数据网格服务网络位置,这意味着您需要在创建前知道网络位置。
流程
-
为每个 Data Grid 集群创建一个
InfinispanCR。 -
使用
spec.service.sites.local.name指定本地站点的名称。 为跨站点复制配置公开类型。
将
spec.service.sites.local.expose.type字段的值设置为以下之一:-
NodePort -
LoadBalancer -
Route
-
(可选)使用以下字段指定端口或自定义主机名:
-
如果使用
NodePort服务,spec.service.sites.local.expose.nodePort。 -
如果使用
LoadBalancer服务,则spec.service.sites.local.expose.port。 -
如果使用 OpenShift
Route,则spec.service.sites.local.expose.routeHostName。
-
如果使用
提供作为带有
spec.service.sites.locations的备份位置的每个 Data Grid 集群的名称和静态 URL,例如:LON
Copy to Clipboard Copied! Toggle word wrap Toggle overflow NYC
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重要务必调整
InfinispanCR 中的日志类别,以减少 JGroups TCP 和 RELAY2 协议的日志级别。这可防止大量日志文件使用容器存储。spec: logging: categories: org.jgroups.protocols.TCP: error org.jgroups.protocols.relay.RELAY2: errorspec: logging: categories: org.jgroups.protocols.TCP: error org.jgroups.protocols.relay.RELAY2: errorCopy to Clipboard Copied! Toggle word wrap Toggle overflow
-
使用任何其他 Data Grid 服务资源配置
InfinispanCR,然后应用更改。 验证 Data Grid 集群是否形成跨站点视图。
检索
InfinispanCR。oc get infinispan -o yaml
oc get infinispan -o yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
检查
type: CrossSiteViewFormed条件。
后续步骤
如果您的集群有一个跨站点视图,您可以开始向缓存添加备份位置。
13.4. 为 Gossip 路由器 pod 分配 CPU 和内存 复制链接链接已复制到粘贴板!
将 CPU 和内存资源分配给 Data Grid Gossip 路由器。
前提条件
-
启用 Gossip 路由器。
service.sites.local.discovery.launchGossipRouter属性必须设置为true,这是默认值。
流程
-
使用
service.sites.local.discovery.cpu字段分配 CPU 单元数。 使用
service.sites.local.discovery.memory字段分配内存量,以字节为单位。cpu和memory字段的值格式为 <limit>:<requests>。例如,cpu: "2000m:1000m"将 pod 限制为最多2000mCPU,并在启动时为每个 pod 请求1000mCPU。指定单个值可设置限制和请求。-
应用
InfinispanCR。
13.5. 禁用本地 Gossip 路由器和服务 复制链接链接已复制到粘贴板!
Data Grid Operator 在每个站点上启动 Gossip 路由器,但您只需要一个 Gossip 路由器来管理 Data Grid 集群成员之间的流量。您可以禁用额外的 Gossip 路由器来保存资源。
例如,您在 LON 和 NYC 站点中有 Data Grid 集群。以下流程演示了如何在 LON 站点中禁用 Gossip 路由器,并连接到启用了 Gossip 路由器的 NYC。
流程
-
为每个 Data Grid 集群创建一个
InfinispanCR。 -
使用
spec.service.sites.local.name字段指定本地站点的名称。 -
对于 LON 集群,将
false设置为spec.service.sites.local.discovery.launchGossipRouter字段的值。 -
对于 LON 集群,使用
spec.service.sites.locations.,以连接到 NYC。url指定 url 在 NYC 配置中,不要指定
spec.service.sites.locations.url。LON
Copy to Clipboard Copied! Toggle word wrap Toggle overflow NYC
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
如果您有三个或更多站点,Data Grid 建议在所有远程站点上启用 Gossip 路由器。当您有多个 Gossip 路由器且其中一个变得不可用时,剩余的路由器将继续交换消息。如果定义了单个 Gossip 路由器,且它变得不可用,则远程站点之间的连接会破坏。
后续步骤
如果您的集群有一个跨站点视图,您可以开始向缓存添加备份位置。
13.6. 用于配置跨站点复制的资源 复制链接链接已复制到粘贴板!
下表提供了跨站点资源的字段和描述。
| 字段 | 描述 |
|---|---|
|
| Data Grid 仅支持通过 Data Grid 服务集群进行跨站点复制。 |
| 字段 | 描述 |
|---|---|
|
| 将本地站点命名为 Data Grid 集群运行的位置。 |
|
|
指定可为跨站点复制发送 RELAY 消息的最大 pod 数量。默认值为 |
|
|
如果为 |
|
|
以字节为单位分配内存量。它使用以下格式 < |
|
|
分配 CPU 单元的数量。它使用以下格式 < |
|
|
指定跨站点复制的网络服务。Data Grid 集群使用此服务来通信和执行备份操作。您可以将值设为 |
|
|
如果您通过 |
|
|
如果您通过 |
|
|
如果您通过 OpenShift |
| 字段 | 描述 |
|---|---|
|
| 为所有备份位置提供连接信息。 |
|
|
指定与 |
|
| 指定用于受管连接的 Kubernetes API 的 URL,或为手动连接指定静态 URL。
使用
请注意,
对静态主机名和端口使用 |
|
| 指定包含备份站点的服务帐户令牌的 secret。 |
|
| 如果集群名称与本地站点的集群名称不同,请在备份位置指定集群名称。 |
|
| 如果 Data Grid 集群的命名空间与本地站点上的命名空间不匹配,则指定位于备份位置的 Data Grid 集群的命名空间。 |
受管跨站点连接
手动跨站点连接
13.7. 保护跨站点连接 复制链接链接已复制到粘贴板!
添加密钥存储和信任存储,以便数据网格集群可以保护跨站点复制流量。
您必须添加一个密钥存储,以使用 OpenShift Route 作为跨站点复制的公开类型。如果您使用 NodePort 或 LoadBalancer 作为公开类型,则保护跨站点连接是可选的。
跨站点复制不支持 OpenShift CA 服务。您必须提供自己的证书。
先决条件
具有 Data Grid 可用于加密和解密 RELAY 消息的 PKCS12 密钥存储。
您必须提供密钥存储来中继 pod 和路由器 pod,以保护跨站点连接。
对于中继 pod 和路由器 pod,密钥存储可以相同,也可以为每个 pod 提供单独的密钥存储。
您还可以为每个 Data Grid 集群使用相同的密钥存储,或每个集群的唯一密钥存储。- 有一个 PKCS12 信任存储,其中包含证书链或 root CA 证书的一部分,用于验证 Data Grid relay pod 和路由器 Pod 的公共证书。
流程
创建跨站点加密 secret。
- 创建密钥存储 secret。
- 创建信任存储 secret。
-
修改每个 Data Grid 集群的
InfinispanCR,以指定encryption.transportKeyStore.secretName和encryption.routerKeyStore.secretName字段的机密名称。 配置任何其他字段以根据需要加密 RELAY 消息,然后应用更改。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
13.7.1. 用于配置跨站点加密的资源 复制链接链接已复制到粘贴板!
下表提供了加密跨站点连接的字段和描述。
| 字段 | 描述 |
|---|---|
|
|
指定用于跨站点连接的 TLS 协议。默认值为 |
|
| 配置用于中继 Pod 的密钥存储 secret。 |
|
| 为路由器 Pod 配置密钥存储 secret。 |
|
| 为中继 pod 和路由器 pod 配置信任存储 secret。 |
| 字段 | 描述 |
|---|---|
|
| 指定包含用于加密和解密 RELAY 消息的密钥存储的 secret。此字段是必需的。 |
|
|
(可选)指定密钥存储中证书的别名。默认值为 |
|
|
(可选)指定密钥存储的文件名。默认值为 |
| 字段 | 描述 |
|---|---|
|
| 指定包含路由器 pod 可用来加密和解密 RELAY 消息的密钥存储的 secret。此字段是必需的。 |
|
|
(可选)指定密钥存储中证书的别名。默认值为 |
|
|
(可选)指定密钥存储的文件名。默认值为 |
| 字段 | 描述 |
|---|---|
|
| 指定包含信任存储的 secret,用于验证中继 pod 和路由器 pod 的公共证书。此字段是必需的。 |
|
|
(可选)指定信任存储的文件名。默认值为 |
13.7.2. 跨站点加密 secret 复制链接链接已复制到粘贴板!
跨站点复制加密 secret 添加密钥存储和信任存储,以保护跨站点连接。
跨站点加密 secret
| 字段 | 描述 |
|---|---|
|
| 指定密钥存储或信任存储的密码。 |
|
|
(可选)指定密钥存储或信任存储类型。默认值为 |
|
| 添加 base64 编码的密钥存储或信任存储。 |
13.8. 在同一 OpenShift 集群中配置站点 复制链接链接已复制到粘贴板!
出于评估和演示目的,您可以将 Data Grid 配置为在同一 OpenShift 集群中的 pod 之间备份。
使用 ClusterIP 作为公开类型进行跨站点复制,仅用于演示目的。此公开类型仅适用于在笔记本电脑或某种性质上执行临时概念验证部署。
流程
-
为每个 Data Grid 集群创建一个
InfinispanCR。 -
使用
spec.service.sites.local.name指定本地站点的名称。 -
将
ClusterIP设置为spec.service.sites.local.expose.type字段的值。 -
提供作为带有
spec.service.sites.locations.clusterName的备份位置的 Data Grid 集群名称。 如果两个 Data Grid 集群具有相同的名称,请使用
spec.service.sites.locations.locations.namespace指定备份位置的命名空间。Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
使用任何其他 Data Grid 服务资源配置
InfinispanCR,然后应用更改。 验证 Data Grid 集群是否形成跨站点视图。
检索
InfinispanCR。oc get infinispan -o yaml
oc get infinispan -o yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
检查
type: CrossSiteViewFormed条件。
第 14 章 监控数据网格服务 复制链接链接已复制到粘贴板!
Data Grid 会公开 Prometheus 和 Grafana 可以用来监控和视觉化集群状态的指标。
本文档解释了如何在 OpenShift Container Platform 上设置监控。如果您使用社区 Prometheus 部署,可能会找到这些说明作为常规指南。但是,您应该参阅 Prometheus 文档来安装和使用说明。
请参阅 Prometheus Operator 文档。
14.1. 创建 Prometheus 服务监控器 复制链接链接已复制到粘贴板!
Data Grid Operator 会自动创建一个 Prometheus ServiceMonitor,从您的 Data Grid 集群中提取指标。
流程
在 OpenShift Container Platform 上为用户定义的项目启用监控。
当 Operator 检测到 Infinispan CR,并将监控注解设置为 true 时,Data Grid Operator 会执行以下操作:
-
创建名为 <
cluster_name>-monitor的ServiceMonitor。 如果尚未明确设置,请将
infinispan.org/monitoring: 'true'注解添加到InfinispanCR 元数据中:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
为了与 Data Grid 进行身份验证,Prometheus 使用 operator 凭证。
验证
您可以按照以下方法检查 Prometheus 是否提取 Data Grid 指标:
- 在 OpenShift Web 控制台中,选择 < ;/> Developer 视角,然后选择 Monitoring。
- 打开 Data Grid 集群运行的命名空间的 Dashboard 选项卡。
打开 Metrics 选项卡,并确认您可以查询 Data Grid 指标,例如:
vendor_cache_manager_default_cluster_size
vendor_cache_manager_default_cluster_sizeCopy to Clipboard Copied! Toggle word wrap Toggle overflow
14.1.1. 禁用 Prometheus 服务监控器 复制链接链接已复制到粘贴板!
如果您不希望 Prometheus 为 Data Grid 集群提取指标,您可以禁用 ServiceMonitor。
流程
在
InfinispanCR 中将'false'设置为infinispan.org/monitoring注解的值。Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 应用更改。
14.1.2. 配置服务监控目标标签 复制链接链接已复制到粘贴板!
您可以使用 ServiceMonitor spec.targetLabels 字段将生成的 ServiceMonitor 配置为将 Service 标签传播到底层指标。使用 Service 标签过滤和聚合从被监控端点收集的指标。
流程
-
通过在
InfinispanCR 中设置infinispan.org/targetLabels注解来定义要应用到您的服务的标签。 在
InfinispanCR 上使用infinispan.org/serviceMonitorTargetLabels注解指定指标所需的以逗号分隔的标签列表。Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 应用更改。
14.2. 安装 Grafana Operator 复制链接链接已复制到粘贴板!
为了支持各种需求,Data Grid Operator 与 Grafana Operator 的社区版本集成,以便为 Data Grid 服务创建仪表板。
在 Grafana 与 OpenShift 用户工作负载监控集成前,唯一选项是依赖社区版本。您可以从 OperatorHub 在 OpenShift 上安装 Grafana Operator,并应该为 alpha 频道创建一个订阅。
但是,作为所有社区 Operator 的策略,红帽不认证 Grafana Operator,且不支持 Data Grid。安装 Grafana Operator 时,会提示您输入确认有关社区版本的警告信息,然后才能继续。
14.3. 创建 Grafana 数据源 复制链接链接已复制到粘贴板!
创建 GrafanaDatasource CR,以便在 Grafana 仪表板中视觉化数据网格指标。
先决条件
-
有一个
oc客户端。 -
具有
cluster-admin对 OpenShift Container Platform 的访问权限。 - 在 OpenShift Container Platform 上为用户定义的项目启用监控。
-
从 alpha 频道安装 Grafana Operator,并创建一个
GrafanaCR。
流程
创建一个
ServiceAccount,允许 Grafana 从 Prometheus 读取 Data Grid 指标。apiVersion: v1 kind: ServiceAccount metadata: name: infinispan-monitoring
apiVersion: v1 kind: ServiceAccount metadata: name: infinispan-monitoringCopy to Clipboard Copied! Toggle word wrap Toggle overflow 应用
ServiceAccount。oc apply -f service-account.yaml
oc apply -f service-account.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 为
ServiceAccount授予cluster-monitoring-view权限。oc adm policy add-cluster-role-to-user cluster-monitoring-view -z infinispan-monitoring
oc adm policy add-cluster-role-to-user cluster-monitoring-view -z infinispan-monitoringCopy to Clipboard Copied! Toggle word wrap Toggle overflow
创建 Grafana 数据源。
检索
ServiceAccount的令牌。oc serviceaccounts get-token infinispan-monitoring
oc serviceaccounts get-token infinispan-monitoringCopy to Clipboard Copied! Toggle word wrap Toggle overflow 在
spec.datasources.secureJsonData.httpHeaderValue1字段中定义包含令牌的GrafanaDataSource,如下例所示:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
应用
GrafanaDataSource。oc apply -f grafana-datasource.yaml
oc apply -f grafana-datasource.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
后续步骤
使用 Data Grid Operator 配置属性启用 Grafana 仪表板。
14.4. 配置 Data Grid 仪表板 复制链接链接已复制到粘贴板!
Data Grid Operator 提供了全局配置属性,供您为 Data Grid 集群配置 Grafana 仪表板。
您可以在 Data Grid Operator 运行时修改全局配置属性。
先决条件
- Data Grid Operator 必须监视运行 Grafana Operator 的命名空间。
流程
在 Data Grid Operator 命名空间中创建一个名为
infinispan-operator-config的ConfigMap。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用
data.grafana.dashboard.namespace属性指定 Data Grid 集群的命名空间。注意删除此属性的值会删除仪表板。更改值会将仪表板移到该命名空间中。
-
使用
data.grafana.dashboard.name属性为仪表板指定一个名称。 -
如有必要,使用
data.grafana.dashboard.monitoring.key属性指定监控密钥。 创建
infinispan-operator-config或更新配置。oc apply -f infinispan-operator-config.yaml
oc apply -f infinispan-operator-config.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 打开 Grafana UI,它位于:
oc get routes grafana-route -o jsonpath=https://"{.spec.host}"oc get routes grafana-route -o jsonpath=https://"{.spec.host}"Copy to Clipboard Copied! Toggle word wrap Toggle overflow
14.5. 为 Data Grid 集群启用 JMX 远程端口 复制链接链接已复制到粘贴板!
启用 JMX 远程端口,以公开 Data Grid MBeans 并将 Data Grid 与外部监控系统(如 Cryostat)集成。
当您为 Data Grid 集群启用 JMX 时,会出现以下情况:
-
每个 Data Grid 服务器 pod 使用 "admin" security-realm (包括 Operator 用户凭证)在端口
9999上公开一个经过身份验证的 JMX 端点。 -
&
lt;cluster-name>-adminService 会公开端口9999。
您只能在创建 Infinispan CR 时启用或禁用 JMX。创建 CR 实例后,您无法修改 JMX 设置。
流程
在
InfinispanCR 中启用 JMX。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 检索 Operator 用户凭证以验证客户端 JMX 连接。
oc get secret infinispan-generated-operator-secret -o jsonpath="{.data.identities\.yaml}" | base64 --decodeoc get secret infinispan-generated-operator-secret -o jsonpath="{.data.identities\.yaml}" | base64 --decodeCopy to Clipboard Copied! Toggle word wrap Toggle overflow
其他资源
14.6. 使用 Cryostat 设置 JFR 记录 复制链接链接已复制到粘贴板!
为在 OpenShift 上运行的 Data Grid 集群启用 JDK Flight Recorder (JFR)监控。
使用 Cryostat 进行 JFR 记录
JFR 深入了解 JVM 性能的各个方面,以简化集群检查和调试。根据您的要求,您可以使用 Cryostat 提供的集成工具来存储和分析记录,或者将记录导出到外部监控应用程序。
先决条件
- 安装 Cryostat Operator。您可以使用 Operator Lifecycle Manager (OLM)在 OpenShift 项目中安装 Cryostat Operator。
- 在您的 Data Grid 集群中启用了 JMX。在部署集群前,您必须启用 JMX,因为部署后无法修改 JMX 设置。
流程
在与
InfinispanCR 相同的命名空间中创建一个 Cryostat CR。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意Cryostat Operator 需要 cert-manager 进行流量加密。如果启用了 cert-manager,但未安装,部署会失败。详情请参阅 安装 Cryostat 指南。
等待
CryostatCR 就绪。oc wait -n <namespace> --for=condition=MainDeploymentAvailable cryostat/cryostat-sample
oc wait -n <namespace> --for=condition=MainDeploymentAvailable cryostat/cryostat-sampleCopy to Clipboard Copied! Toggle word wrap Toggle overflow 打开 Cryostat
status.applicationUrl。oc -n <namespace> get cryostat cryostat-sample
oc -n <namespace> get cryostat cryostat-sampleCopy to Clipboard Copied! Toggle word wrap Toggle overflow 检索 Operator 用户凭证,以便在 Cryostat UI 中验证客户端 JMX 连接。
oc get secret infinispan-generated-operator-secret -o jsonpath="{.data.identities\.yaml}" | base64 --decodeoc get secret infinispan-generated-operator-secret -o jsonpath="{.data.identities\.yaml}" | base64 --decodeCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 在 Cryostat UI 中,进入 Security 菜单。
- 在 Store Credentials 窗口中,单击 Add 按钮。此时会打开 Store Credentials 窗口。
在 Match Expression filed 中,以以下格式输入匹配表达式详情:
target.labels['infinispan_cr'] == '<cluster_name>'
target.labels['infinispan_cr'] == '<cluster_name>'Copy to Clipboard Copied! Toggle word wrap Toggle overflow
第 15 章 使用反关联性保证可用性 复制链接链接已复制到粘贴板!
Kubernetes 包含反关联性功能,可防止工作负载出现单一故障点。
15.1. 反关联性策略 复制链接链接已复制到粘贴板!
集群中的每个 Data Grid 节点都在集群中运行的 pod 中运行。每个 Red Hat OpenShift 节点在物理主机系统上运行。反关联性的工作原理是将 Data Grid 节点分布到 OpenShift 节点,确保即使出现硬件故障,您的数据网格集群也会保持可用。
Data Grid Operator 提供了两个反关联性策略:
kubernetes.io/hostname- 数据源副本 pod 调度到不同的 OpenShift 节点上。
topology.kubernetes.io/zone- 数据网格副本 pod 调度到多个区域。
容错
反关联性策略通过不同的方式保证集群可用性。
只有在 OpenShift 节点或区域的数量大于 Data Grid 节点的数量时才适用。
将 pod 调度到不同的 OpenShift 节点上
为以下类型的缓存提供 x 节点故障:
-
replicated:
x = spec.replicas - 1 -
distributed:
x = num_owners - 1
在多个区间调度 pod
当 x 区域存在以下类型的缓存时,提供 x 区故障的容错:
-
replicated:
x = spec.replicas - 1 -
distributed:
x = num_owners - 1
spec.replicas- 定义每个 Data Grid 集群中的 pod 数量。
num_owners- 是 cache 配置属性,用于定义缓存中每个条目的副本数。
15.2. 配置反关联性 复制链接链接已复制到粘贴板!
指定 OpenShift 为 Data Grid 集群调度 pod 的位置,以确保可用性。
流程
-
将
spec.affinity块添加到InfinispanCR。 - 根据需要配置反关联性策略。
-
应用
InfinispanCR。
15.2.1. 反关联性策略配置 复制链接链接已复制到粘贴板!
在 Infinispan CR 中配置反关联性策略,以控制 OpenShift 调度 Data Grid 副本 pod 的位置。
| 拓扑键 | 描述 |
|---|---|
|
| 在多个区域间调度 Data Grid 副本 pod。 |
|
| 将 Data Grid 副本 pod 调度到不同的 OpenShift 节点上。 |
将 pod 调度到不同的 OpenShift 节点上
如果没有在 Infinispan CR 中配置 spec.affinity 字段,则 Data Grid Operator 会使用反关联性策略:
需要不同的节点
在以下示例中,如果不同的节点不可用,OpenShift 不会调度 Data Grid pod:
为确保您可以在不同的 OpenShift 节点上调度 Data Grid 副本容器集,可用的 OpenShift 节点数量必须大于 spec.replicas 的值。
在多个 OpenShift 区域间调度 pod
以下示例在调度 pod 时首选多个区域,但如果无法在区间调度,但无法在不同的 OpenShift 节点上调度数据网格副本 pod:
需要多个区域
以下示例仅在调度 Data Grid 副本 pod 时使用区策略:
第 16 章 自动扩展 复制链接链接已复制到粘贴板!
Kubernetes 包含 HorizontalPodAutoscaler,允许 StatefulSets 或 Deployment 根据指定的指标自动扩展或缩减。Infinispan CR 会公开 .status.scale 子资源,它允许 HorizontalPodAutoscaler 资源以 Infinispan CR 为目标。
在定义 HorizontalPodAutoscaler 配置前,请考虑您定义的 Data Grid 缓存类型。分布式和复制缓存有不同的扩展要求,因此为运行这些缓存类型的组合定义了 HorizontalPodAutoscaler 可能并不具有优势。例如,定义当内存用量达到特定百分比时扩展的 HorizontalPodAutoscaler 允许在定义分布式缓存时增加整个缓存容量,因为缓存条目分散到 pod 中,但它无法像每个 pod 主机所有缓存条目一样使用复制缓存。相反,根据 CPU 使用率配置 HorizontalPodAutoscaler,对于每个 pod 都包含所有缓存条目的集群会更有益,因此在附加节点间分布读取请求将允许同时处理更多请求。
16.1. Configuring HorizontalPodAutoscaler 复制链接链接已复制到粘贴板!
创建一个以 Infinispan CR 为目标的 HorizontalPodAutoScaler 资源。
流程
在与
InfinispanCR 相同的命名空间中定义HorizontalPodAutoscaler资源Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
InfinispanCR 的名称
如果使用类型为 cpu 或 memory 的指标资源,您必须在 Infinispan CR 中为此资源配置请求/限制。
在升级 Data Grid 集群时,应删除 HorizontalPodAutoscaler,因为自动扩展会导致升级过程进入非预期的状态,因为 Operator 需要将集群缩减为 0 个 pod。
第 17 章 使用 Data Grid Operator 创建缓存 复制链接链接已复制到粘贴板!
使用 Cache CR 添加带有 Data Grid Operator 的缓存配置,并控制 Data Grid 如何存储数据。
17.1. Data Grid 缓存 复制链接链接已复制到粘贴板!
缓存配置定义数据存储的特征和功能,且必须通过 Data Grid 模式有效。Data Grid 建议以 XML 或 JSON 格式创建独立文件来定义您的缓存配置。您应该将 Data Grid 配置与应用程序代码分开以方便验证,并避免出现需要以 Java 或其他客户端语言维护 XML 代码段的情况。
要使用在 OpenShift 上运行的 Data Grid 集群创建缓存,您应该:
-
使用
CacheCR 作为通过 OpenShift 前端创建缓存的机制。 -
使用
BatchCR 从独立配置文件一次创建多个缓存。 - 访问数据网格控制台,并以 XML 或 JSON 格式创建缓存。
您可以使用 Hot Rod 或 HTTP 客户端,但 Data Grid 建议 Cache CR 或 Batch CR,除非特定的用例需要编程远程缓存创建。
缓存 CR
-
缓存CR 仅适用于 Data Grid 服务 pod。 -
每个
CacheCR 对应于 Data Grid 集群上的单个缓存。
17.2. 使用 Cache CR 创建缓存 复制链接链接已复制到粘贴板!
完成以下步骤,使用 XML 或 YAML 格式的有效配置在 Data Grid 服务集群中创建缓存。
流程
-
在
metadata.name字段中创建带有唯一值的CacheCR。 -
使用
spec.clusterName字段指定目标 Data Grid 集群。 使用
spec.name字段命名您的缓存。注意缓存配置中的
name属性不会生效。如果您没有使用spec.name字段指定名称,则缓存将使用metadata.name字段的值。-
使用
spec.template字段添加缓存配置。 应用
CacheCR,例如:oc apply -f mycache.yaml cache.infinispan.org/mycachedefinition created
oc apply -f mycache.yaml cache.infinispan.org/mycachedefinition createdCopy to Clipboard Copied! Toggle word wrap Toggle overflow
缓存 CR 示例
XML
YAML
17.3. 使用 Cache CR 更新缓存 复制链接链接已复制到粘贴板!
您可以控制 Data Grid Operator 如何在 Cache CR 中处理对缓存配置的修改。
Data Grid Operator 会尝试在运行时更新 Data Grid 服务器上的缓存配置。如果更新失败,Data Grid Operator 会使用以下策略之一:
- Retain 策略
-
Operator 将
CacheCR 的状态更新为Ready=False。您可以手动删除CacheCR 并创建新的缓存配置。这是默认策略。 - Recreate 策略
Operator 从 Data Grid 集群中删除缓存,并从
CacheCR 创建带有最新spec.template值的新缓存。重要只有在部署可以容忍数据丢失时,才配置
recreate策略。
先决条件
-
具有有效的
CacheCR。
流程
使用
spec.updates.strategy字段设置CacheCR 策略。mycache.yaml
spec: updates: strategy: recreatespec: updates: strategy: recreateCopy to Clipboard Copied! Toggle word wrap Toggle overflow 对
CacheCR 应用更改,例如:oc apply -f mycache.yaml
oc apply -f mycache.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
17.4. 添加持久性缓存存储 复制链接链接已复制到粘贴板!
您可以将持久性缓存存储添加到 Data Grid 服务 pod 中,将数据保存到持久性卷中。
Data Grid 在 /opt/infinispan/server/data 目录中创建单一文件缓存存储 .dat 文件。
流程
将
<file-store/> 元素添加到 Data Grid 缓存中的持久性配置,如下例所示:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
第 18 章 运行批处理操作 复制链接链接已复制到粘贴板!
Data Grid Operator 提供了一个 Batch CR,可让您批量创建 Data Grid 资源。批处理 CR 在批处理模式中使用 Data Grid 命令行界面(CLI)来执行操作序列。
修改 批处理 CR 实例无效。批处理操作是修改 Data Grid 资源的"一次性"事件。要为 CR 更新 .spec 字段,或者在批处理操作失败时,您必须创建 Batch CR 的新实例。
18.1. 运行内联批处理操作 复制链接链接已复制到粘贴板!
如果批处理 CR 不需要单独的配置工件,请将 批处理 操作直接包含在批处理 CR 中。
流程
创建
BatchCR。-
指定您希望批处理操作作为
spec.cluster字段的值运行的 Data Grid 集群名称。 添加每个 CLI 命令,以在
spec.config字段中的一行中运行。Copy to Clipboard Copied! Toggle word wrap Toggle overflow
-
指定您希望批处理操作作为
应用您的
批处理CR。oc apply -f mybatch.yaml
oc apply -f mybatch.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 等待
BatchCR 成功。oc wait --for=jsonpath='{.status.phase}'=Succeeded Batch/mybatchoc wait --for=jsonpath='{.status.phase}'=Succeeded Batch/mybatchCopy to Clipboard Copied! Toggle word wrap Toggle overflow
18.2. 为批处理操作创建 ConfigMap 复制链接链接已复制到粘贴板!
创建一个 ConfigMap,以便为批处理操作使用其他文件,如 Data Grid 缓存配置。
先决条件
出于演示目的,您应该在开始操作前将一些配置工件添加到主机文件系统中:
创建一个
/tmp/mybatch目录,您可以在其中添加一些文件。mkdir -p /tmp/mybatch
mkdir -p /tmp/mybatchCopy to Clipboard Copied! Toggle word wrap Toggle overflow 创建 Data Grid 缓存配置。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
流程
创建包含您要运行的所有命令的
批处理文件。例如,以下
批处理文件会创建一个名为"mycache"的缓存,并为它添加两个条目:create cache mycache --file=/etc/batch/mycache.xml put --cache=mycache hello world put --cache=mycache hola mundo
create cache mycache --file=/etc/batch/mycache.xml put --cache=mycache hello world put --cache=mycache hola mundoCopy to Clipboard Copied! Toggle word wrap Toggle overflow 重要ConfigMap挂载到位于/etc/batch的 Data Grid pod 中。您必须使用该路径在批处理操作中添加所有--file=指令。确保批处理操作所需的所有配置工件与
批处理文件位于同一个目录中。ls /tmp/mybatch batch mycache.xml
ls /tmp/mybatch batch mycache.xmlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 从 目录创建
ConfigMap。oc create configmap mybatch-config-map --from-file=/tmp/mybatch
oc create configmap mybatch-config-map --from-file=/tmp/mybatchCopy to Clipboard Copied! Toggle word wrap Toggle overflow
18.3. 使用 ConfigMap 运行批处理操作 复制链接链接已复制到粘贴板!
运行包含配置工件的批处理操作。
先决条件
-
创建包含批处理操作所需的任何文件的
ConfigMap。
流程
-
创建一个
BatchCR,将 Data Grid 集群名称指定为spec.cluster字段的值。 使用
spec.configMap字段设置包含批处理文件和配置工件的ConfigMap名称。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 应用您的
批处理CR。oc apply -f mybatch.yaml
oc apply -f mybatch.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 等待
BatchCR 成功。oc wait --for=jsonpath='{.status.phase}'=Succeeded Batch/mybatchoc wait --for=jsonpath='{.status.phase}'=Succeeded Batch/mybatchCopy to Clipboard Copied! Toggle word wrap Toggle overflow
18.4. 批处理状态消息 复制链接链接已复制到粘贴板!
使用 Batch CR 中的 status.Phase 字段验证批处理操作并进行故障排除。
| 阶段 | 描述 |
|---|---|
|
| 所有批处理操作都成功完成。 |
|
| 批处理操作已排队,资源正在初始化。 |
|
| 批处理操作已准备好启动。 |
|
| 批处理操作正在进行中。 |
|
| 一个或多个批处理操作不成功。 |
失败的操作
批处理操作不是原子的。如果批处理脚本中的命令失败,它不会影响其他操作或导致它们回滚。
如果您的批处理操作有任何服务器或语法错误,您可以在 status.Reason 字段中查看 Batch CR 中的日志消息。
18.5. 批处理操作示例 复制链接链接已复制到粘贴板!
使用这些示例批处理操作作为使用 Batch CR 创建和修改 Data Grid 资源的起点。
您只能通过 ConfigMap 将配置文件传递给 Data Grid Operator。
ConfigMap 挂载到位于 /etc/batch 的 Data Grid pod 中,因此您必须使用该路径预先填充所有 --file= 指令。
18.5.1. 缓存 复制链接链接已复制到粘贴板!
- 从配置文件创建多个缓存。
- 从文件创建模板,然后从模板创建缓存。
18.5.2. 计数器 复制链接链接已复制到粘贴板!
使用 Batch CR 创建多个计数器,这些计数器可以递增和减少,以记录对象计数。
您可以使用计数器来生成标识符,作为速率限制器,或者跟踪资源被访问的次数。
18.5.3. protobuf 模式 复制链接链接已复制到粘贴板!
注册 Protobuf 模式,以查询缓存中的值。protobuf 模式(.proto 文件)提供有关自定义实体和控制字段索引的元数据。
18.5.4. 任务 复制链接链接已复制到粘贴板!
上传实施 org.infinispan.tasks.ServerTask 或与 javax.script 脚本 API 兼容的脚本的任务。
第 19 章 备份和恢复 Data Grid 集群 复制链接链接已复制到粘贴板!
借助 Data Grid Operator,您可以备份和恢复 Data Grid 集群状态,以便在集群之间迁移 Data Grid 资源。
19.1. 备份和恢复 CR 复制链接链接已复制到粘贴板!
CR 在运行时保存内存数据,以便您可以轻松重新创建 Data Grid 集群。
备份和恢复
应用 Backup 或 Restore CR 会创建一个新 pod,它将把 Data Grid 集群作为零容量成员加入,这意味着不需要集群重新平衡或状态传输来加入。
对于备份操作,pod 会迭代缓存条目和其他资源,并在持久性卷(PV)上的 /opt/infinispan/backups 目录中创建一个存档(一个 .zip 文件)。
执行备份不会影响性能,因为 Data Grid 集群中的其他 pod 只需要在迭代缓存条目时响应备份 pod。
对于恢复操作,pod 从 PV 上的存档检索 Data Grid 资源,并将其应用到 Data Grid 集群。
当备份或恢复操作完成后,pod 会离开集群并被终止。
协调
Data Grid Operator 不协调 Backup 和 Restore CR,这意味着备份和恢复操作是"一次性"事件。
修改现有 Backup 或 Restore CR 实例不会执行操作或有任何效果。如果要更新 .spec 字段,您必须创建一个 Backup 或 Restore CR 的新实例。
19.2. 备份 Data Grid 集群 复制链接链接已复制到粘贴板!
创建将 Data Grid 集群状态存储到持久性卷的备份文件。
先决条件
-
使用
spec.service.type: DataGrid创建InfinispanCR。 确保没有与 Data Grid 集群活跃的客户端连接。
在备份缓存后,数据网格备份不提供快照隔离,数据修改不会写入存档。
要归档集群的确切状态,您应该始终在备份前断开任何客户端。
流程
-
使用
metadata.name字段命名BackupCR。 -
使用
spec.cluster字段指定要备份的 Data Grid 集群。 配置持久性卷声明(PVC),将备份存档添加到带有 spec.volume.storage 和
字段中的持久性卷(PV)。spec.volume.storage.storageClassNameCopy to Clipboard Copied! Toggle word wrap Toggle overflow (可选)包含
spec.resources字段,以指定您要备份的 Data Grid 资源。如果没有包括任何
spec.resources字段,BackupCR 会创建一个包含所有 Data Grid 资源的存档。如果指定了spec.resources字段,BackupCR 会创建一个仅包含这些资源的存档。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 您还可以使用
*通配符字符,如下例所示:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 应用
备份CR。oc apply -f my-backup.yaml
oc apply -f my-backup.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
检查在
BackupCR 中status.phase字段的状态是否为Succeeded,Data Grid 日志具有以下消息:ISPN005044: Backup file created 'my-backup.zip'
ISPN005044: Backup file created 'my-backup.zip'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令检查备份是否已成功创建:
oc describe Backup my-backup
oc describe Backup my-backupCopy to Clipboard Copied! Toggle word wrap Toggle overflow
19.3. 恢复 Data Grid 集群 复制链接链接已复制到粘贴板!
从备份存档中恢复数据网格集群状态。
先决条件
-
在源集群中创建
BackupCR。 创建 Data Grid 服务 pod 的目标 Data Grid 集群。
注意如果您恢复现有的缓存,则操作会覆盖缓存中的数据,而不是缓存配置。
例如,您可以在源集群中备份名为
mycache的分布式缓存。然后,您可以在目标集群中恢复mycache作为复制缓存。在这种情况下,源集群中的数据会被恢复,mycache继续在目标集群中复制配置。确保没有与要恢复的目标 Data Grid 集群的活动客户端连接。
从备份中恢复的缓存条目可能会覆盖最新的缓存条目。
例如,客户端执行cache.put (k=2)操作,然后恢复包含k=1的备份。
流程
-
使用
metadata.name字段命名RestoreCR。 -
指定与
spec.backup字段一起使用的BackupCR。 使用
spec.cluster字段指定要恢复的 Data Grid 集群。Copy to Clipboard Copied! Toggle word wrap Toggle overflow (可选)添加
spec.resources字段以仅恢复特定资源。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 应用
RestoreCR。oc apply -f my-restore.yaml
oc apply -f my-restore.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
检查
RestoreCR 中的status.phase字段的状态是否为Succeeded,Data Grid 日志具有以下消息:ISPN005045: Restore 'my-backup' complete
ISPN005045: Restore 'my-backup' completeCopy to Clipboard Copied! Toggle word wrap Toggle overflow
然后,您应该打开 Data Grid 控制台或建立 CLI 连接,以验证数据和数据网格资源是否如预期恢复。
19.4. 备份和恢复状态 复制链接链接已复制到粘贴板!
Backup 和 Restore CR 包含一个 status.phase 字段,它为操作的每个阶段提供状态。
| Status | 描述 |
|---|---|
|
| 系统接受了请求,控制器正在准备底层资源来创建 pod。 |
|
| 控制器已成功准备了所有底层资源。 |
|
| pod 被创建,操作在 Data Grid 集群上正在进行。 |
|
| 此操作已在 Data Grid 集群上成功完成,pod 被终止。 |
|
| 操作没有成功完成,pod 被终止。 |
|
| 控制器无法获取 pod 的状态,或者确定操作的状态。此条件通常表示与 pod 的临时通信错误。 |
19.4.1. 处理失败的备份和恢复操作 复制链接链接已复制到粘贴板!
如果 Backup 或 Restore CR 的 status.phase 字段为 Failed,在尝试操作前,您应该检查 pod 日志以确定根本原因。
流程
检查执行失败操作的 pod 的日志。
Pod 被终止,但会一直可用,直到您删除
Backup或RestoreCR。oc logs <backup|restore_pod_name>
oc logs <backup|restore_pod_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 解决 pod 日志指示的任何错误条件或其他失败原因。
-
创建
Backup或RestoreCR 的新实例,并再次尝试操作。
第 20 章 将自定义代码部署到 Data Grid 复制链接链接已复制到粘贴板!
将自定义代码(如脚本和事件监听程序)添加到您的 Data Grid 集群中。
在将自定义代码部署到 Data Grid 集群之前,您需要将其设置为 Data Grid 集群。要做到这一点,您可以从持久性卷(PV)复制工件,从 HTTP 或 FTP 服务器下载工件,或使用这两种方法。
20.1. 将代码工件复制到 Data Grid 集群 复制链接链接已复制到粘贴板!
将工件添加到持久性卷(PV),然后将其复制到 Data Grid pod。
此流程解释了如何使用挂载持久性卷声明(PVC)的临时 pod:
- 允许您将代码工件添加到 PV (可能写操作)。
- 允许 Data Grid pod 从 PV 加载代码工件(特别是读取操作)。
要执行这些读写操作,您需要特定的 PV 访问模式。但是,对不同 PVC 访问模式的支持取决于平台。
本文档的范围超出了本文档,以提供使用不同平台创建 PVC 的说明。为了简单起见,以下步骤显示了一个具有 ReadWriteMany 访问模式的 PVC。
在某些情况下,只有 ReadOnlyMany 或 ReadWriteOnce 访问模式可用。您可以通过回收并使用相同的 spec.volumeName 的 PVC 来结合使用这些访问模式。
使用 ReadWriteOnce 访问模式会导致集群中的所有 Data Grid pod 调度到同一 OpenShift 节点上。
流程
切换到 Data Grid 集群的命名空间。
oc project rhdg-namespace
oc project rhdg-namespaceCopy to Clipboard Copied! Toggle word wrap Toggle overflow 为自定义代码工件创建一个 PVC,例如:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 应用您的 PVC。
oc apply -f datagrid-libs.yaml
oc apply -f datagrid-libs.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 创建挂载 PVC 的 pod,例如:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将 pod 添加到 Data Grid 命名空间并等待它就绪。
oc apply -f datagrid-libs-pod.yaml oc wait --for=condition=ready --timeout=2m pod/datagrid-libs-pod
oc apply -f datagrid-libs-pod.yaml oc wait --for=condition=ready --timeout=2m pod/datagrid-libs-podCopy to Clipboard Copied! Toggle word wrap Toggle overflow 将代码工件复制到 pod 中,以便它们加载到 PVC 中。
例如,要从本地
libs目录中复制代码工件,请执行以下操作:oc cp --no-preserve=true libs datagrid-libs-pod:/tmp/
oc cp --no-preserve=true libs datagrid-libs-pod:/tmp/Copy to Clipboard Copied! Toggle word wrap Toggle overflow 删除 pod。
oc delete pod datagrid-libs-pod
oc delete pod datagrid-libs-podCopy to Clipboard Copied! Toggle word wrap Toggle overflow 在
InfinispanCR 中指定带有spec.dependencies.volumeClaimName的持久性卷,然后应用更改。Copy to Clipboard Copied! Toggle word wrap Toggle overflow
如果更新持久性卷上的自定义代码,您必须重启 Data Grid 集群,以便它可以加载更改。
20.2. 下载代码工件 复制链接链接已复制到粘贴板!
将工件添加到 HTTP 或 FTP 服务器,以便 Data Grid Operator 将它们下载到每个 Data Grid 节点上的 {lib_path} 目录中。
下载文件时,Data Grid Operator 可以自动检测文件类型。Data Grid Operator 还会在下载完成后将存档文件(如 zip 或 tgz )提取到文件系统。
您还可以使用 groupId:artifactId:version 格式下载 Maven 工件,如 org.postgresql:postgresql:42.3.1。
每次 Data Grid Operator 都会创建一个 Data Grid 节点,它将工件下载到节点。
先决条件
- 在 HTTP 或 FTP 服务器上托管您的代码工件,或将其发布到 maven 存储库。
流程
-
将
spec.dependencies.artifacts字段添加到InfinispanCR。 执行以下操作之一:
-
将要通过
HTTP或FTP下载文件的位置指定为spec.dependencies.artifacts.url字段的值。 -
提供 Maven 工件以下载
groupId:artifactId:version格式作为spec.dependencies.artifacts.maven字段的值。
-
将要通过
(可选)指定一个 checksum 来验证使用
spec.dependencies.artifacts.hash字段下载的完整性。hash字段需要一个值的格式是 <algorithm>:<checksum>,其中 <algorithm> 是sha1|sha224|sha256|sha384|sha512|md5。Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 应用更改。
第 21 章 建立远程客户端连接 复制链接链接已复制到粘贴板!
从 Data Grid Console、命令行界面(CLI)和远程客户端连接到 Data Grid 集群。
21.1. 客户端连接详情 复制链接链接已复制到粘贴板!
与 Data Grid 的连接需要以下信息:
- 主机名
- 端口
- 身份验证凭证(如果需要)
- TLS 证书(如果使用加密)
主机名
您使用的主机名取决于客户端是否在与 Data Grid 相同的 OpenShift 集群上运行。
在同一 OpenShift 集群上运行的客户端应用使用 Data Grid 集群的内部服务名称。
metadata: name: infinispan
metadata:
name: infinispan
在不同 OpenShift 或 OpenShift 外部运行的客户端应用使用的主机名,它依赖于数据网格在网络上公开的方式。
LoadBalancer 服务使用负载均衡器的 URL。NodePort 服务使用节点主机名。Red Hat OpenShift Route 使用您定义的自定义主机名或系统生成的主机名。
端口
OpenShift 上的客户端连接和 LoadBalancer 服务使用端口 11222。
NodePort 服务使用 30000 到 60000 范围内的端口。路由使用端口 80 (加密)或 443 (加密)。
21.2. 使用远程 shell 连接到 Data Grid 集群 复制链接链接已复制到粘贴板!
启动到 Data Grid 集群的远程 shell 会话,并使用命令行界面(CLI)来操作数据网格资源并执行管理操作。
先决条件
-
在您的
PATH上具有kubectl-infinispan。 - 具有有效的 Data Grid 凭据。
流程
运行
infinispan shell命令以连接到您的 Data Grid 集群。oc infinispan shell <cluster_name>
oc infinispan shell <cluster_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意如果您可以访问身份验证 secret,且只有一个 Data Grid 用户,则
kubectl-infinispan插件会自动检测到您的凭证并向 Data Grid 进行身份验证。如果您的部署有多个 Data Grid 凭证,请使用--username参数指定用户,并在提示时输入对应的密码。根据需要执行 CLI 操作。
提示按 tab 键或使用
--help参数查看可用选项和帮助文本。-
使用
quit命令结束远程 shell 会话。
21.3. 访问数据网格控制台 复制链接链接已复制到粘贴板!
访问控制台以创建缓存、执行管理操作并监控您的数据网格集群。
先决条件
-
在网络上公开 Data Grid,以便您可以通过浏览器访问控制台。
例如,配置LoadBalancer服务或创建Route。
流程
从位于
$HOSTNAME:$PORT的任何浏览器访问控制台。将
$HOSTNAME:$PORT替换为可用 Data Grid 的网络位置。
Data Grid 控制台应该只通过 OpenShift 服务或公开端口 11222 访问。
21.4. 热 Rod 客户端 复制链接链接已复制到粘贴板!
hot Rod 是一个二进制 TCP 协议,Data Grid 提供带有远程客户端的高性能数据传输功能。
客户端智能
Hot Rod 协议包含一个机制,可为客户端提供缓存拓扑的最新视图。客户端智能通过减少读写操作的网络跃点数量来提高性能。
在同一 OpenShift 集群中运行的客户端可以访问 Data Grid pod 的内部 IP 地址,以便您可以使用任何客户端智能。
HASH_DISTRIBUTION_AWARE 是默认的智能机制,使客户端能够将请求路由到主所有者,从而为 Hot Rod 客户端提供最佳性能。
在不同 OpenShift 或 OpenShift 外部运行的客户端可以使用 LoadBalancer、NodePort 或 OpenShift Route 访问数据网格。
通过 OpenShift 路由进行热 Rod 客户端连接 需要加密。您必须使用 SNI 配置 TLS,否则 Hot Rod 连接会失败。
对于未加密的 Hot Rod 客户端连接,您必须使用 LoadBalancer 服务或 NodePort 服务。
在以下情况下,热 Rod 客户端必须使用 BASIC 智能:
-
通过
LoadBalancer服务、NodePort服务或 OpenShift 路由连接到 Data Grid。 - 使用跨站点复制时故障转移到不同的 OpenShift 集群。
OpenShift 集群管理员可以定义网络策略,以限制到 Data Grid 的流量。在某些情况下,网络隔离策略可能需要使用 BASIC 智能,即使客户端在同一 OpenShift 集群中运行,但使用不同的命名空间。
21.4.1. hot Rod 客户端配置 API 复制链接链接已复制到粘贴板!
您可以使用 ConfigurationBuilder 接口以编程方式配置 Hot Rod 客户端连接。
将以下示例中的 $SERVICE_HOSTNAME 替换为 Data Grid 集群的内部服务名称。
metadata: name: infinispan
metadata:
name: infinispan
在 OpenShift 中
ConfigurationBuilder
hotrod-client.properties
外部 OpenShift
ConfigurationBuilder
hotrod-client.properties
21.4.2. 为证书身份验证配置 Hot Rod 客户端 复制链接链接已复制到粘贴板!
如果启用了客户端证书身份验证,客户端必须在与 Data Grid 进行连接时显示有效的证书。
验证策略
如果使用 Validate 策略,则必须使用密钥存储配置客户端,以便它们能够提供签名证书。您还必须使用 Data Grid 凭证和任何合适的身份验证机制配置客户端。
验证策略
如果使用 Authenticate 策略,则必须使用包含签名证书和有效 Data Grid 凭证的密钥存储配置客户端,作为可分辨名称(DN)的一部分。热 Rod 客户端还必须使用 EXTERNAL 身份验证机制。
如果启用安全授权,您应该为来自客户端证书的通用名称(CN)分配一个具有适当权限的角色。
以下示例显示了使用 Authenticate 策略进行客户端证书身份验证的 Hot Rod 客户端配置:
21.4.3. 从 Hot Rod 客户端创建缓存 复制链接链接已复制到粘贴板!
您可以使用 Hot Rod 客户端在 OpenShift 上运行的 Data Grid 集群上远程创建缓存。但是,Data Grid 建议使用 Data Grid 控制台、CLI 或带有 Cache CR 而不是 Hot Rod 客户端创建缓存。
以编程方式创建缓存
以下示例演示了如何将缓存配置添加到 ConfigurationBuilder 中,然后使用 RemoteCacheManager 创建它们:
本例演示了如何使用 XMLStringConfiguration () 方法创建名为 CacheWithXMLConfiguration 的缓存,将缓存配置作为 XML 传递:
使用 Hot Rod 客户端属性
当您为指定缓存调用 cacheManager.getCache () 调用时,Data Grid 从 Hot Rod 客户端属性创建它们,而不是返回 null。
在 hotrod-client.properties 中添加缓存配置,如下例所示:
# Add cache configuration infinispan.client.hotrod.cache.my-cache.template_name=org.infinispan.DIST_SYNC infinispan.client.hotrod.cache.another-cache.configuration=<infinispan><cache-container><distributed-cache name=\"another-cache\"/></cache-container></infinispan> infinispan.client.hotrod.cache.my-other-cache.configuration_uri=file:/path/to/configuration.xml
# Add cache configuration
infinispan.client.hotrod.cache.my-cache.template_name=org.infinispan.DIST_SYNC
infinispan.client.hotrod.cache.another-cache.configuration=<infinispan><cache-container><distributed-cache name=\"another-cache\"/></cache-container></infinispan>
infinispan.client.hotrod.cache.my-other-cache.configuration_uri=file:/path/to/configuration.xml
21.5. 访问 REST API 复制链接链接已复制到粘贴板!
Data Grid 提供了一个 RESTful 接口,您可以使用 HTTP 客户端与之交互。
先决条件
-
在网络上公开 Data Grid,以便您可以访问 REST API。
例如,配置LoadBalancer服务或创建Route。
流程
使用位于
$HOSTNAME:$PORT/rest/v2的任何 HTTP 客户端访问 REST API。将
$HOSTNAME:$PORT替换为 Data Grid 侦听客户端连接的网络位置。