如标题所述,是否可以从API中找出K8s集群的名称?我查看了API但没有找到。
在API中无法找到K8s集群名称。如标题所述,是否可以从API中找出K8s集群的名称?我查看了API但没有找到。
在API中无法找到K8s集群名称。kubectl config current-context
可以解决问题(它会输出一些其他内容,例如项目名称、区域等,但应该可以给出您需要的答案)。
很遗憾,集群不知道自己的名字,或者任何其他唯一标识它的东西 (K8s issue #44954)。我想了解有关helm问题#2055的情况。
更新: 一个常见的解决方法是创建一个包含集群名称的ConfigMap,并在需要时读取它 (#2055 comment 1244537799)。
apiVersion: v1
kind: ConfigMap
metadata:
name: cluster-info
namespace: kube-system
data:
cluster-name: foo
通过 K8s API 没有获取名称的方法。如果您在 .kube/config 文件中拥有足够的名称(如果您从云提供商那里下载,则名称应该匹配),这是一个一行代码的解决方案:
kubectl config view --minify -o jsonpath='{.clusters[].name}'
注意1: 关键在于使用--minify
参数,这样它只会输出当前上下文的名称。这里有其他类似的答案,但如果没有使用“minify”参数,您将列出配置中的其他上下文,这可能会让你困惑。
注意2: 在您的.kube/config文件中的名称可能与您的云服务提供商中的名称不一致,如果该文件是由云服务提供商自动生成的,则名称应该匹配;如果您手动配置了它,那么您可以随意为本地配置键入任何名称。
注意3: 不要依赖于kubectl config current-context
命令,因为它只返回上下文的名称,而不是集群的名称。
我不相信k8s集群会有一个名称。 这个命令可以提供一些好的信息
kubectl cluster-info
kubectl cluster-info
没有返回名称而给你点了踩。这里,取而代之,请收下赏金。请参见 https://dev59.com/WloT5IYBdhLWcg3wtRYR#43667827 获取 Kubernetes 票证。 - tbackcurl http://metadata/computeMetadata/v1/instance/attributes/cluster-name -H "Metadata-Flavor: Google"
如果你能指明你的使用情况,我或许可以扩展我的回答来涵盖它。
k8s.io/client-go
进行此调用?尝试使用 RESTClient()
失败了。 - supercalifragilistichespiralicurl http://metadata/computeMetadata/v1/instance/attributes/ -H "Metadata-Flavor: Google"
来列出其他可用的命令。 - T-coderKubernetes 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
kubectl run curl --rm --restart=Never -it --image=appropriate/curl -- -H "Metadata-Flavor: Google" http://metadata.google.internal/computeMetadata/v1/instance/attributes/
- durprun
后面加上 --quiet
。整个命令将变成 kubectl run --quiet curl --rm --restart=Never -it --image=appropriate/curl -- -H "Metadata-Flavor: Google" http://metadata.google.internal/computeMetadata/v1/instance/attributes/cluster-name > cluster_name
。 @AlexFlint - Akihiro HARAI和获取当前配置一样,但以下命令可以清晰地输出:
kubectl config view
kubectl config view -o json
。然后,我能够通过使用当前上下文并将其映射到上下文来获取当前集群名称,从而确定我的“current-cluster”。谢谢! - Rob McCabe该命令将检查所有可能的集群,正如您所知,.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
kubectl config current-context | cut -d '@' -f2
kubeadm
安装的集群,存储在kubeadm-config
配置映射中的配置包含安装集群时使用的集群名称。
$ 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
"cluster name"即为集群名称。
以上为最初的回答。
apiVersion: v1
kind: ConfigMap
metadata:
name: coredns
namespace: kube-system
data:
Corefile: |
.:53 {
kubernetes NAME_OF_CLUSTER.local in-addr.arpa ip6.arpa {
gcloud container clusters get-credentials
将上下文设置回来。 - usamecconfig current-context
并没有进行任何k8s API调用,它只是读取本地存储的kubectl
配置文件(严格来说,它甚至不是Kubernetes的一部分,只是其API的客户端)。 - edio