Как указано в заголовке, можно ли узнать имя кластера K8s из API? Я просмотрел API и не нашел.
Как получить имя кластера Kubernetes из K8s API
Ответы (13)
К сожалению, кластер не знает своего имени или чего-либо еще, что могло бы однозначно идентифицировать его (проблема K8s # 44954). Я хотел узнать о проблеме с рулем № 2055.
kubectl config current-context
делает свое дело (выводит немного больше, например название проекта, регион и т. Д., Но он должен дать вам нужный ответ).
gcloud container clusters get-credentials
возвращает контекст обратно.
- person usamec; 16.06.2019
config current-context
не выполняет никаких вызовов API k8s, он просто читает локально сохраненную kubectl
конфигурацию (которая даже, строго говоря, не является частью kubernetes, а просто клиентом для его apis).
- person edio; 12.10.2019
Я не верю, что существует название кластера k8s. Эта команда может предоставить полезную информацию
информация о кластере kubectl
kubectl cluster-info
не возвращал имя. Вот, возьми вместо этого награду. См. stackoverflow.com/a/43667827/246241 для билета kubernetes.
- person tback; 03.05.2017
Вопрос не очень хорошо описан. Однако, если этот вопрос относится к Google Container Engine
, то, как упомянул Корипобрайен, имя кластера хранится в настраиваемых метаданных узлов. Изнутри узла выполните следующую команду, и на выходе будет имя кластера:
curl http://metadata/computeMetadata/v1/instance/attributes/cluster-name -H "Metadata-Flavor: Google"
Если вы укажете свой вариант использования, я, возможно, смогу расширить свой ответ, чтобы охватить его.
k8s.io/client-go
? Пытался использовать RESTClient()
безуспешно
- person supercalifragilistichespirali; 27.02.2020
API Kubernetes мало что знает об имени кластера 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/
- person durp; 02.10.2018
--quiet
после run
. Вся команда будет 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
- person Akihiro HARAI; 12.06.2019
Если вам достаточно имени в вашем .kube / config файле, этот однострочный файл сделает свое дело:
kubectl config view --minify -o jsonpath='{.clusters[].name}'
Примечание 1: --minify
является здесь ключевым, поэтому он выводит только имя вашего текущего контекста. Здесь есть и другие похожие ответы, но без minify вы будете перечислять другие контексты в своей конфигурации, которые могут вас запутать.
Примечание 2: имя в вашем .kube / config может не отражать имя в вашем облачном провайдере, если файл был автоматически сгенерирован облачным провайдером, имя должно совпадать, если вы настроили его вручную, вы могли бы набрал любое имя только для локального конфига.
Примечание 3: не полагайтесь на kubectl config current-context
, он возвращает только имя контекста, а не имя кластера.
Это то же самое, что и получение текущей конфигурации, но следующая команда дает четкий вывод:
kubectl config view
kubectl config view -o json
. Затем я смог определить свой текущий кластер, используя текущий контекст и сопоставив его с контекстами, чтобы получить текущее имя кластера. Спасибо!
- person Rob McCabe; 21.07.2019
Эта команда проверит все возможные кластеры, как вы знаете. 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
Для кластеров, которые были установлены с использованием 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 {
Ну, это возвращает ровно одну вещь, имя кластера
K8s:
kubectl config view -o jsonpath='{.clusters[].name}{"\n"}'
Openshift: oc config view -o jsonpath='{.clusters[].name}{"\n"}'
$ kubectl config get-clusters -> получить список существующих кластеров
Использование клиента 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