# kubeadm reset

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

---

<!-- overview -->

Виконує максимально можливий відкат змін, зроблених командами `kubeadm init` або `kubeadm join`.

<!-- body -->


	<h3 id="synopsis">Опис<a class="td-heading-self-link" href="#synopsis" aria-label="Heading self-link"></a></h3>
<p>Виконує максимально можливий відкат змін для хоста, зроблених командами <code>kubeadm init</code> або <code>kubeadm join</code>.</p>
<p>Команда &quot;reset&quot; виконує наступні фази:</p>
<pre tabindex="0"><code class="language-none" data-lang="none">preflight           Запуск попередніх перевірок
remove-etcd-member  Вилучення локального учасника etcd.
cleanup-node        Запуск очищення вузла.
</code></pre><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">kubeadm reset <span class="o">[</span>flags<span class="o">]</span>
</span></span></code></pre></div><h3 id="options">Параметри<a class="td-heading-self-link" href="#options" aria-label="Heading self-link"></a></h3>
<table style="width: 100%; table-layout: fixed;">
    <colgroup>
        <col span="1" style="width: 10px;" />
        <col span="1" />
    </colgroup>
    <tbody>
        <tr>
            <td colspan="2">--cert-dir string&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Типово: "/etc/kubernetes/pki"</td>
        </tr>
        <tr>
            <td></td>
            <td style="line-height: 130%; word-wrap: break-word;"><p>Шлях до теки, де зберігаються сертифікати. Якщо вказано, очистити цю теку.</p></td>
        </tr>
        <tr>
            <td colspan="2">--cleanup-tmp-dir</td>
        </tr>
        <tr>
            <td></td>
            <td style="line-height: 130%; word-wrap: break-word;"><p>Очистити теку &quot;/etc/kubernetes/tmp&quot;</p></td>
        </tr>
        <tr>
            <td colspan="2">--config string</td>
        </tr>
        <tr>
            <td></td>
            <td style="line-height: 130%; word-wrap: break-word;"><p>Шлях до файлу конфігурації kubeadm.</p></td>
        </tr>
        <tr>
            <td colspan="2">--cri-socket string</td>
        </tr>
        <tr>
            <td></td>
            <td style="line-height: 130%; word-wrap: break-word;"><p>Шлях до CRI сокету для підключення. Якщо порожньо, kubeadm спробує автоматично визначити це значення; використовуйте цей параметр лише якщо у вас встановлено більше одного CRI або якщо у вас нестандартний CRI сокет.</p></td>
        </tr>
        <tr>
            <td colspan="2">--dry-run</td>
        </tr>
        <tr>
            <td></td>
            <td style="line-height: 130%; word-wrap: break-word;"><p>Не вносити жодних змін; лише вивести, що буде зроблено.</p></td>
        </tr>
        <tr>
            <td colspan="2">-f, --force</td>
        </tr>
        <tr>
            <td></td>
            <td style="line-height: 130%; word-wrap: break-word;"><p>Виконати reset вузла без запиту на підтвердження.</p></td>
        </tr>
        <tr>
            <td colspan="2">-h, --help</td>
        </tr>
        <tr>
            <td></td>
            <td style="line-height: 130%; word-wrap: break-word;"><p>довідка reset</p></td>
        </tr>
        <tr>
            <td colspan="2">--ignore-preflight-errors strings</td>
        </tr>
        <tr>
            <td></td>
            <td style="line-height: 130%; word-wrap: break-word;"><p>Список перевірок, помилки яких будуть показані як попередження. Приклад: 'IsPrivilegedUser,Swap'. Значення 'all' ігнорує помилки від усіх перевірок.</p></td>
        </tr>
        <tr>
            <td colspan="2">--kubeconfig string&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Типово: "/etc/kubernetes/admin.conf"</td>
        </tr>
        <tr>
            <td></td>
            <td style="line-height: 130%; word-wrap: break-word;"><p>Файл kubeconfig для використання при спілкуванні з кластером. Якщо прапорець не встановлено, можна шукати наявний файл kubeconfig у наборі стандартних місць.</p></td>
        </tr>
        <tr>
            <td colspan="2">--skip-phases strings</td>
        </tr>
        <tr>
            <td></td>
            <td style="line-height: 130%; word-wrap: break-word;"><p>Список фаз, які слід пропустити</p></td>
        </tr>
    </tbody>
</table>
<h3 id="options-inherited-from-parent-commands">Параметри успадковані від батьківських команд<a class="td-heading-self-link" href="#options-inherited-from-parent-commands" aria-label="Heading self-link"></a></h3>
<table style="width: 100%; table-layout: fixed;">
    <colgroup>
        <col span="1" style="width: 10px;" />
        <col span="1" />
    </colgroup>
    <tbody>
        <tr>
            <td colspan="2">--rootfs string</td>
        </tr>
        <tr>
            <td></td>
            <td style="line-height: 130%; word-wrap: break-word;"><p>Шлях до реальної кореневої файлової системи хоста. Це призведе до зміни корення (chroot) kubeadm на вказаних шлях</p></td>
        </tr>
    </tbody>
</table>


### Робочий процес {#reset-workflow}

`kubeadm reset` відповідає за очищення файлової системи вузла від файлів, створених за допомогою команд `kubeadm init` або `kubeadm join`. Для вузлів панелі управління `reset` також видаляє локального учасника стека etcd цього вузла з кластера etcd.

`kubeadm reset phase` можна використовувати для виконання окремих фаз наведеного вище робочого процесу. Щоб пропустити список фаз, ви можете використовувати прапорець `--skip-phases`, який працює аналогічно до роботи з фазами `kubeadm join` та `kubeadm init`.

`kubeadm reset` також підтримує прапорець `--config` для передачі структури [`ResetConfiguration`](/docs/reference/config-api/kubeadm-config.v1beta4/).

### Очищення зовнішніх членів etcd {#cleanup-of-external-etcd-members}

`kubeadm reset` не видалить жодних даних etcd, якщо використовується зовнішній etcd. Це означає, що якщо ви знову виконаєте `kubeadm init` з використанням тих самих точок доступу etcd, ви побачите стан від попередніх кластерів.

Щоб видалити дані etcd, рекомендується використовувати клієнт, такий як etcdctl, наприклад:

```bash
etcdctl del "" --prefix
```

Дивіться [документацію etcd](https://github.com/coreos/etcd/tree/master/etcdctl) для отримання додаткової інформації.

### Очищення конфігурації CNI {#cleanup-of-cni-configuration}

Втулки CNI використовують теку `/etc/cni/net.d` для зберігання своїх конфігурацій. Команда `kubeadm reset` не очищує цю теку. Залишення конфігурації втулка CNI на хості може бути проблематичним, якщо той самий хост пізніше буде використано як новий вузол Kubernetes, а у цьому кластері буде розгорнуто інший втулок CNI. Це може призвести до конфлікту конфігурації між втулками CNI.

Щоб очистити теку, створіть резервну копію її вмісту, якщо потрібно, а потім виконайте наступну команду:

```bash
sudo rm -rf /etc/cni/net.d
```

### Очищення правил мережевого трафіку {#cleanup-of-network-traffic-rules}

Команда `kubeadm reset` не очищує правила iptables, nftables або IPVS, застосовані до вузла kube-proxy. Цикл контролю в kube-proxy гарантує, що правила на кожному вузлі будуть синхронізовані. Додаткові відомості наведено у статті [Віртуальні IP-адреси та службові проксі-сервери](/docs/reference/networking/virtual-ips/).

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

Якщо ви бажаєте виконати таке очищення, ви можете використати той самий контейнер kube-proxy, який використовувався у вашому кластері, і прапорець `--cleanup` у бінарному файлі `kube-proxy`:

```bash
docker run --privileged --network=host -v /lib/modules:/lib/modules:ro --rm registry.k8s.io/kube-proxy:v1.36.0 sh -c "kube-proxy --cleanup && echo DONE"
```

У результаті виконання наведеної вище команди має бути виведено `DONE`. Замість Docker для запуску контейнера ви можете скористатися вашим улюбленим середовищем виконання контейнерів.

### Очищення $HOME/.kube {#cleanup-of-home-kube}

Тека `$HOME/.kube` зазвичай містить конфігураційні файли та кеш kubectl. Хоча не очищення вмісту `$HOME/.kube/cache` не є проблемою, у цій теці є один важливий файл. Це `$HOME/.kube/config` і він використовується kubectl для автентифікації на сервері Kubernetes API. Після завершення `kubeadm init` користувачеві буде запропоновано скопіювати файл `/etc/kubernetes/admin.conf` до теки `$HOME/.kube/config` і надати доступ до нього поточному користувачеві.

Команда `kubeadm reset` не очищує вміст теки `$HOME/.kube`. Залишення файлу `$HOME/.kube/config` без видалення може бути проблематичним, залежно від того, хто матиме доступ до цього хосту після виклику `kubeadm reset`. Якщо той самий кластер продовжує існувати, наполегливо рекомендуємо видалити цей файл, оскільки облікові дані адміністратора, що зберігаються в ньому, залишатимуться дійсними.

Щоб очистити теку, перегляньте її вміст, виконайте резервне копіювання, якщо потрібно, і виконайте наступну команду:

```bash
rm -rf $HOME/.kube
```

### Відповідне завершення роботи kube-apiserver {#graceful-kube-apiserver-shutdown}

Якщо ваш `kube-apiserver` налаштований з прапорцем `--shutdown-delay-duration`, ви можете виконати наступні команди, щоб спробувати завершити роботу відповідним чином для запущеного Pod API сервера, перед тим як виконати `kubeadm reset`:

```bash
yq eval -i '.spec.containers[0].command = []' /etc/kubernetes/manifests/kube-apiserver.yaml
timeout 60 sh -c 'while pgrep kube-apiserver >/dev/null; do sleep 1; done' || true
```

## Що далі

* [kubeadm init](/docs/reference/setup-tools/kubeadm/kubeadm-init/) для створення вузла панелі управління Kubernetes
* [kubeadm join](/docs/reference/setup-tools/kubeadm/kubeadm-join/) для приєднання робочого вузла Kubernetes до кластера
