第 15 章 将自定义代码部署到 Data Grid
将自定义代码(如脚本和事件监听程序)添加到您的 Data Grid 集群中。
在将自定义代码部署到 Data Grid 集群之前,您需要将其设置为 Data Grid 集群。要做到这一点,您可以从持久性卷(PV)复制工件,从 HTTP 或 FTP 服务器下载工件,或使用这两种方法。
15.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
为自定义代码工件创建一个 PVC,例如:
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: datagrid-libs spec: accessModes: - ReadWriteMany resources: requests: storage: 100Mi
应用您的 PVC。
$ oc apply -f datagrid-libs.yaml
创建挂载 PVC 的 pod,例如:
apiVersion: v1 kind: Pod metadata: name: datagrid-libs-pod spec: securityContext: fsGroup: 2000 volumes: - name: lib-pv-storage persistentVolumeClaim: claimName: datagrid-libs containers: - name: lib-pv-container image: registry.redhat.io/datagrid/datagrid-8-rhel8:8.2 volumeMounts: - mountPath: /tmp/libs name: lib-pv-storage
将 pod 添加到 Data Grid 命名空间并等待它就绪。
$ oc apply -f datagrid-libs-pod.yaml $ oc wait --for=condition=ready --timeout=2m pod/datagrid-libs-pod
将代码工件复制到 pod 中,以便它们加载到 PVC 中。
例如,要从本地
libs
目录中复制代码工件,请执行以下操作:$ oc cp --no-preserve=true libs datagrid-libs-pod:/tmp/
删除 pod。
$ oc delete pod datagrid-libs-pod
在
Infinispan
CR 中指定带有spec.dependencies.volumeClaimName
的持久性卷,然后应用更改。apiVersion: infinispan.org/v1 kind: Infinispan metadata: name: example-infinispan spec: replicas: 2 dependencies: volumeClaimName: datagrid-libs service: type: DataGrid
如果更新持久性卷上的自定义代码,您必须重启 Data Grid 集群,以便它可以加载更改。