【发布时间】:2019-11-27 04:24:31
【问题描述】:
我正在尝试使用 helm 图表部署我的应用程序。我已经将 statefulSet 定义为 deployment.yaml 下的一种,并在 spec.serviceName 下提供了无头服务。下面给出了 deployment.yaml 中的代码 sn-p。
部署后,当我触发“kubectl get pods”时,它显示 POD 名称为 “MyApp-100-deployment-n”,其中 n >=0,基于副本。
如果我使用 kubectl exec 进入 pod,并启动 "hostname" 命令,我会得到 "MyApp-100-deployment-n" 作为主机名,当我启动 "hostname --fqdn" 时,我会得到如下信息:
MyApp-100-deployment-n.<name of Service>.<Namespace>.svc.cluster.local
这些结果很好,但是当我用 JAVA 编写并现在部署的应用程序尝试使用 InetAddress.getLocalHost().getHostName() 获取主机名时,它会获取 pod 的整个 fqdn,而不是 pod 的主机名。这是困扰我的事情。为什么 Java InetAddress 无法仅获取主机名?
是否有任何与 yaml 文件中的配置相关的方法不允许无头服务修改主机名?最终,我只需要 Java 代码中的主机名而不是 fqdn 来进行处理。
如果我从 deployment.yaml 中删除无头服务名称并部署应用程序并从容器内部触发主机名和主机名 --fqdn 命令,我只会得到“MyApp-100-deployment-n”作为两者的结果.添加headless服务只是引入fqdn。
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: "{{ .Chart.Name }}-{{ .Chart.AppVersion | replace "." "" }}-deployment"
labels:
app: Myapp-deployment
{{ include "metadata.labels.standard" . | indent 4 }}
spec:
replicas: {{ .Values.replicaCount }}
selector:
matchLabels:
app: "{{ .Chart.Name }}-{{ .Chart.AppVersion | replace "." "" }}"
serviceName: "{{ .Chart.Name }}-{{ .Chart.AppVersion | replace "." "" }}"
【问题讨论】:
标签: java docker kubernetes kubernetes-helm kubernetes-pod