当前位置: 首页 > 知识库问答 >
问题:

控制通过库伯内特斯部署的POD的主机名

楮乐邦
2023-03-14

我正在尝试使用helm图表部署我的应用程序。我已经将statefulSet定义为一种正在部署的类型。yaml并根据规范serviceName提供无头服务。来自部署的代码片段。yaml如下所示。

部署后,当我启动“kubectl get pods”时,其显示的POD名称为“MyApp-100-deployment-n”,其中n

如果我使用kubectl exec进入Pod,并触发“主机名”命令,我会得到“MyApp-100-部署-n”作为主机名,当我触发“主机名--fqdn”时,我会得到如下内容:

MyApp-100-deployment-n.<name of Service>.<Namespace>.svc.cluster.local

这些结果很好,但是当我的应用程序用JAVA编写并且现在部署时,它尝试使用InetAddress获取主机名。getLocalHost()。getHostName(),它获取pod的整个fqdn,而不是pod的主机名。这是困扰我的事情。为什么Java InetAddress不能仅获取主机名?yaml文件中的配置是否有任何方法不允许headless服务修改主机名?最后,我只需要主机名而不需要Java代码中的fqdn来进行处理。

如果我从部署中删除headless服务名称。yaml和部署应用程序,并从容器内部发出hostname和hostname--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 "." "" }}"

共有1个答案

宫晟
2023-03-14

您可以使用每个容器上的env变量HOSTNAME,该变量只提供主机名。

另外,尝试在任何pod上执行env以查看所有可用的变量

kubectl exec <pod-name> env

解释为什么使用InetAddress。getLocalHost()。getHostName()不是在此处检索主机名的正确方法

 类似资料:
  • 我已经研究Kubernetes几个星期了,并使用kube lego NGINX示例(https://github.com/jetstack/kube-lego)已使用DigitalOcean上的Rancher成功地将服务部署到Kubernetes群集。 我已经部署了示例静态站点、Wordpress、Laravel、Craft CMS等。所有这些都使用自定义命名空间、部署、秘密、具有外部注册表的容器

  • 我正在研究如何在Nginx入口之间实现https安全连接- 以下是我的场景: 来自internet的客户端- 所以我的问题是,如何保护入口控制器和pod之间的通信,以便对通信进行端到端加密?我是否需要自己的证书颁发机构才能做到这一点?如果有,是否有任何开源解决方案可以像Cert manager一样处理证书管理?

  • 我假设没有愚蠢的问题,所以这里有一个我找不到直接答案的问题。 现在的情况 我目前有一个运行1.15的Kubernetes集群。AKS上的x,通过Terraform部署和管理。AKS最近宣布Azure将在AKS上停用Kubernetes的1.15版本,我需要将集群升级到1.16或更高版本。现在,据我所知,直接在Azure中升级集群不会对集群的内容产生任何影响,即节点、豆荚、秘密和当前在那里的所有其他

  • 我正在尝试在Kubernetes集群(Azure AKS)中部署Flink作业。作业群集在启动后立即中止,但任务管理器运行正常。 docker镜像创建成功,没有任何异常。我可以运行docker镜像,也可以SSHdocker镜像。 我已经按照以下链接中提到的步骤: https://github.com/apache/flink/tree/release-1.9/flink-container/kub

  • 我有以下代码: 我创建了一个包含上述Python代码的映像的部署。 当我使用my Python代码不会创建sig文件指示,也不会打印“完成”消息。 点击此链接:https://cloud.google.com/blog/products/containers-kubernetes/kubernetes-best-practices-terminating-with-grace我看到k8s发送SIG

  • 我确实部署了单吊舱,自定义docker映像如下: 在开发过程中,我希望推送新的最新版本并更新部署。如果不明确定义标记/版本并为每个构建增加它,就找不到如何做到这一点,并且