情况是:
我正在尝试在Kubernetes上部署HDFS。我正在使用DaemonSet在一个节点上启动一个datanode,并且该pod的网络模式为hostNetWork
。在HDFS中,数据节点和名称节点按主机名进行通信。但是现在,如果我向k8s集群添加一个新节点,现有节点无法通过新节点的主机名获取新节点的内部IP。
即我希望通过主机名获取节点的内部IP。 kube-dns现在能做到吗?或者使用其他方法在k8s上扩展HDFS集群的节点。
非常感谢!
答案 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怎么样?每个pod都有一个特定的名称,并根据名称,能够分配一个特定的角色,例如名称节点。
快速搜索并使用K8S / StaefulSet在HDFS上找到几篇文章。