第 19 章 将自定义代码部署到 Data Grid

将自定义代码(如脚本和事件监听器)添加到您的 Data Grid 集群。

在将自定义代码部署到 Data Grid 集群之前,您需要使其可用。为此,您可以复制持久性卷(PV)中的工件,请从 HTTP 或 FTP 服务器下载工件,也可以使用这两种方法。

19.1. 将代码工件复制到 Data Grid 集群

将您的工件添加到持久性卷(PV)中,然后将其复制到 Data Grid pod。

此流程解释了如何使用挂载持久性卷声明(PVC)的临时 pod:

  • 可让您在 PV 中添加代码工件(最好是写入操作)。
  • 允许 Data Grid pod 从 PV 加载代码工件(格式是一个读取操作)。

要执行这些读写操作,您需要特定的 PV 访问模式。但是,对不同的 PVC 访问模式的支持取决于平台。

本文档范围超出了本文档,以提供使用不同平台创建 PVC 的说明。为简单起见,以下流程显示一个带有 ReadWriteMany 访问模式的 PVC。

在某些情况下,只有 ReadOnlyManyReadWriteOnce 访问模式可用。您可以通过重新声明并重复使用具有相同 spec.volumeName 的 PVC 来结合使用这些访问模式。

注意

使用 ReadWriteOnce 访问模式会导致所有 Data Grid pod 调度到同一 OpenShift 节点上。

流程

  1. 切换到 Data Grid 集群的命名空间。

    oc project rhdg-namespace
  2. 为您的自定义代码工件创建一个 PVC,例如:

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: datagrid-libs
    spec:
      accessModes:
        - ReadWriteMany
      resources:
        requests:
          storage: 100Mi
  3. 应用 PVC。

    oc apply -f datagrid-libs.yaml
  4. 创建挂载 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.3
          volumeMounts:
            - mountPath: /tmp/libs
              name: lib-pv-storage
  5. 将 pod 添加到 Data Grid 命名空间,并等待它就绪。

    oc apply -f datagrid-libs-pod.yaml
    oc wait --for=condition=ready --timeout=2m pod/datagrid-libs-pod
  6. 将代码工件复制到 pod,以便它们加载到 PVC 中。

    例如,要从本地 libs 目录中复制代码工件,请执行以下操作:

    oc cp --no-preserve=true libs datagrid-libs-pod:/tmp/
  7. 删除 pod。

    oc delete pod datagrid-libs-pod

    Infinispan CR 中使用 spec.dependencies.volumeClaimName 指定持久性卷,然后应用更改。

    apiVersion: infinispan.org/v1
    kind: Infinispan
    metadata:
      name: infinispan
    spec:
      replicas: 2
      dependencies:
        volumeClaimName: datagrid-libs
      service:
        type: DataGrid
注意

如果在持久性卷中更新自定义代码,您必须重启 Data Grid 集群,以便它可以加载更改。