13.4. 从 OpenShift 集群外部使用 NFS 导出
OpenShift 集群外部的 NFS 客户端可以挂载由之前创建的 PVC 创建的 NFS 导出。
流程
启用
nfs
标志后,单服务器 CephNFS 由 Rook 部署。您需要获取要在下一步中使用的nfs-ganesha
服务器的ceph_nfs
字段的值:$ oc get pods -n openshift-storage | grep rook-ceph-nfs
$ oc describe pod <name of the rook-ceph-nfs pod> | grep ceph_nfs
例如:
$ oc describe pod rook-ceph-nfs-ocs-storagecluster-cephnfs-a-7bb484b4bf-bbdhs | grep ceph_nfs ceph_nfs=my-nfs
通过创建 Kubernetes LoadBalancer 服务,在 OpenShift 集群外公开 NFS 服务器。以下示例创建了一个 LoadBalancer 服务,并引用 OpenShift Data Foundation 创建的 NFS 服务器。
apiVersion: v1 kind: Service metadata: name: rook-ceph-nfs-ocs-storagecluster-cephnfs-load-balancer namespace: openshift-storage spec: ports: - name: nfs port: 2049 type: LoadBalancer externalTrafficPolicy: Local selector: app: rook-ceph-nfs ceph_nfs: <my-nfs> instance: a
将
<my-nfs>
替换为在第 1 步中获取的值。收集连接信息。外部客户端需要连接到导出的信息来自为 PVC 创建的持久性卷(PV)以及上一步中创建的 LoadBalancer 服务的状态。
从 PV 获取共享路径。
获取与 NFS 导出的 PVC 关联的 PV 名称:
$ oc get pvc <pvc_name> --output jsonpath='{.spec.volumeName}' pvc-39c5c467-d9d3-4898-84f7-936ea52fd99d
将
<pvc_name>
替换为您自己的 PVC 名称。例如:oc get pvc pvc-39c5c467-d9d3-4898-84f7-936ea52fd99d --output jsonpath='{.spec.volumeName}' pvc-39c5c467-d9d3-4898-84f7-936ea52fd99d
使用前面获取的 PV 名称获取 NFS 导出的共享路径:
$ oc get pv pvc-39c5c467-d9d3-4898-84f7-936ea52fd99d --output jsonpath='{.spec.csi.volumeAttributes.share}' /0001-0011-openshift-storage-0000000000000001-ba9426ab-d61b-11ec-9ffd-0a580a800215
获取 NFS 服务器的入口地址。服务的入口状态可以有多个地址。选择外部客户端所需的使用方法。在以下示例中,只有一个地址:主机名
ingress-id.somedomain.com
。$ oc -n openshift-storage get service rook-ceph-nfs-ocs-storagecluster-cephnfs-load-balancer --output jsonpath='{.status.loadBalancer.ingress}' [{"hostname":"ingress-id.somedomain.com"}]
使用上一步中的共享路径和入口地址连接外部客户端。以下示例将导出挂载到客户端的目录路径
/export/mount/path
:$ mount -t nfs4 -o proto=tcp ingress-id.somedomain.com:/0001-0011-openshift-storage-0000000000000001-ba9426ab-d61b-11ec-9ffd-0a580a800215 /export/mount/path
如果这仍然无法正常工作,则可能是 Kubernetes 环境仍然需要时间来配置网络资源,以允许到 NFS 服务器入口。