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

时间:2016-07-07 09:33:56

标签: kubernetes google-kubernetes-engine

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

13 个答案:

答案 0 :(得分:10)

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

答案 1 :(得分:8)

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

  

kubectl cluster-info

答案 2 :(得分:8)

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

curl http://metadata/computeMetadata/v1/instance/attributes/cluster-name -H "Metadata-Flavor: Google"

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

答案 3 :(得分:3)

kubernetes API对GKE群集名称了解不多,但您可以轻松地从Google metatdata服务器获取群集名称

listObject?.Delete();
listObject = sheet.ListObjects.Add(Source: ((Worksheet)sheet).Range["D3"]);

答案 4 :(得分:2)

不幸的是,群集不知道它自己的名称,或其他任何唯一标识它的名称(K8s issue #44954)。我想知道helm issue #2055

答案 5 :(得分:2)

$ kubectl config get-clusters - >为您提供现有集群列表

答案 6 :(得分:2)

如果您在.kube / config文件中拥有的名称足以满足您的需要,那么此单线代码可以解决问题:

kubectl config view --minify -o jsonpath='{.clusters[].name}'

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

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

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

答案 7 :(得分:1)

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

kubectl config view

答案 8 :(得分:0)

对于使用kubeadm安装的集群,存储在kubeadm-config configmap中的配置具有安装集群时使用的集群名称。

$ kubectl -n kube-system get configmap kubeadm-config -o yaml

apiVersion: v1
kind: ConfigMap
metadata:
  name: kubeadm-config
  namespace: kube-system
data:
  ClusterConfiguration: |
    clusterName: NAME_OF_CLUSTER

对于将CoreDNS用于其DNS的群集,来自kubeadm的“群集名称”也用作域后缀。

$ kubectl -n kube-system get configmap coredns -o yaml

apiVersion: v1
kind: ConfigMap
metadata:
  name: coredns
  namespace: kube-system
data:
  Corefile: |
    .:53 {
        kubernetes NAME_OF_CLUSTER.local in-addr.arpa ip6.arpa {

答案 9 :(得分:0)

如您所知,此命令将检查所有可能的群集。KUBECONFIG可能具有多个上下文

kubectl config view -o jsonpath='{"Cluster name\tServer\n"}{range .clusters[*]}{.name}{"\t"}{.cluster.server}{"\n"}{end}'

您将得到类似的输出

Cluster name    Server
kubernetes      https://localhost:6443

答案 10 :(得分:0)

这恰好返回一件事,集群名称

kubectl配置视图-o jsonpath ='{。clusters []。name} {“ \ n”}' oc config view -o jsonpath ='{。clusters []。name} {“ \ n”}'

答案 11 :(得分:0)

使用 python k8s 客户端。但这不适用于 incluster_kubeconfig。

from kubernetes import config

cluster_context = config.kube_config.list_kube_config_contexts()
print (cluster_context)
([{'context': {'cluster': 'k01.test.use1.aws.platform.gov', 'user': 'k01-test'}, 'name': 'k01.test.use1.aws.platform.gov'}], {'context': {'cluster': 'k01.test.use1.aws.platform.gov', 'user': 'k01-test'}, 'name': 'k01.test.use1.aws.platform.gov'})

cluster_name = cluster_context[1]['context']['cluster']
print (cluster_name)
k01.test.use1.aws.platform.gov

答案 12 :(得分:0)

至少对于 kubespray 集群,以下对我有用

kubectl config current-context | cut -d '@' -f2