在kubernetes群集之间共享nfs卷

在kubernetes群集之间共享nfs卷,kubernetes,nfs,google-kubernetes-engine,persistent-volumes,Kubernetes,Nfs,Google Kubernetes Engine,Persistent Volumes,我们在GKE中设置了两个不同的集群。一个集群正在运行nfs服务器,在该集群上我们有一个指向该服务器的持久卷。然后将该PV安装在该集群上运行的吊舱上。第二个集群还有一个PV和一个pod,它们应该装载相同的nfs卷。这就是问题所在。在这里,我们指出它不使用nfs服务器集群地址的服务器。这是可以理解的,但我想知道如何最好地实现这一点 设置基本上如下所示: NFS使用的持久卷和持久卷声明 apiVersion: v1 kind: PersistentVolume metadata: name: nf

我们在GKE中设置了两个不同的集群。一个集群正在运行nfs服务器,在该集群上我们有一个指向该服务器的持久卷。然后将该PV安装在该集群上运行的吊舱上。第二个集群还有一个PV和一个pod,它们应该装载相同的nfs卷。这就是问题所在。在这里,我们指出它不使用nfs服务器集群地址的服务器。这是可以理解的,但我想知道如何最好地实现这一点

设置基本上如下所示:

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 版本:v1 种类:PersistentVolume 元数据: 名称:nfs pv 规格: 容量: 储存量:20Gi storageClassName:手动 访问模式: -读写 gcePersistentDisk: pdName:文件 fsType:ext4 --- 版本:v1 种类:PersistentVolumeClaim 元数据: 名称:nfs pvc 规格: storageClassName:手动 访问模式: -读写 资源: 请求: 储存量: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 apiVersion:extensions/v1beta1 种类:部署 元数据: 名称:nfs服务器 规格: 副本:1份 选择器: 火柴标签: 角色:nfs服务器 模板: 元数据: 标签: 角色:nfs服务器 规格: 容器: -名称:nfs服务器 图片:gcr.io/google_容器/卷nfs:0.8 端口: -名称:nfs 集装箱港口:2049 -姓名:mountd 集装箱港口:20048 -姓名:rpcbind 集装箱港口:111 securityContext: 特权:真的 体积数量: -mountPath:/exports 名称:mypvc 卷数: -名称:mypvc persistentVolumeClaim: 权利要求书名称: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 版本:v1 种类:服务 元数据: 名称:nfs服务器 规格: 端口: -名称:nfs 港口:2049 -姓名:mountd 港口:20048 -姓名:rpcbind 港口:111 选择器: 角色:nfs服务器 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 版本:v1 种类:PersistentVolume 元数据: 名称:nfs 规格: 容量: 储存量:20Gi storageClassName:手动 访问模式: -读写 nfs: 服务器:10.4.0.20 路径:“/” --- 种类:PersistentVolumeClaim 版本:v1 元数据: 名称:nfs 规格: storageClassName:手动 访问模式: -读写 资源: 请求: 储存量:20Gi 用于吊舱装载nfs的部署文件的一部分

volumes: - name: files persistentVolumeClaim: claimName: nfs 卷数: -名称:文件 persistentVolumeClaim: 索赔名称:nfs kubectl get pv和kubectl get 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 user@HP-EliteBook:~/下载$kubectl get pv 名称容量访问模式回收策略状态声明存储类原因期限 nfs 100Gi RWX保留绑定默认/nfs手册286d nfs pv 100Gi RWO保留绑定默认/nfs pvc手册286d user@HP-EliteBook:~/下载$kubectl get pvc 名称状态卷容量访问模式STORAGECLASS年龄 nfs绑定nfs 100Gi RWX手册286d nfs pvc绑定nfs pv 100Gi RWO手册286d
pods使用的PV中的ip是问题所在。同一集群上的pod可以连接到它,但另一集群上的pod不能连接到它。我可以使用另一个集群中的实际podIP,但podIP会随着每次部署而变化,因此这不是一个有效的解决方案。解决此问题的最佳方法是什么?例如,我只希望第二个群集能够访问nfs服务器,而不是向世界开放它。

根据您的部署清单,这里的问题是,您的nfs服务器正在使用一个nfs持久卷?是的,nfs服务器也在使用一个持久卷和卷声明器。为什么不在另一个群集上使用相同的nfs服务器pv和pvc?我所了解的是,您有一个外部nfs来为您的内部nfs服务器服务。pvc和pv呢?你能展示“kubectl get pv”和pvc的结果吗?在上面添加了一些关于你评论的信息@巴尔丘亚不知道你在这里是什么意思。pod部署如何查找第二个集群上的pod。如果我在那里写了一个集群上不存在的声明名,我想它不会找到它吧?