Іноді корисно, щоб контейнер мав інформацію про себе, не перебуваючи занадто повʼязаним із Kubernetes. downward API дозволяє контейнерам використовувати інформацію про себе чи кластер, не використовуючи клієнт Kubernetes або API-сервер.
Наприклад, поточний застосунок, який передбачає, що відома змінна середовища містить унікальний ідентифікатор. Однією з можливостей є обгортання застосунку, але це нудно та помилкове, і воно суперечить меті вільного звʼязку. Кращий варіант — використовувати імʼя Podʼа як ідентифікатор та впровадити імʼя Podʼа у відому змінну середовища.
В Kubernetes існують два способи використання полів обʼєкта Pod та контейнера:
Разом ці два способи використання полів обʼєкта Pod та контейнера називають downward API.
Через downward API доступні не всі поля обʼєкта Kubernetes API. У цьому розділі перераховано доступні поля.
Ви можете передавати інформацію з доступних полів рівня Pod, використовуючи fieldRef. На рівні API spec для Pod завжди визначає принаймні один Контейнер. Ви можете передавати інформацію з доступних полів рівня Container, використовуючи
resourceFieldRef.
fieldRefДля деяких полів рівня Pod ви можете передати їх контейнеру як змінні середовища або використовуючи том downwardAPI. Поля, доступні через обидва механізми, наступні:
metadata.namemetadata.namespacemetadata.uidmetadata.annotations['<KEY>']<KEY> (наприклад, metadata.annotations['myannotation'])metadata.labels['<KEY>']<KEY> (наприклад, metadata.labels['mylabel'])Наступна інформація доступна через змінні середовища, але не як поле fieldRef тому downwardAPI:
spec.serviceAccountNamespec.nodeNamestatus.hostIPstatus.hostIPsstatus.hostIP, перша завжди така сама, як і status.hostIP.status.podIPstatus.podIPsstatus.podIP, перша завжди така сама, як і status.podIPНаступна інформація доступна через том downwardAPI fieldRef, але не як змінні середовища:
metadata.labelslabel-key="escaped-label-value" з однією міткою на рядокmetadata.annotationsannotation-key="escaped-annotation-value" з однією анотацією на рядокresourceFieldRefЦі поля рівня контейнера дозволяють надавати інформацію про вимоги та обмеження для ресурсів, таких як CPU та памʼять.
Kubernetes v1.35 [stable](стандартно увімкнено)Ресурси CPU та памʼяті контейнера можуть бути змінені під час роботи контейнера. Якщо це станеться, буде оновлено том downward API, що зменшився, але змінні оточення не буде оновлено, доки контейнер не буде перезапущено. Докладніші відомості наведено у статті Зміна розміру ресурсів процесора і памʼяті, призначених контейнерам.
resource: limits.cpuresource: requests.cpuresource: limits.memoryresource: requests.memoryresource: limits.hugepages-*resource: requests.hugepages-*resource: limits.ephemeral-storageresource: requests.ephemeral-storageЯкщо ліміти CPU та памʼяті не вказані для контейнера, і ви використовуєте downward API для спроби викриття цієї інформації, тоді kubelet типово використовує значення для CPU та памʼяті на основі розрахунку розподілених вузлів.
Ви можете прочитати про томи downwardAPI.
Ви можете спробувати використовувати downward API для поширення інформації на рівні контейнера чи Pod: