如何从K8s API获取Kubernetes集群名称

Ale*_*lex 35 kubernetes google-kubernetes-engine

如标题中所述,是否可以从API中找到K8s群集名称?我环顾了API并找不到它.

usa*_*mec 17

kubectl config current-context 可以解决这个问题(它会输出更多的东西,例如项目名称,区域等,但是应该会给您所需的答案)。

  • 我想知道为什么这个答案有这么多赞成票。`config current-context` 不执行任何 k8s API 调用,它只是读取本地存储的 `kubectl` 配置(严格来说,它甚至不是 kubernetes 的一部分,只是其 api 的客户端)。 (5认同)
  • 上下文名称可以手动重命名,因此不可靠。 (4认同)
  • @usamec,问题是关于 kubernetes **API** 的。执行 kubectl(甚至可能不会安装在正在运行的应用程序的 POD 中)与 kubernetes API 相差甚远。按照这个逻辑,我还可以建议主题启动者打开浏览器,导航到 Google 控制台并在 GKE UI 中检查集群名称。 (2认同)

sap*_*ish 9

如果您在 .kube/config 文件中的名称对您来说已经足够了,这个单行代码可以解决问题:

kubectl config view --minify -o jsonpath='{.clusters[].name}'
Run Code Online (Sandbox Code Playgroud)

注意 1:这里--minify是关键,因此它只会输出您当前上下文的名称。这里还有其他类似的答案,但如果没有“缩小”,您将在配置中列出其他可能让您感到困惑的上下文。

注意 2:您的 .kube/config 中的名称可能不会反映您的云提供商中的名称,如果该文件是由云提供商自动生成的,则名称应该匹配,如果您手动配置它,您可以只为本地配置键入任何名称.

注意 3:不要依赖kubectl config current-context这个只返回上下文的名称,而不是集群的名称。


cor*_*ien 8

kubernetes API对GKE群集名称了解不多,但是您可以像这样从Google metatdata服务器轻松获得群集名称。

kubectl run curl --rm --restart=Never -it --image=appropriate/curl -- -H "Metadata-Flavor: Google" http://metadata.google.internal/computeMetadata/v1/instance/attributes/cluster-name
Run Code Online (Sandbox Code Playgroud)

  • 在“run”后面添加“--quiet”。整个命令将是 `kubectl run --quiet curl --rm --restart=Never -it --image=property/curl -- -H "Metadata-Flavor: Google" http://metadata.google.internal/ computeMetadata/v1/instance/attributes/cluster-name > cluster_name`。@亚历克斯弗林特 (3认同)

Kam*_*ran 8

问题并没有得到很好的描述.但是,如果此问题与之相关,Google Container Engine则coreypobrien提到群集的名称存储在节点的自定义元数据中.从节点内部运行以下命令,输出将是集群的名称:

curl http://metadata/computeMetadata/v1/instance/attributes/cluster-name -H "Metadata-Flavor: Google"
Run Code Online (Sandbox Code Playgroud)

如果您指定用例,我可能会扩展我的答案以涵盖它.

  • 这很棒。谢谢 ! (2认同)
  • 有什么方法可以在 Amazon EKS 集群内执行此操作吗? (2认同)

小智 7

我不相信有一个k8s群集名称.这个命令可以提供一些很好的信息

kubectl cluster-info

  • 抱歉,我对“kubectl cluster-info”不返回名称投了反对票。在这里,拿赏金代替。有关 kubernetes 票证,请参阅 http://stackoverflow.com/a/43667827/246241。 (2认同)

tba*_*ack 7

不幸的是,群集不知道它自己的名称,或任何其他可以唯一标识它的名称(K8s发行号#44954)。我想知道有关头盔问题#2055的信息

  • 这个答案应该位于顶部。这里的大多数答案都是从 kube-config 文件中获取信息,这是误导性的。 (4认同)

小智 6

它与获取当前配置相同,但下面的命令给出了清晰的输出:

kubectl config view

  • 这对我很有用!我运行了“kubectl config view -o json”。然后,我可以通过使用当前上下文并将其映射到上下文来获取当前集群名称来确定我的“当前集群”。谢谢! (2认同)

UDI*_*SHI 5

This command will Check all possible clusters, as you know .KUBECONFIG may have multiple contexts

kubectl config view -o jsonpath='{"Cluster name\tServer\n"}{range .clusters[*]}{.name}{"\t"}{.cluster.server}{"\n"}{end}'
Run Code Online (Sandbox Code Playgroud)

And you will get output like

Cluster name    Server
kubernetes      https://localhost:6443
Run Code Online (Sandbox Code Playgroud)