# Локальне тимчасове сховище

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

---

Вузли мають локальне тимчасове сховище, яке підтримується локально підключеними пристроями з можливістю запису або, інколи, оперативною памʼяттю. «Тимчасове» означає, що немає довгострокової гарантії щодо довговічності.

Podʼи використовують тимчасове локальне сховище для тимчасового простору, кешування та журналів. Kubelet може надавати тимчасовий простір для Podʼів, використовуючи локальне тимчасове сховище для монтування <a class='glossary-tooltip' title='Тека, що містить дані та доступна для контейнерів у Podʼі.' data-bs-toggle='tooltip' data-bs-placement='top' href='/uk/docs/concepts/storage/volumes/' target='_blank' aria-label='томів'>томів</a>  [`emptyDir`](/docs/concepts/storage/volumes/#emptydir) у контейнери.

Kubelet також використовує цей тип сховища для зберігання [журналів контейнерів на рівні вузлів](/docs/concepts/cluster-administration/logging/#logging-at-the-node-level), образів контейнерів та шарів з можливістю запису запущених контейнерів.

<div class="alert alert-caution" role="note"><h4 class="alert-heading">Увага:</h4>Якщо вузол виходить з ладу, дані в його тимчасовому сховищі можуть бути втрачені. Ваші застосунки не можуть очікувати жодних SLA щодо продуктивності (наприклад, дискових операцій введення-виведення за секунду) від локального тимчасового сховища.</div>



<div class="alert alert-info" role="note"><h4 class="alert-heading">Примітка:</h4><p>Щоб квота ресурсів працювала на ephemeral-storage, потрібно виконати дві дії:</p>
<ul>
<li>Адміністратор встановлює квоту ресурсів для ephemeral-storage в просторі імен.</li>
<li>Користувач повинен вказати обмеження для ресурсу ephemeral-storage у специфікації Podʼа.</li>
</ul>
<p>Якщо користувач не вказав обмеження ресурсу ephemeral-storage у специфікації Podʼа, квота ресурсів не застосовується до ephemeral-storage.</p>
</div>


Kubernetes дозволяє відстежувати, резервувати та обмежувати обсяг тимчасового локального сховища, яке може використовувати Pod.

## Конфігурації для локального тимчасового сховища {#configurations}

Kubernetes підтримує наступні способи налаштування локального тимчасового сховища на вузлі:

<ul class="nav nav-tabs" id="tabs-local-storage-configurations" role="tablist"><li class="nav-item"><a data-bs-toggle="tab" class="nav-link active" href="#tabs-local-storage-configurations-0" role="tab" aria-controls="tabs-local-storage-configurations-0" aria-selected="true">Одна файлова система</a></li>
	  
		<li class="nav-item"><a data-bs-toggle="tab" class="nav-link" href="#tabs-local-storage-configurations-1" role="tab" aria-controls="tabs-local-storage-configurations-1">Файлова система рушія контейнерів</a></li>
		<li class="nav-item"><a data-bs-toggle="tab" class="nav-link" href="#tabs-local-storage-configurations-2" role="tab" aria-controls="tabs-local-storage-configurations-2">Окрема файлова система для образів</a></li></ul>

<div class="tab-content" id="tabs-local-storage-configurations-content"><div class="tab-body tab-pane fadeshow active"
        id="tabs-local-storage-configurations-0" role="tabpanel" aria-labelledby="tabs-local-storage-configurations-0-tab" tabindex="local-storage-configurations"><p>У цій конфігурації ви розміщуєте всі різні типи тимчасових локальних даних (томи <code>emptyDir</code>, записувані шари, образи контейнерів, журнали) в одній файловій системі.</p>
<p>Kubelet також записує <a href="/uk/docs/concepts/cluster-administration/logging/#logging-at-the-node-level">журнали контейнерів на рівні вузла</a> і обробляє їх аналогічно тимчасовому локальному сховищу.</p>
<p>Kubelet записує журнали у файли всередині своєї налаштованої теки журналів (типово <code>/var/log</code>) і має базову теку для інших локально збережених даних (типово <code>/var/lib/kubelet</code>).</p>
<p>Зазвичай і <code>/var/lib/kubelet</code>, і <code>/var/log</code> знаходяться в кореневій файловій системі, і kubelet розроблений з урахуванням такої структури.</p>
<p>Ваш вузол може мати стільки інших файлових систем, які не використовуються для Kubernetes, скільки вам заманеться.</p>
</div><div class="tab-body tab-pane fade"
        id="tabs-local-storage-configurations-1" role="tabpanel" aria-labelledby="tabs-local-storage-configurations-1-tab" tabindex="local-storage-configurations"><p>Для тимчасових даних, що генеруються запущеними Podʼами, як-от журнали та томи <code>emptyDir</code>, на вузлі використовується одна файлова система. Цю файлову систему також можна використовувати для інших даних, наприклад для системних журналів, що не повʼязані з Kubernetes; вона навіть може виступати в ролі кореневої файлової системи.</p>
<p>Kubelet також записує <a href="/uk/docs/concepts/cluster-administration/logging/#logging-at-the-node-level">журнали контейнерів на рівні вузла</a> у першу файлову систему і обробляє їх аналогічно тимчасовому локальному сховищу.</p>
<p>Ви також використовуєте окрему файлову систему, що базується на іншому логічному пристрої зберігання даних. У цій конфігурації середовище виконання контейнерів зберігає як шари образу контейнера, так і шари, доступні для запису, у цій другій файловій системі. Налаштуйте це місце зберігання у середовищі виконання контейнерів, а не в kubelet.</p>
<p>Перша файлова система не містить жодних шарів образів або шарів, що підлягають запису.</p>
<p>Ваш вузол може мати стільки інших файлових систем, які не використовуються для Kubernetes, скільки вам заманеться.</p>
</div><div class="tab-body tab-pane fade"
        id="tabs-local-storage-configurations-2" role="tabpanel" aria-labelledby="tabs-local-storage-configurations-2-tab" tabindex="local-storage-configurations"><p>У цій конфігурації шари образів контейнерів знаходяться на окремій файловій системі, а шари, доступні для запису контейнера, знаходяться на тій же файловій системі, що й тимчасові дані kubelet, такі як журнали та томи <code>emptyDir</code>.</p>
<p>Ця конфігурація вимагає підтримки сигналів виселення <code>containerfs</code>. Для отримання додаткової інформації про функціональну можливість та середовища виконання контейнерів, які підтримують цю конфігурацію, дивіться розділ «Сигнали файлової системи» у статті <a href="/uk/docs/concepts/scheduling-eviction/node-pressure-eviction/#filesystem-signals">Виселення в наслідок тиску на вузол</a>.</p>
</div></div>


На сторінці [Виселення в наслідок тиску на вузол](/docs/concepts/scheduling-eviction/node-pressure-eviction/#filesystem-signals) ці файлові системи позначаються як `nodefs`, `imagefs` та `containerfs`. Ці назви не завжди відповідають окремим точкам монтування.

Kubelet може вимірювати використання локального сховища, якщо ви налаштовуєте вузол із використанням однієї з підтримуваних конфігурацій для локального тимчасового сховища.

Якщо у вас інша конфігурація, kubelet не застосовує обмеження ресурсів для тимчасового локального сховища.


<div class="alert alert-info" role="note"><h4 class="alert-heading">Примітка:</h4>Kubelet відстежує томи <code>tmpfs</code> emptyDir як використання памʼяті контейнера, а не як локальне тимчасове сховище.</div>



<div class="alert alert-info" role="note"><h4 class="alert-heading">Примітка:</h4>Kubelet може відстежувати тимчасове сховище лише на файлових системах, за якими він спостерігає через підтримувані схеми розміщення. Якщо ви монтуєте додаткові файлові системи за такими шляхами, як <code>/var/lib/kubelet</code>, <code>/var/log</code> або тека зберігання середовища виконання контейнерів поза цими схемами розміщення, kubelet може неправильно повідомляти про тимчасове сховище.</div>


## Встановлення запитів та обмежень для локального тимчасового сховища {#requests-limits}

Ви можете вказати `ephemeral-storage` для управління локальним тимчасовим сховищем. Кожен контейнер Podʼа може вказати одне або обидва з наступного:

* `spec.containers[].resources.limits.ephemeral-storage`
* `spec.containers[].resources.requests.ephemeral-storage`

Обмеження та запити для `ephemeral-storage` вимірюються в байтах. Ви можете виразити обсяг сховища як просте ціле число або як число з фіксованою комою, використовуючи один із таких суфіксів: E, P, T, G, M, k. Ви також можете використовувати еквіваленти степеня двійки: Ei, Pi, Ti, Gi, Mi, Ki. Наприклад, усі наведені нижче величини мають приблизно однакове значення:

- `128974848`
- `129e6`
- `129M`
- `123Mi`

Зверніть увагу на регістр суфіксів. Якщо ви запитуєте `400m` тимчасового сховища, це запит на 0,4 байта. Той, хто це ввів, мабуть, мав на увазі 400 мебібайтів (`400Mi`) або 400 мегабайтів (`400M`).

У наступному прикладі Pod має два контейнери. Кожен контейнер має запит на 2 ГБ локального тимчасового сховища. Кожен контейнер має обмеження в 4 ГБ локального тимчасового сховища. Отже, Pod має запит на 4 ГБ локального тимчасового сховища та обмеження в 8 ГБ локального тимчасового сховища. 500 Mi цього обмеження може бути використано томом `emptyDir`.

```yaml
apiVersion: v1
kind: Pod
metadata:
  name: frontend
spec:
  containers:
  - name: app
    image: images.my-company.example/app:v4
    resources:
      requests:
        ephemeral-storage: "2Gi"
      limits:
        ephemeral-storage: "4Gi"
    volumeMounts:
    - name: ephemeral
      mountPath: "/tmp"
  - name: log-aggregator
    image: images.my-company.example/log-aggregator:v6
    resources:
      requests:
        ephemeral-storage: "2Gi"
      limits:
        ephemeral-storage: "4Gi"
    volumeMounts:
    - name: ephemeral
      mountPath: "/tmp"
  volumes:
    - name: ephemeral
      emptyDir:
        sizeLimit: 500Mi
```

## Як плануються Podʼи з запитами на тимчасове сховище {#how-pods-with-ephemeral-storage-requests-are-scheduled}

Коли ви створюєте Pod, планувальник Kubernetes вибирає вузол, на якому буде працювати Pod. Кожен вузол має максимальний обсяг локального тимчасового сховища, який він може надати для Podʼів. Докладнішу інформацію див. у розділі [Node Allocatable](/docs/tasks/administer-cluster/reserve-compute-resources/#node-allocatable).

Планувальник гарантує, що сума запитів на ресурси запланованих контейнерів буде меншою за місткість вузла.

## Управління споживанням тимчасового сховища {#resource-emphemeralstorage-consumption}

Якщо kubelet управляє локальним тимчасовим сховищем як ресурсом, то kubelet вимірює використання сховища в:

- томах `emptyDir`, за винятком томів _tmpfs_ `emptyDir`
- теках, що містять журнали на рівні вузла
- шарах контейнерів, доступних для запису

Якщо Pod використовує більше тимчасового сховища, ніж ви дозволяєте, kubelet встановлює сигнал виселення, який запускає виселення Pod.

Для ізоляції на рівні контейнера, якщо шар контейнера з можливістю запису та використання журналів перевищує його обмеження сховища, kubelet позначає Pod для виселення.

Для ізоляції на рівні Podʼа kubelet обчислює загальний ліміт памʼяті Podʼа, підсумовуючи ліміти для контейнерів у цьому Pod. У цьому випадку, якщо сума використання локальної тимчасової памʼяті з усіх контейнерів, а також томів `emptyDir` Podʼа перевищує загальний ліміт памʼяті Podʼа, то kubelet також позначає Pod для виселення.

<div class="alert alert-caution" role="note"><h4 class="alert-heading">Увага:</h4><p>Якщо kubelet не вимірює локальне тимчасове сховище, то Pod, який перевищує свій локальний ліміт сховища, не буде вилучений за порушення лімітів локальних ресурсів сховища.</p>
<p>Однак, якщо простір файлової системи для записуваних шарів контейнерів, журналів на рівні вузла або томів <code>emptyDir</code> стає недостатнім, вузол сам позначає себе <a class='glossary-tooltip' title='Основний обʼєкт, що складається з трьох обовʼязкових властивостей: key, value, та effect. Taints (додаткові властивості) запобігають розміщенню Podʼів на вузлах чи групах вузлів.' data-bs-toggle='tooltip' data-bs-placement='top' href='/uk/docs/concepts/scheduling-eviction/taint-and-toleration/' target='_blank' aria-label='taints'>taints</a> як такий, що має недостатньо локального сховища, і ця позначка викликає вилучення будь-яких Podʼів, які не толерують цю позначку.</p>
<p>Дивіться підтримувані <a href="#configurations">конфігурації</a> для тимчасового локального сховища.</p>
</div>


Kubelet підтримує різні способи вимірювання використання сховища Podʼа:

<ul class="nav nav-tabs" id="tabs-resource-emphemeralstorage-measurement" role="tablist"><li class="nav-item"><a data-bs-toggle="tab" class="nav-link active" href="#tabs-resource-emphemeralstorage-measurement-0" role="tab" aria-controls="tabs-resource-emphemeralstorage-measurement-0" aria-selected="true">Періодичне сканування</a></li>
	  
		<li class="nav-item"><a data-bs-toggle="tab" class="nav-link" href="#tabs-resource-emphemeralstorage-measurement-1" role="tab" aria-controls="tabs-resource-emphemeralstorage-measurement-1">Квота на файлову систему проєкту</a></li></ul>

<div class="tab-content" id="tabs-resource-emphemeralstorage-measurement-content"><div class="tab-body tab-pane fadeshow active"
        id="tabs-resource-emphemeralstorage-measurement-0" role="tabpanel" aria-labelledby="tabs-resource-emphemeralstorage-measurement-0-tab" tabindex="resource-emphemeralstorage-measurement"><p>Kubelet виконує регулярні, заплановані перевірки, які сканують кожен том <code>emptyDir</code>, теку журналів контейнера та записуваний шар контейнера.</p>
<p>Сканування вимірює, скільки місця використовується.</p>
<div class="alert alert-info" role="note"><h4 class="alert-heading">Примітка:</h4><p>У цьому режимі kubelet не відстежує відкриті дескриптори файлів для видалених файлів.</p>
<p>Якщо ви (або контейнер) створюєте файл у томі <code>emptyDir</code>, щось відкриває цей файл, а ви видаляєте файл, поки він ще відкритий, то інод для видаленого файлу залишається, поки ви не закриєте цей файл, але kubelet не класифікує простір як використовуваний.</p>
</div>
</div><div class="tab-body tab-pane fade"
        id="tabs-resource-emphemeralstorage-measurement-1" role="tabpanel" aria-labelledby="tabs-resource-emphemeralstorage-measurement-1-tab" tabindex="resource-emphemeralstorage-measurement">  <div class="feature-state-notice feature-beta" title="Функціональна можливість: LocalStorageCapacityIsolationFSQuotaMonitoring">
              <span class="feature-state-name">СТАН ФУНКЦІОНАЛУ:</span> 
              <code>Kubernetes v1.31 [beta]</code>(стандартно вимкнено)</div>
<p>Квоти проєктів — це функція на рівні операційної системи для управління використанням сховища у файлових системах. За допомогою Kubernetes ви можете увімкнути квоти проєктів для моніторингу використання сховища. Переконайтеся, що файлова система, яка підтримує томи <code>emptyDir</code> на вузлі, забезпечує підтримку квот проєктів. Наприклад, XFS та ext4fs пропонують квоти проєктів.</p>
<div class="alert alert-info" role="note"><h4 class="alert-heading">Примітка:</h4>Квоти проєктів дозволяють моніторити використання сховища; вони не застосовують обмеження.</div>
<p>Kubernetes використовує ідентифікатори проєктів, починаючи з <code>1048576</code>. Використовувані ідентифікатори зареєстровані в <code>/etc/projects</code> та <code>/etc/projid</code>. Якщо ідентифікатори проєктів у цьому діапазоні використовуються в системі для інших цілей, їх необхідно зареєструвати в <code>/etc/projects</code> та <code>/etc/projid</code>, щоб Kubernetes не використовував їх.</p>
<p>Квоти є швидшими та точнішими, ніж сканування тек. Коли тека призначається проєкту, всі файли, створені в цій теці, створюються в цьому проєкті, і ядро має лише відстежувати, скільки блоків використовується файлами в цьому проєкті. Якщо файл створено та видалено, але він має відкритий дескриптор файлу, він продовжує споживати простір. Відстеження квот точно фіксує цей простір, тоді як сканування тек пропускає простір, який використовують видалені файли.</p>
<p>Щоб використовувати квоти для відстеження використання ресурсів подом, под повинен знаходитися в просторі імен користувача. У просторі імен користувача ядро обмежує зміни projectID у файловій системі, забезпечуючи надійність метрик зберігання, розрахованих за допомогою квот.</p>
<p>Якщо ви хочете використовувати квоти проєкту, вам слід:</p>
<ul>
<li>
<p>Увімкнути <a href="/uk/docs/reference/command-line-tools-reference/feature-gates/#LocalStorageCapacityIsolationFSQuotaMonitoring">функціональну можливість</a> <code>LocalStorageCapacityIsolationFSQuotaMonitoring=true</code> за допомогою поля <code>featureGates</code> у <a href="/uk/docs/reference/config-api/kubelet-config.v1beta1/">конфігурації kubelet</a>.</p>
</li>
<li>
<p>Переконатися, що <a href="/uk/docs/reference/command-line-tools-reference/feature-gates/#UserNamespacesSupport">функціональна можливість</a> <code>UserNamespacesSupport</code> увімкнена, а ядро, реалізація CRI та середовище виконання OCI підтримують простори імен користувачів.</p>
</li>
<li>
<p>Переконайтеся, що в кореневій файловій системі (або опціональній файловій системі виконання) увімкнено квоти проєктів. Усі файлові системи XFS підтримують квоти проєктів. Для файлових систем ext4 потрібно увімкнути функцію відстеження квот проєктів, коли файлова система не підключена.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="c1"># For ext4, with /dev/block-device not mounted</span>
</span></span><span class="line"><span class="cl">sudo tune2fs -O project -Q prjquota /dev/block-device
</span></span></code></pre></div></li>
<li>
<p>Переконайтеся, що коренева файлова система (або опціональна файлова система виконання) змонтована з увімкненими квотами проєкту. Для XFS і ext4fs опція монтування називається <code>prjquota</code>.</p>
</li>
</ul>
<p>Якщо ви не хочете використовувати квоти проєкту, вам слід:</p>
<ul>
<li>Вимкнути <a href="/uk/docs/reference/command-line-tools-reference/feature-gates/#LocalStorageCapacityIsolationFSQuotaMonitoring">функціональну можливість</a> <code>LocalStorageCapacityIsolationFSQuotaMonitoring</code> за допомогою поля <code>featureGates</code> у <a href="/uk/docs/reference/config-api/kubelet-config.v1beta1/">конфігурації kubelet</a>.</li>
</ul>
</div></div>


## Що далі

* Прочитайте про [квоти проєктів](https://www.linux.org/docs/man8/xfs_quota.html) у XFS.
