![](/img/trans.png)
[英]Spring boot cannot connect to postgre database deployed on another kubernetes pod
[英]Control the hostname of the POD deployed via Kubernetes
我正在嘗試使用掌舵圖表來部署我的應用程序。 我已經在deployment.yaml下將statefulSet定義為一種,並在spec.serviceName下提供了無頭服務。 下面給出了deployment.yaml的代碼片段。
部署后,當我啟動“ kubectl get pods”時,其基於副本顯示POD名稱為“ MyApp-100-deployment-n”,其中n> = 0。
如果我使用kubectl exec進入吊艙,並啟動“ 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”。 添加無頭服務只是引入了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 "." "" }}"
您可以使用每個容器中存在的env變量HOSTNAME
,並且僅提供主機名。
另外,嘗試在任何Pod上執行env以查看所有可用變量
kubectl exec <pod-name> env
為什么使用的說明InetAddress.getLocalHost().getHostName()
不是檢索主機的正確的方法是在這里
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.