如何通过主机名

时间:2018-04-01 08:11:03

标签: kubernetes

情况是:

我正在尝试在Kubernetes上部署HDFS。我正在使用DaemonSet在一个节点上启动一个datanode,并且该pod的网络模式为hostNetWork。在HDFS中,数据节点和名称节点按主机名进行通信。但是现在,如果我向k8s集群添加一个新节点,现有节点无法通过新节点的主机名获取新节点的内部IP。

我希望通过主机名获取节点的内部IP。 kube-dns现在能做到吗?或者使用其他方法在k8s上扩展HDFS集群的节点。

非常感谢!

1 个答案:

答案 0 :(得分:1)

参考

Expose Pod Information to Containers Through Environment Variables

您可以获取节点名称,部署pod的节点IP如下所示。

spec:
  containers:
    - name: hdfs-pod
      env:
        - name: MY_NODE_NAME
          valueFrom:
            fieldRef:
              fieldPath: spec.nodeName
        - name: MY_POD_IP
          valueFrom:
            fieldRef:
              fieldPath: status.podIP
        - name: MY_POD_NAME
          valueFrom:
            fieldRef:
              fieldPath: metadata.name
        - name: MY_POD_NAMESPACE
          valueFrom:
            fieldRef:
              fieldPath: metadata.namespace
        - name: MY_POD_SERVICE_ACCOUNT
          valueFrom:
            fieldRef:
              fieldPath: spec.serviceAccountName

DNS for Services and Pods一样,您可以使用pod IP或名称以及命名空间来查询K8S内部DNS。

  

启用后,会以“pod-ip-address.my-namespace.pod.cluster.local”的形式为pod分配DNS A记录

Statefulset

考虑使用StatefulSet怎么样?每个pod都有一个特定的名称,并根据名称,能够分配一个特定的角色,例如名称节点。

快速搜索并使用K8S / StaefulSet在HDFS上找到几篇文章。