Как предоставить значения кластера проекта контейнеру в GKE (или текущем контексте в k8s)

#kubernetes #google-kubernetes-engine

#kubernetes #google-kubernetes-engine

Вопрос:

Мой контейнерный код должен знать, в какой среде он работает на GKE, точнее, в каком кластере и проекте. В стандартном kubernetes это может быть получено из значения текущего контекста ( gke_<project>_<cluster> ).

У Kubernetes есть нисходящий API, который может передавать информацию о pod в контейнеры — см. https://kubernetes.io/docs/tasks/inject-data-application/downward-api-volume-expose-pod-information / — но, к сожалению, ничего от «высших» сущностей.

Есть мысли о том, как этого можно достичь?

Очевидно, я не хочу явно передавать какую-либо информацию при развертывании (например, как env в configMap ). Я предпочитаю развертывать с использованием общего / общего yaml и заставлять код во время выполнения извлекать информацию из env или файла и соответственно ветвиться.

Ответ №1:

Вы можете запросить сервер метаданных GKE из своего кода. В вашем случае вам нужно запросить /computeMetadata/v1/instance/attributes/cluster-name /computeMetadata/v1/project/project-id конечные точки и, чтобы получить кластер и проект. Все клиентские библиотеки для каждого поддерживаемого языка также имеют простые оболочки для доступа к API метаданных.

Комментарии:

1. Спасибо! Используется в bash export PROJECT_ID=$(curl http://metadata.google.internal/computeMetadata/v1/project/project-id -H "Metadata-Flavor: Google")