# Downward API

> Є два способи використання полів обʼєкта Pod та контейнера у працюючому контейнері: як змінні середовища та як файли, які заповнюються спеціальним типом тома. Разом ці два способи використання полів обʼєкта Pod та контейнера називають Downward API.

---

LLMS index: [llms.txt](/llms.txt)

---

<!-- overview -->

Іноді корисно, щоб контейнер мав інформацію про себе, не перебуваючи занадто повʼязаним із Kubernetes. _downward API_ дозволяє контейнерам використовувати інформацію про себе чи кластер, не використовуючи клієнт Kubernetes або API-сервер.

Наприклад, поточний застосунок, який передбачає, що відома змінна середовища містить унікальний ідентифікатор. Однією з можливостей є обгортання застосунку, але це нудно та помилкове, і воно суперечить меті вільного звʼязку. Кращий варіант — використовувати імʼя Podʼа як ідентифікатор та впровадити імʼя Podʼа у відому змінну середовища.

В Kubernetes існують два способи використання полів обʼєкта Pod та контейнера:

* як [змінні середовища](/docs/tasks/inject-data-application/environment-variable-expose-pod-information/)
* як [файли в томі `downwardAPI`](/docs/tasks/inject-data-application/downward-api-volume-expose-pod-information/)

Разом ці два способи використання полів обʼєкта Pod та контейнера називають _downward API_.

<!-- body -->

## Доступні поля {#available-fields}

Через _downward API_ доступні не всі поля обʼєкта Kubernetes API. У цьому розділі перераховано доступні поля.

Ви можете передавати інформацію з доступних полів рівня Pod, використовуючи `fieldRef`. На рівні API `spec` для Pod завжди визначає принаймні один [Контейнер](/docs/reference/kubernetes-api/workload-resources/pod-v1/#Container). Ви можете передавати інформацію з доступних полів рівня Container, використовуючи
`resourceFieldRef`.

### Інформація, доступна за допомогою `fieldRef` {#downwardapi-fieldRef}

Для деяких полів рівня Pod ви можете передати їх контейнеру як змінні середовища або використовуючи том `downwardAPI`. Поля, доступні через обидва механізми, наступні:

`metadata.name`
: імʼя Pod

`metadata.namespace`
: <a class='glossary-tooltip' title='Абстракція, що використовується в Kubernetes для ізоляції груп ресурсів в межах одного кластера.' data-bs-toggle='tooltip' data-bs-placement='top' href='/uk/docs/concepts/overview/working-with-objects/namespaces' target='_blank' aria-label='namespace'>namespace</a> Pod

`metadata.uid`
: унікальний ідентифікатор Pod

`metadata.annotations['<KEY>']`
: значення <a class='glossary-tooltip' title='Ключ-значення, які використовуються для додавання довільних невизначених метаданих до обʼєктів.' data-bs-toggle='tooltip' data-bs-placement='top' href='/uk/docs/concepts/overview/working-with-objects/annotations' target='_blank' aria-label='анотації'>анотації</a> Pod з іменем `<KEY>` (наприклад, `metadata.annotations['myannotation']`)

`metadata.labels['<KEY>']`
: текстове значення <a class='glossary-tooltip' title='Позначає обʼєкти атрибутами ідентифікації, які мають значення і є важливими для користувачів.' data-bs-toggle='tooltip' data-bs-placement='top' href='/uk/docs/concepts/overview/working-with-objects/labels' target='_blank' aria-label='мітки'>мітки</a> Pod з іменем `<KEY>` (наприклад, `metadata.labels['mylabel']`)

Наступна інформація доступна через змінні середовища, **але не як поле `fieldRef` у томі `downwardAPI`**:

`spec.serviceAccountName`
: імʼя <a class='glossary-tooltip' title='Забезпечує ідентифікацію для процесів, які працюють в Podʼі.' data-bs-toggle='tooltip' data-bs-placement='top' href='/uk/docs/tasks/configure-pod-container/configure-service-account/' target='_blank' aria-label='service account'>service account</a> Pod

`spec.nodeName`
: імʼя <a class='glossary-tooltip' title='Вузол — це робоча машина в Kubernetes.' data-bs-toggle='tooltip' data-bs-placement='top' href='/uk/docs/concepts/architecture/nodes/' target='_blank' aria-label='вузла'>вузла</a>, на якому виконується Pod

`status.hostIP`
: основна IP-адреса вузла, до якого призначено Pod

`status.hostIPs`
: IP-адреси — це версія подвійного стека `status.hostIP`, перша завжди така сама, як і `status.hostIP`.

`status.podIP`
: основна IP-адреса Pod (зазвичай, його IPv4-адреса)

`status.podIPs`
: IP-адреси — це версія подвійного стека `status.podIP`, перша завжди така сама, як і `status.podIP`

Наступна інформація доступна через том `downwardAPI` `fieldRef`, **але не як змінні середовища**:

`metadata.labels`
: всі мітки Pod, у форматі `label-key="escaped-label-value"` з однією міткою на рядок

`metadata.annotations`
: всі анотації Podʼа, у форматі `annotation-key="escaped-annotation-value"` з однією анотацією на рядок

### Інформація, доступна за допомогою `resourceFieldRef` {#downwardapi-resourceFieldRef}

Ці поля рівня контейнера дозволяють надавати інформацію про [вимоги та обмеження](/docs/concepts/configuration/manage-resources-containers/#requests-and-limits) для ресурсів, таких як CPU та памʼять.


<div class="alert alert-info" role="note"><h4 class="alert-heading">Примітка:</h4><div class="feature-state-notice feature-stable" title="Функціональна можливість: InPlacePodVerticalScaling">
              <span class="feature-state-name">СТАН ФУНКЦІОНАЛУ:</span> 
              <code>Kubernetes v1.35 [stable]</code>(стандартно увімкнено)</div>
<p>Ресурси CPU та памʼяті контейнера можуть бути змінені під час роботи контейнера. Якщо це станеться, буде оновлено том downward API, але змінні оточення не буде оновлено, доки контейнер не буде перезапущено. Докладніші відомості наведено у статті <a href="/uk/docs/tasks/configure-pod-container/resize-container-resources/">Зміна розміру ресурсів процесора і памʼяті, призначених контейнерам</a>.</p></div>


`resource: limits.cpu`
: Обмеження CPU контейнера

`resource: requests.cpu`
: Вимога CPU контейнера

`resource: limits.memory`
: Обмеження памʼяті контейнера

`resource: requests.memory`
: Вимога памʼяті контейнера

`resource: limits.hugepages-*`
: Обмеження hugepages контейнера

`resource: requests.hugepages-*`
: Вимога hugepages контейнера

`resource: limits.ephemeral-storage`
: Обмеження ефемерних сховищ контейнера

`resource: requests.ephemeral-storage`
: Вимога ефемерних сховищ контейнера

#### Резервні інформаційні обмеження для ресурсів {#fallback-information-for-resource-limits}

Якщо ліміти CPU та памʼяті не вказані для контейнера, і ви використовуєте _downward API_ для спроби надання цієї інформації, тоді kubelet типово використовує значення для CPU та памʼяті на основі розрахунку [виділених ресурсів вузла](/docs/tasks/administer-cluster/reserve-compute-resources/#node-allocatable).

## Що далі

Ви можете прочитати про [томи `downwardAPI`](/docs/concepts/storage/volumes/#downwardapi).

Ви можете спробувати використовувати _downward API_ для поширення інформації на рівні контейнера чи Pod:

* як [змінні середовища](/docs/tasks/inject-data-application/environment-variable-expose-pod-information/)
* як [файли в томі `downwardAPI`](/docs/tasks/inject-data-application/downward-api-volume-expose-pod-information/)
