如何从 K8s 获取 Kubernetes 集群名称 API
How to get Kubernetes cluster name from K8s API
如题所述,是否可以从API中查出K8s集群名称?我环顾了API,没找到。
我不相信有 k8s 集群名称。这个命令可以提供一些不错的信息
kubectl cluster-info
kubernetes API 不太了解 GKE 集群名称,但您可以像这样从 Google 元数据服务器轻松获取集群名称
kubectl run curl --rm --restart=Never -it --image=appropriate/curl -- -H "Metadata-Flavor: Google" http://metadata.google.internal/computeMetadata/v1/instance/attributes/cluster-name
不幸的是,一个集群不知道它自己的名字,或者任何可以唯一标识它的东西(K8s issue #44954). I wanted to know for helm issue #2055。
问题描述得不是很清楚。但是,如果这个问题与 Google Container Engine
有关,那么正如 coreypobrien 提到的那样,集群的名称存储在节点的自定义元数据中。从节点内部,运行 以下命令和输出将是集群的名称:
curl http://metadata/computeMetadata/v1/instance/attributes/cluster-name -H "Metadata-Flavor: Google"
如果您指定您的用例,我也许可以扩展我的答案来涵盖它。
$ kubectl config get-clusters --> 获取现有集群的列表
kubectl config current-context
可以解决问题(它会输出更多内容,例如项目名称、地区等,但它应该会为您提供所需的答案)。
对于使用 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 的 "cluster name" 也被用作域后缀。
$ 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 {
这与获取当前配置相同,但下面的命令给出了清晰的输出:
kubectl config view
如您所知,此命令将检查所有可能的集群。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
好吧这个returns正好是一件事,一个集群名
K8s:
kubectl config view -o jsonpath='{.clusters[].name}{"\n"}'
开班:
oc config view -o jsonpath='{.clusters[].name}{"\n"}'
如果您在 .kube/config 文件中的名称对您来说足够了,这个单行代码就可以了:
kubectl config view --minify -o jsonpath='{.clusters[].name}'
注意 1: --minify
是这里的关键,因此它将仅输出当前上下文的名称。这里还有其他类似的答案,但如果没有“缩小”,您将在配置中列出其他可能会让您感到困惑的上下文。
注意 2: 您的 .kube/config 中的名称可能不会反映您的云提供商中的名称,如果文件是由云提供商自动生成的,则该名称应该匹配,如果您手动配置它,您可以为本地配置键入任何名称。
注3:不要依赖kubectl config current-context
这个returns只是上下文的名称,而不是集群的名称。
使用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
至少对于 kubespray 集群,以下对我有用
kubectl config current-context | cut -d '@' -f2
使用 kubectl 命令:
$ kubectl config get-clusters
NAME
kubernetes
kubectl config get-clusters
有这个
NAME
kubernetes
如题所述,是否可以从API中查出K8s集群名称?我环顾了API,没找到。
我不相信有 k8s 集群名称。这个命令可以提供一些不错的信息
kubectl cluster-info
kubernetes API 不太了解 GKE 集群名称,但您可以像这样从 Google 元数据服务器轻松获取集群名称
kubectl run curl --rm --restart=Never -it --image=appropriate/curl -- -H "Metadata-Flavor: Google" http://metadata.google.internal/computeMetadata/v1/instance/attributes/cluster-name
不幸的是,一个集群不知道它自己的名字,或者任何可以唯一标识它的东西(K8s issue #44954). I wanted to know for helm issue #2055。
问题描述得不是很清楚。但是,如果这个问题与 Google Container Engine
有关,那么正如 coreypobrien 提到的那样,集群的名称存储在节点的自定义元数据中。从节点内部,运行 以下命令和输出将是集群的名称:
curl http://metadata/computeMetadata/v1/instance/attributes/cluster-name -H "Metadata-Flavor: Google"
如果您指定您的用例,我也许可以扩展我的答案来涵盖它。
$ kubectl config get-clusters --> 获取现有集群的列表
kubectl config current-context
可以解决问题(它会输出更多内容,例如项目名称、地区等,但它应该会为您提供所需的答案)。
对于使用 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 的 "cluster name" 也被用作域后缀。
$ 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 {
这与获取当前配置相同,但下面的命令给出了清晰的输出:
kubectl config view
如您所知,此命令将检查所有可能的集群。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
好吧这个returns正好是一件事,一个集群名
K8s:
kubectl config view -o jsonpath='{.clusters[].name}{"\n"}'
开班:
oc config view -o jsonpath='{.clusters[].name}{"\n"}'
如果您在 .kube/config 文件中的名称对您来说足够了,这个单行代码就可以了:
kubectl config view --minify -o jsonpath='{.clusters[].name}'
注意 1: --minify
是这里的关键,因此它将仅输出当前上下文的名称。这里还有其他类似的答案,但如果没有“缩小”,您将在配置中列出其他可能会让您感到困惑的上下文。
注意 2: 您的 .kube/config 中的名称可能不会反映您的云提供商中的名称,如果文件是由云提供商自动生成的,则该名称应该匹配,如果您手动配置它,您可以为本地配置键入任何名称。
注3:不要依赖kubectl config current-context
这个returns只是上下文的名称,而不是集群的名称。
使用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
至少对于 kubespray 集群,以下对我有用
kubectl config current-context | cut -d '@' -f2
使用 kubectl 命令:
$ kubectl config get-clusters
NAME
kubernetes
kubectl config get-clusters
有这个
NAME
kubernetes