我们在GKE中设置了两个不同的集群 . 一个集群正在运行nfs-server,在该集群上,我们有一个指向服务器的持久卷 . 然后将此PV安装在此群集上运行的Pod上 . 第二个集群还有一个PV和一个应安装相同nfs卷的pod . 这是问题发生的地方 . 我们指出服务器使用nfs-server clusterIp地址时不起作用 . 这是可以理解的,但我想知道如何最好地实现这一目标 .

设置基本上是这样的:

NFS使用的持久卷和持久卷声明

apiVersion: v1
kind: PersistentVolume
metadata:
  name: nfs-pv
spec:
  capacity:
    storage: 20Gi
  storageClassName: manual
  accessModes:
    - ReadWriteMany
  gcePersistentDisk:
    pdName: files
    fsType: ext4
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: nfs-pvc
spec:
  storageClassName: manual
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 20Gi

NFS服务器部署

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: nfs-server
spec:
  replicas: 1
  selector:
    matchLabels:
      role: nfs-server
  template:
    metadata:
      labels:
        role: nfs-server
    spec:
      containers:
      - name: nfs-server
        image: gcr.io/google_containers/volume-nfs:0.8
        ports:
          - name: nfs
            containerPort: 2049
          - name: mountd
            containerPort: 20048
          - name: rpcbind
            containerPort: 111
        securityContext:
          privileged: true
        volumeMounts:
          - mountPath: /exports
            name: mypvc
      volumes:
        - name: mypvc
          persistentVolumeClaim:
            claimName: nfs-pvc

NFS服务器服务

apiVersion: v1
kind: Service
metadata:
  name: nfs-server
spec:
  ports:
    - name: nfs
      port: 2049
    - name: mountd
      port: 20048
    - name: rpcbind
      port: 111
  selector:
    role: nfs-server

pod使用的持久卷和持久卷声明:

apiVersion: v1
  kind: PersistentVolume
  metadata:
    name: nfs
  spec:
    capacity:
      storage: 20Gi
    storageClassName: manual
    accessModes:
      - ReadWriteMany
    nfs:
      server: 10.4.0.20
      path: "/"

---
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: nfs
spec:
  storageClassName: manual
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 20Gi

用于挂载nfs的pod的部署文件的一部分

volumes:
        - name: files
          persistentVolumeClaim:
            claimName: nfs

kubectl的输出得到pv和kubectl获得pvc

user@HP-EliteBook:~/Downloads$ kubectl get pv
NAME      CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS    CLAIM             STORAGECLASS   REASON    AGE
nfs       100Gi      RWX            Retain           Bound     default/nfs       manual                   286d
nfs-pv    100Gi      RWO            Retain           Bound     default/nfs-pvc   manual                   286d
user@HP-EliteBook:~/Downloads$ kubectl get pvc
NAME      STATUS    VOLUME    CAPACITY   ACCESS MODES   STORAGECLASS   AGE
nfs       Bound     nfs       100Gi      RWX            manual         286d
nfs-pvc   Bound     nfs-pv    100Gi      RWO            manual         286d

pod中使用的PV中的ip是问题所在 . 同一群集上的Pod可以连接到它,但不能连接到另一个群集上的pod . 我可以使用来自其他群集的实际podIP,但podIP随每次部署而变化,因此这不是一个可行的解决方案 . 解决此问题的最佳方法是什么,我只希望第二个集群可以访问nfs服务器,而不是打开它到世界各地 .