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

Posted

技术标签:

【中文标题】通过 DNS 或静态 ClusterIP 为 PersistentVolume 配置 NFS 服务器【英文标题】:Configure NFS server for PersistentVolume either via DNS or static ClusterIP 【发布时间】:2017-03-23 10:49:50 【问题描述】:

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

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

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

所以这是没有问题的(而且真的不起作用 - 我用各种不同的主机名/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 硬编码其 Endpoint-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,以便 NFS 服务始终使用相同的 IP?

【问题讨论】:

【参考方案1】:

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

来自规范的example:

将来,我们将能够使用服务名称将它们绑定在一起,但现在,您必须对 IP 进行硬编码。

【讨论】:

谢谢 - 我希望我做错了什么,并且有更好的解决方案可用。不喜欢硬编码 IP 的想法,如果我想在 prod 和 testing 之间轻松重用定义文件,例如

以上是关于通过 DNS 或静态 ClusterIP 为 PersistentVolume 配置 NFS 服务器的主要内容,如果未能解决你的问题,请参考以下文章

Kubernetes进阶之路(九)Service系列之ClusterIP&NodePort

Kubernetes addons 之 coredns部署

kube-dns部署

请问是PEG用公司的市盈率(PE)除以公司未来3或5年的每股收益复合增长率,其中的PE是静态PE还是动态的?

DNS 访问 Service - 每天5分钟玩转 Docker 容器技术(138)

容器服务 TKE 上服务暴露的几种方式