通过 DNS 或静态 ClusterIP 为 PersistentVolume 配置 NFS 服务器

Configure NFS server for PersistentVolume either via DNS or static ClusterIP

我在 google 容器引擎上有一个 kubernetes 集群 运行,它定义了一个 Pod 运行 一个 NFS 服务器,我想通过其他 Pods 访问它各种 PersistentVolumes.

如果在同一个集群中,配置 NFS 服务的最佳方法是什么?

根据各种文档,我发现它不可能依赖 kube-dns,因为启动 kubernetes pod 的节点未配置为将其用作其 DNS。

所以这是不可能的(而且确实行不通 - 我用各种不同的方法测试过它 hostname/FQDN...)

apiVersion: v1
kind: PersistentVolume
metadata:
  name: xxx-persistent-storage
  labels:
    app: xxx
spec:
  capacity:
    storage: 10Gi
  nfs:
    path: "/exports/xxx"
    server: nfs-service.default.svc.cluster.local  # <-- does not work

我可以启动 NFS 服务器并通过 kubectl describe svc nfs-service 检查其 ClusterIP,然后为 PV 硬编码其端点 IP(这有效):

apiVersion: v1
kind: PersistentVolume
metadata:
  name: xxx-persistent-storage
  labels:
    app: xxx
spec:
  capacity:
    storage: 10Gi
  nfs:
    path: "/exports/xxx"
    server: 10.2.1.7  # <-- does work

但这感觉不对 - 一旦我需要重新创建 NFS 服务,我就会得到一个新 IP,我必须根据它重新配置所有 PV。

你走在正确的轨道上。为确保您的服务使用静态 IP,只需在服务的 spec: 部分下添加 clusterIP: 1.2.3.3

来自规范 example:

In the future, we'll be able to tie these together using the service names, but for now, you have to hardcode the IP.