From 99d58d4f08fd676f1263cba41e3331b61b2b2d35 Mon Sep 17 00:00:00 2001 From: Rocky Linux Automation <75949597+rockylinux-auto@users.noreply.github.com> Date: Sat, 8 Mar 2025 11:35:00 -0500 Subject: [PATCH 1/9] New translations lab1-prerequisites.md (French) --- .../lab1-prerequisites.fr.md | 43 +++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 docs/labs/kubernetes-the-hard-way/lab1-prerequisites.fr.md diff --git a/docs/labs/kubernetes-the-hard-way/lab1-prerequisites.fr.md b/docs/labs/kubernetes-the-hard-way/lab1-prerequisites.fr.md new file mode 100644 index 0000000000..c437b7cd72 --- /dev/null +++ b/docs/labs/kubernetes-the-hard-way/lab1-prerequisites.fr.md @@ -0,0 +1,43 @@ +--- +author: Wale Soyinka +contributors: Steven Spencer, Ganna Zhyrnova +tags: + - kubernetes + - k8s + - exercice d'atelier +--- + +# Labo n°1 : Prérequis + +!!! info + + Il s'agit d'un fork de l'original ["Kubernetes the hard way"](https://github.com/kelseyhightower/kubernetes-the-hard-way) écrit à l'origine par Kelsey Hightower (GitHub : kelseyhightower). Contrairement à l'original, qui se base sur des distributions de type Debian pour l'architecture ARM64, ce fork cible les distributions Enterprise Linux telles que Rocky Linux, qui fonctionne sur l'architecture x86_64. + +Dans ce laboratoire, vous passerez en revue les exigences machine nécessaires pour suivre ce didacticiel. + +## Machines virtuelles ou physiques + +Ce tutoriel nécessite quatre (4) machines x86_64 virtuelles ou physiques exécutant Debian 12 (bookworm). Le tableau suivant répertorie les quatre machines et leurs exigences en matière de CPU, de mémoire et de stockage. + +| Nom | Description | CPU | RAM | Stockage | +| ------- | ------------------------- | --- | ------ | -------- | +| jumpbox | Hôte administratif | 1 | 512 Mo | 10Go | +| server | Serveur Kubernetes | 1 | 2 Go | 20 Go | +| node-0 | Nœud Worker de Kubernetes | 1 | 2 Go | 20 Go | +| node-1 | Nœud Worker de Kubernetes | 1 | 2 Go | 20 Go | + +La manière dont vous provisionnez les machines dépend de vous, la seule exigence est que chaque machine réponde aux exigences système ci-dessus, y compris les spécifications de la machine et la version du système d'exploitation. Une fois les quatre machines provisionnées, vérifiez la configuration système requise en exécutant la commande `uname` sur chaque machine : + +```bash +uname -mov +``` + +Après avoir exécuté la commande `uname`, vous devriez obtenir un résultat similaire : + +```text +#1 SMP PREEMPT_DYNAMIC Wed Feb 19 16:28:19 UTC 2025 x86_64 GNU/Linux +``` + +Le `x86_64` que vous voyez dans le résultat confirme que le système est une architecture x86_64. Cela devrait être le cas pour divers systèmes basés sur AMD et Intel. + +À suivre : [setting-up-the-jumpbox](lab2-jumpbox.md) From 5360fb333dcdf6d2ecfb2a20d127d4ee0d381dd6 Mon Sep 17 00:00:00 2001 From: Rocky Linux Automation <75949597+rockylinux-auto@users.noreply.github.com> Date: Mon, 10 Mar 2025 08:28:31 -0400 Subject: [PATCH 2/9] New translations lab1-prerequisites.md (Ukrainian) --- docs/labs/kubernetes-the-hard-way/lab1-prerequisites.uk.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/labs/kubernetes-the-hard-way/lab1-prerequisites.uk.md b/docs/labs/kubernetes-the-hard-way/lab1-prerequisites.uk.md index ea6dfd2a4e..a1817e0942 100644 --- a/docs/labs/kubernetes-the-hard-way/lab1-prerequisites.uk.md +++ b/docs/labs/kubernetes-the-hard-way/lab1-prerequisites.uk.md @@ -17,7 +17,7 @@ tags: ## Віртуальні або фізичні машини -Вам потрібні чотири (4) віртуальні або фізичні машини x86_64, на яких працює Debian 12 (bookworm). У наведеній нижче таблиці перераховано чотири машини та їхні вимоги до ЦП, пам’яті, та сховища. +Для цього підручника потрібні чотири (4) віртуальні або фізичні машини x86_64, на яких працює Rocky Linux 9.5 (контейнери Incus або LXD також мають працювати). У наведеній нижче таблиці перераховано чотири машини та їхні вимоги до ЦП, пам’яті, та сховища. | Назва | Опис | CPU | RAM | Пам’ять | | ------- | ------------------------ | --- | ----- | ------- | From 8c531f5c5798121dde56110789ac87e2ebcfbc9b Mon Sep 17 00:00:00 2001 From: Rocky Linux Automation <75949597+rockylinux-auto@users.noreply.github.com> Date: Mon, 10 Mar 2025 08:28:33 -0400 Subject: [PATCH 3/9] New translations lab3-compute-resources.md (Ukrainian) --- .../lab3-compute-resources.uk.md | 236 ++++++++++++++++++ 1 file changed, 236 insertions(+) create mode 100644 docs/labs/kubernetes-the-hard-way/lab3-compute-resources.uk.md diff --git a/docs/labs/kubernetes-the-hard-way/lab3-compute-resources.uk.md b/docs/labs/kubernetes-the-hard-way/lab3-compute-resources.uk.md new file mode 100644 index 0000000000..ea08f71259 --- /dev/null +++ b/docs/labs/kubernetes-the-hard-way/lab3-compute-resources.uk.md @@ -0,0 +1,236 @@ +--- +author: Wale Soyinka +contributors: Steven Spencer +tags: + - kubernetes + - k8s + - лабораторна вправа +--- + +# Лабораторна робота 3: Надання обчислювальних ресурсів + +!!! info + + Це гілка розгалуження від оригінальної ["Kubernetes the hard way"](https://github.com/kelseyhightower/kubernetes-the-hard-way), Келсі Хайтауера (GitHub: kelseyhightower). На відміну від оригіналу, який базується на дистрибутивах, подібних до Debian, для архітектури ARM64, ця гілка націлена на дистрибутиви Enterprise Linux, такі як Rocky Linux, який працює на архітектурі x86_64. + +Для Kubernetes потрібен набір машин для розміщення площини керування Kubernetes і робочих вузлів, де зрештою запускаються контейнери. У цій лабораторній роботі ви надасте машини, необхідні для налаштування кластера Kubernetes. + +## Машинна база даних + +Цей підручник використовуватиме текстовий файл, який слугуватиме машинною базою даних, щоб зберігати різні атрибути машини, які ви використовуватимете під час налаштування рівня керування Kubernetes і робочих вузлів. Наступна схема представляє записи в машинній базі даних, один запис на рядок: + +```text +IPV4_ADDRESS FQDN HOSTNAME POD_SUBNET +``` + +Кожен стовпець відповідає IP-адресі машини `IPV4_ADDRESS`, повному доменному імені `FQDN`, імені хосту `HOSTNAME` та IP-підмережі `POD_SUBNET`. Kubernetes призначає одну IP-адресу кожному «pod», а «POD_SUBNET» представляє унікальний діапазон IP-адрес, призначений кожній машині в кластері для цього. + +Ось приклад машинної бази даних, подібної до тієї, що використовувалася під час створення цього посібника. Зверніть увагу на приховані IP-адреси. Ви можете призначити будь-яку IP-адресу своїм машинам за умови, що кожна машина доступна один одному та «jumpbox». + +```bash +cat machines.txt +``` + +```text +XXX.XXX.XXX.XXX server.kubernetes.local server +XXX.XXX.XXX.XXX node-0.kubernetes.local node-0 10.200.0.0/24 +XXX.XXX.XXX.XXX node-1.kubernetes.local node-1 10.200.1.0/24 +``` + +Тепер ваша черга створити файл `machines.txt` з деталями для трьох машин, які ви використовуватимете для створення свого кластера Kubernetes. Скористайтеся наведеною вище прикладом бази даних машин і додайте деталі для своїх машин. + +## Налаштування SSH доступу + +Ви будете використовувати SSH для налаштування машин у кластері. Переконайтеся, що у вас є `кореневий` доступ SSH до кожної машини, зазначеної в базі даних вашої машини. Вам може знадобитися ввімкнути кореневий доступ SSH на кожному вузлі, оновивши файл `sshd_config` і перезапустивши сервер SSH. + +### Увімкніть кореневий доступ SSH + +Ви можете пропустити цей розділ, якщо у вас є `кореневий` доступ SSH для кожної з ваших машин. + +Нова інсталяція `Rocky Linux` вимикає доступ SSH для користувача `root` за умовчанням. Це з міркувань безпеки, оскільки користувач `root` має повний адміністративний контроль над Unix-подібними системами. Слабкі паролі жахливі для машин, підключених до Інтернету. Як згадувалося раніше, ви ввімкнете «кореневий» доступ через SSH, щоб спростити кроки в цьому посібнику. Безпека – це компроміс; у цьому випадку ви оптимізуєтеся для зручності. + +Увійдіть на кожну машину за допомогою SSH і свого облікового запису користувача, а потім перейдіть на `root` користувача за допомогою команди `su`: + +```bash +su - root +``` + +Відредагуйте файл конфігурації демона SSH `/etc/ssh/sshd_config` і встановіть для параметра `PermitRootLogin` значення `yes`: + +```bash +sed -i \ + 's/^#PermitRootLogin.*/PermitRootLogin yes/' \ + /etc/ssh/sshd_config +``` + +Перезапустіть сервер SSH `sshd`, щоб отримати оновлений файл конфігурації: + +```bash +systemctl restart sshd +``` + +### Створення та розповсюдження ключів SSH + +Тут ви згенеруєте та розповсюдите пару ключів SSH на машини `server`, `node-0` і `node-1, які ви використовуватимете для виконання команд на цих машинах протягом цього підручника. Виконайте наступні команди з машини `jumpbox\`. + +Згенеруйте новий ключ SSH: + +```bash +ssh-keygen +``` + +Натисніть ++enter++, щоб прийняти всі значення за замовчуванням для запитів тут: + +```text +Generating public/private rsa key pair. +Enter file in which to save the key (/root/.ssh/id_rsa): +Enter passphrase (empty for no passphrase): +Enter same passphrase again: +Your identification has been saved in /root/.ssh/id_rsa +Your public key has been saved in /root/.ssh/id_rsa.pub +``` + +Скопіюйте відкритий ключ SSH на кожну машину: + +```bash +while read IP FQDN HOST SUBNET; do + ssh-copy-id root@${IP} +done < machines.txt +``` + +Додавши кожен ключ, переконайтеся, що доступ до відкритого ключа SSH працює: + +```bash +while read IP FQDN HOST SUBNET; do + ssh -n root@${IP} uname -o -m +done < machines.txt +``` + +```text +x86_64 GNU/Linux +x86_64 GNU/Linux +x86_64 GNU/Linux +``` + +## Імена хостів + +У цьому розділі ви призначите імена хостів машинам `server`, `node-0` і `node-1`. Ви використовуватимете ім’я хоста під час виконання команд із `jumpbox` для кожної машини. Ім'я хоста також відіграє важливу роль у кластері. Замість використання IP-адреси для видачі команд серверу API Kubernetes клієнти Kubernetes використовуватимуть ім’я хоста `server`. Кожна робоча машина також використовує імена хостів «node-0» і «node-1» під час реєстрації в певному кластері Kubernetes. + +Щоб налаштувати ім’я хоста для кожного комп’ютера, виконайте наступні команди в `jumpbox`. + +Встановіть ім’я хоста для кожної машини, зазначеної у файлі `machines.txt`: + +```bash +while read IP FQDN HOST SUBNET; do + ssh -n root@${IP} cp /etc/hosts /etc/hosts.bak + CMD="sed -i 's/^127.0.0.1.*/127.0.0.1\t${FQDN} ${HOST}/' /etc/hosts" + ssh -n root@${IP} "$CMD" + ssh -n root@${IP} hostnamectl hostname ${HOST} +done < machines.txt +``` + +Перевірте ім’я хоста, налаштоване на кожній машині: + +```bash +while read IP FQDN HOST SUBNET; do + ssh -n root@${IP} hostname --fqdn +done < machines.txt +``` + +```text +server.kubernetes.local +node-0.kubernetes.local +node-1.kubernetes.local +``` + +## Таблиця пошуку хостів + +У цьому розділі ви згенеруєте файл `hosts` і додасте його до файлу `/etc/hosts` у `jumpbox` і до файлів `/etc/hosts` на всіх трьох членах кластера, які використовуються для цього посібника. Це дозволить кожній машині бути доступною за допомогою імені хоста, наприклад `server`, `node-0` або `node-1`. + +Створіть новий файл `hosts` і додайте заголовок, щоб визначити додані машини: + +```bash +echo "" > hosts +echo "# Kubernetes The Hard Way" >> hosts +``` + +Згенеруйте запис хоста для кожної машини у файлі `machines.txt` і додайте його до файлу `hosts`: + +```bash +while read IP FQDN HOST SUBNET; do + ENTRY="${IP} ${FQDN} ${HOST}" + echo $ENTRY >> hosts +done < machines.txt +``` + +Перегляньте записи хостів у файлі `hosts`: + +```bash +cat hosts +``` + +```text + +# Kubernetes The Hard Way +XXX.XXX.XXX.XXX server.kubernetes.local server +XXX.XXX.XXX.XXX node-0.kubernetes.local node-0 +XXX.XXX.XXX.XXX node-1.kubernetes.local node-1 +``` + +## Додавання записів `/etc/hosts` до локальної машини + +У цьому розділі ви додасте записи DNS із файлу `hosts` до локального файлу `/etc/hosts` на вашій машині `jumpbox`. + +Додайте записи DNS із `hosts` до `/etc/hosts`: + +```bash +cat hosts >> /etc/hosts +``` + +Перевірте оновлення файлу `/etc/hosts`: + +```bash +cat /etc/hosts +``` + +```text +127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 +::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 + +# Kubernetes The Hard Way +XXX.XXX.XXX.XXX server.kubernetes.local server +XXX.XXX.XXX.XXX node-0.kubernetes.local node-0 +XXX.XXX.XXX.XXX node-1.kubernetes.local node-1 +``` + +Ви повинні мати можливість SSH для кожної машини, зазначеної у файлі `machines.txt`, використовуючи ім’я хоста. + +```bash +for host in server node-0 node-1 + do ssh root@${host} uname -o -m -n +done +``` + +```text +server x86_64 GNU/Linux +node-0 x86_64 GNU/Linux +node-1 x86_64 GNU/Linux +``` + +## Додавання записів `/etc/hosts` до віддалених машин + +У цьому розділі ви додасте записи хостів із `hosts` до `/etc/hosts` на кожній машині, указаній у текстовому файлі `machines.txt`. + +Скопіюйте файл `hosts` на кожну машину та додайте його вміст до `/etc/hosts`: + +```bash +while read IP FQDN HOST SUBNET; do + scp hosts root@${HOST}:~/ + ssh -n \ + root@${HOST} "cat hosts >> /etc/hosts" +done < machines.txt +``` + +Ви можете використовувати імена хостів під час підключення до комп’ютерів зі свого комп’ютера «jumpbox» або будь-якого з трьох комп’ютерів у кластері Kubernetes. Замість використання IP-адрес тепер ви можете підключатися до машин за допомогою імені хоста, наприклад `server`, `node-0` або `node-1`. + +Далі: [Надання ЦС і генерація сертифікатів TLS](lab4-certificate-authority.md) From 8415b2d5cf025b6a75e8f4381a20e7f0b3afe88f Mon Sep 17 00:00:00 2001 From: Rocky Linux Automation <75949597+rockylinux-auto@users.noreply.github.com> Date: Mon, 10 Mar 2025 08:28:34 -0400 Subject: [PATCH 4/9] New translations lab4-certificate-authority.md (Ukrainian) --- .../lab4-certificate-authority.uk.md | 131 ++++++++++++++++++ 1 file changed, 131 insertions(+) create mode 100644 docs/labs/kubernetes-the-hard-way/lab4-certificate-authority.uk.md diff --git a/docs/labs/kubernetes-the-hard-way/lab4-certificate-authority.uk.md b/docs/labs/kubernetes-the-hard-way/lab4-certificate-authority.uk.md new file mode 100644 index 0000000000..c9520cdde5 --- /dev/null +++ b/docs/labs/kubernetes-the-hard-way/lab4-certificate-authority.uk.md @@ -0,0 +1,131 @@ +--- +author: Wale Soyinka +contributors: Steven Spencer, Ganna Zhyrnova +tags: + - kubernetes + - k8s + - лабораторна вправа +--- + +# Лабораторна робота 4: Надання ЦС і генерація сертифікатів TLS + +!!! info + + Це гілка розгалуження від оригінальної ["Kubernetes the hard way"](https://github.com/kelseyhightower/kubernetes-the-hard-way), Келсі Хайтауера (GitHub: kelseyhightower). На відміну від оригіналу, який базується на дистрибутивах, подібних до Debian, для архітектури ARM64, ця гілка націлена на дистрибутиви Enterprise Linux, такі як Rocky Linux, який працює на архітектурі x86_64. + +У цій лабораторній роботі ви створите [інфраструктуру PKI](https://en.wikipedia.org/wiki/Public_key_infrastructure) за допомогою OpenSSL для завантаження центру сертифікації та створення сертифікатів TLS для таких компонентів: + +- kube-apiserver +- kube-controller-manager +- kube-scheduler +- kubelet +- kube-proxy + +Виконуйте команди в цьому розділі з `jumpbox`. + +## Центр сертифікації + +У цьому розділі ви надасте центр сертифікації, який використовуватимете для створення додаткових сертифікатів TLS для інших компонентів Kubernetes. Налаштування ЦС і генерування сертифікатів за допомогою `openssl` може зайняти багато часу, особливо коли це робиться вперше. Щоб оптимізувати цю лабораторну роботу, потрібно включити файл конфігурації openssl, ca.conf, який визначає всі деталі, необхідні для створення сертифікатів для кожного компонента Kubernetes. + +Перегляньте файл конфігурації `ca.conf`: + +```bash +cat ca.conf +``` + +Щоб пройти цей підручник, вам не потрібно розуміти все у файлі `ca.conf`. Тим не менш, ви повинні вважати це відправною точкою для вивчення `openssl` і конфігурації, яка входить до керування сертифікатами на високому рівні. + +Кожен центр сертифікації починається з закритого ключа та кореневого сертифіката. У цьому розділі ви створите самопідписаний центр сертифікації. Хоча це все, що вам потрібно для цього підручника, ви не повинні розглядати це в реальному виробничому середовищі. + +Згенеруйте файл конфігурації ЦС, сертифікат і закритий ключ: + +```bash + openssl genrsa -out ca.key 4096 + openssl req -x509 -new -sha512 -noenc \ + -key ca.key -days 3653 \ + -config ca.conf \ + -out ca.crt +``` + +Результати: + +```txt +ca.crt ca.key +``` + +!!! tip "Порада" + + Щоб переглянути деталі, закодовані у створеному файлі сертифіката (ca.crt), ви можете скористатися цією командою OpenSSL `openssl x509 -in ca.crt -text -noout | less`. + +## Створення сертифікатів клієнта та сервера + +У цьому розділі ви створите сертифікати клієнта та сервера для кожного компонента Kubernetes, а також сертифікат клієнта для користувача Kubernetes «адміністратор». + +Згенеруйте сертифікати та закриті ключі: + +```bash +certs=( + "admin" "node-0" "node-1" + "kube-proxy" "kube-scheduler" + "kube-controller-manager" + "kube-api-server" + "service-accounts" +) +``` + +```bash +for i in ${certs[*]}; do + openssl genrsa -out "${i}.key" 4096 + + openssl req -new -key "${i}.key" -sha256 \ + -config "ca.conf" -section ${i} \ + -out "${i}.csr" + + openssl x509 -req -days 3653 -in "${i}.csr" \ + -copy_extensions copyall \ + -sha256 -CA "ca.crt" \ + -CAkey "ca.key" \ + -CAcreateserial \ + -out "${i}.crt" +done +``` + +Результати команди вище створять закритий ключ, запит на сертифікат і підписаний сертифікат SSL для кожного компонента Kubernetes. Ви можете отримати список згенерованих файлів за допомогою такої команди: + +```bash +ls -1 *.crt *.key *.csr +``` + +## Поширення сертифікатів клієнта та сервера + +У цьому розділі ви скопіюєте різні сертифікати на кожну машину за допомогою шляху, де кожен компонент Kubernetes шукатиме свою пару сертифікатів. У реальному середовищі ви б розглядали ці сертифікати як набір конфіденційних секретів, оскільки Kubernetes використовує ці компоненти як облікові дані для автентифікації один одного. + +Скопіюйте відповідні сертифікати та закриті ключі на машини `node-0` і `node-1`: + +```bash +for host in node-0 node-1; do + ssh root@$host mkdir /var/lib/kubelet/ + + scp ca.crt root@$host:/var/lib/kubelet/ + + scp $host.crt \ + root@$host:/var/lib/kubelet/kubelet.crt + + scp $host.key \ + root@$host:/var/lib/kubelet/kubelet.key +done +``` + +Скопіюйте відповідні сертифікати та приватні ключі на машину `server`: + +```bash +scp \ + ca.key ca.crt \ + kube-api-server.key kube-api-server.crt \ + service-accounts.key service-accounts.crt \ + root@server:~/ +``` + +У наступній лабораторній роботі ви будете використовувати клієнтські сертифікати `kube-proxy`, `kube-controller-manager`, `kube-scheduler` і `kubelet` для створення файлів конфігурації автентифікації клієнта. + +Далі: [Створення файлів конфігурації Kubernetes для автентифікації](lab5-kubernetes-configuration-files.md) From f6c71be85c766337f0cc49509d00b9d123a9e081 Mon Sep 17 00:00:00 2001 From: Rocky Linux Automation <75949597+rockylinux-auto@users.noreply.github.com> Date: Mon, 10 Mar 2025 08:28:35 -0400 Subject: [PATCH 5/9] New translations lab5-kubernetes-configuration-files.md (Ukrainian) --- .../lab5-kubernetes-configuration-files.uk.md | 214 ++++++++++++++++++ 1 file changed, 214 insertions(+) create mode 100644 docs/labs/kubernetes-the-hard-way/lab5-kubernetes-configuration-files.uk.md diff --git a/docs/labs/kubernetes-the-hard-way/lab5-kubernetes-configuration-files.uk.md b/docs/labs/kubernetes-the-hard-way/lab5-kubernetes-configuration-files.uk.md new file mode 100644 index 0000000000..92f232ba94 --- /dev/null +++ b/docs/labs/kubernetes-the-hard-way/lab5-kubernetes-configuration-files.uk.md @@ -0,0 +1,214 @@ +--- +author: Wale Soyinka +contributors: Steven Spencer, Ganna Zhyrnova +tags: + - kubernetes + - k8s + - лабораторна вправа +--- + +# Лабораторна робота 5: Створення файлів конфігурації Kubernetes для автентифікації + +!!! info + + Це гілка розгалуження від оригінальної ["Kubernetes the hard way"](https://github.com/kelseyhightower/kubernetes-the-hard-way), Келсі Хайтауера (GitHub: kelseyhightower). На відміну від оригіналу, який базується на дистрибутивах, подібних до Debian, для архітектури ARM64, ця гілка націлена на дистрибутиви Enterprise Linux, такі як Rocky Linux, який працює на архітектурі x86_64. + +У цій лабораторній роботі ви створите [файли конфігурації клієнта Kubernetes](https://kubernetes.io/docs/concepts/configuration/organize-cluster-access-kubeconfig/), які зазвичай називаються kubeconfigs. Ці файли налаштовують клієнти Kubernetes для підключення та автентифікації за допомогою серверів API Kubernetes. + +## Конфігурації автентифікації клієнта + +У цьому розділі ви створите файли kubeconfig для користувачів `kubelet` і `admin`. + +### Файл конфігурації kubelet Kubernetes + +Під час генерації файлів kubeconfig для Kubelets ви повинні зіставити сертифікат клієнта з назвою вузла Kubelet. Це забезпечить належну авторизацію Kubelets Kubernetes [Node Authorizer](https://kubernetes.io/docs/admin/authorization/node/). + +> Наступні команди потрібно виконати в тому самому каталозі, який використовується для створення сертифікатів SSL під час лабораторної роботи [Створення сертифікатів TLS](lab4-certificate-authority.md). + +Згенеруйте файл kubeconfig для робочих вузлів node-0 і node-1: + +```bash +for host in node-0 node-1; do + kubectl config set-cluster kubernetes-the-hard-way \ + --certificate-authority=ca.crt \ + --embed-certs=true \ + --server=https://server.kubernetes.local:6443 \ + --kubeconfig=${host}.kubeconfig + + kubectl config set-credentials system:node:${host} \ + --client-certificate=${host}.crt \ + --client-key=${host}.key \ + --embed-certs=true \ + --kubeconfig=${host}.kubeconfig + + kubectl config set-context default \ + --cluster=kubernetes-the-hard-way \ + --user=system:node:${host} \ + --kubeconfig=${host}.kubeconfig + + kubectl config use-context default \ + --kubeconfig=${host}.kubeconfig +done +``` + +Результати: + +```text +node-0.kubeconfig +node-1.kubeconfig +``` + +### Файл конфігурації kube-proxy Kubernetes + +Згенеруйте файл kubeconfig для служби `kube-proxy`: + +```bash + kubectl config set-cluster kubernetes-the-hard-way \ + --certificate-authority=ca.crt \ + --embed-certs=true \ + --server=https://server.kubernetes.local:6443 \ + --kubeconfig=kube-proxy.kubeconfig + + kubectl config set-credentials system:kube-proxy \ + --client-certificate=kube-proxy.crt \ + --client-key=kube-proxy.key \ + --embed-certs=true \ + --kubeconfig=kube-proxy.kubeconfig + + kubectl config set-context default \ + --cluster=kubernetes-the-hard-way \ + --user=system:kube-proxy \ + --kubeconfig=kube-proxy.kubeconfig + + kubectl config use-context default \ + --kubeconfig=kube-proxy.kubeconfig +``` + +Результати: + +```text +kube-proxy.kubeconfig +``` + +### Файл конфігурації kube-controller-manager Kubernetes + +Згенеруйте файл kubeconfig для служби `kube-controller-manager`: + +```bash + kubectl config set-cluster kubernetes-the-hard-way \ + --certificate-authority=ca.crt \ + --embed-certs=true \ + --server=https://server.kubernetes.local:6443 \ + --kubeconfig=kube-controller-manager.kubeconfig + + kubectl config set-credentials system:kube-controller-manager \ + --client-certificate=kube-controller-manager.crt \ + --client-key=kube-controller-manager.key \ + --embed-certs=true \ + --kubeconfig=kube-controller-manager.kubeconfig + + kubectl config set-context default \ + --cluster=kubernetes-the-hard-way \ + --user=system:kube-controller-manager \ + --kubeconfig=kube-controller-manager.kubeconfig + + kubectl config use-context default \ + --kubeconfig=kube-controller-manager.kubeconfig +``` + +Результати: + +```text +kube-controller-manager.kubeconfig +``` + +### Файл конфігурації kube-scheduler Kubernetes + +Згенеруйте файл kubeconfig для служби `kube-scheduler`: + +```bash + kubectl config set-cluster kubernetes-the-hard-way \ + --certificate-authority=ca.crt \ + --embed-certs=true \ + --server=https://server.kubernetes.local:6443 \ + --kubeconfig=kube-scheduler.kubeconfig + + kubectl config set-credentials system:kube-scheduler \ + --client-certificate=kube-scheduler.crt \ + --client-key=kube-scheduler.key \ + --embed-certs=true \ + --kubeconfig=kube-scheduler.kubeconfig + + kubectl config set-context default \ + --cluster=kubernetes-the-hard-way \ + --user=system:kube-scheduler \ + --kubeconfig=kube-scheduler.kubeconfig + + kubectl config use-context default \ + --kubeconfig=kube-scheduler.kubeconfig +``` + +Результати: + +```text +kube-scheduler.kubeconfig +``` + +### Файл конфігурації Kubernetes адміністратора + +Створіть файл kubeconfig для користувача `admin`: + +```bash + kubectl config set-cluster kubernetes-the-hard-way \ + --certificate-authority=ca.crt \ + --embed-certs=true \ + --server=https://127.0.0.1:6443 \ + --kubeconfig=admin.kubeconfig + + kubectl config set-credentials admin \ + --client-certificate=admin.crt \ + --client-key=admin.key \ + --embed-certs=true \ + --kubeconfig=admin.kubeconfig + + kubectl config set-context default \ + --cluster=kubernetes-the-hard-way \ + --user=admin \ + --kubeconfig=admin.kubeconfig + + kubectl config use-context default \ + --kubeconfig=admin.kubeconfig +``` + +Результати: + +```text +admin.kubeconfig +``` + +## Поширюйте файли конфігурації Kubernetes + +Скопіюйте файли kubeconfig `kubelet` і `kube-proxy` до екземплярів `node-0` і `node-1`: + +```bash +for host in node-0 node-1; do + ssh root@$host "mkdir /var/lib/{kube-proxy,kubelet}" + + scp kube-proxy.kubeconfig \ + root@$host:/var/lib/kube-proxy/kubeconfig \ + + scp ${host}.kubeconfig \ + root@$host:/var/lib/kubelet/kubeconfig +done +``` + +Скопіюйте файли kubeconfig `kube-controller-manager` і `kube-scheduler` до примірника контролера: + +```bash +scp admin.kubeconfig \ + kube-controller-manager.kubeconfig \ + kube-scheduler.kubeconfig \ + root@server:~/ +``` + +Далі: [Створення конфігурації та ключа шифрування даних](lab6-data-encryption-keys.md) From 10c5326a471a269d431e8572a4feff4e4a556e90 Mon Sep 17 00:00:00 2001 From: Rocky Linux Automation <75949597+rockylinux-auto@users.noreply.github.com> Date: Mon, 10 Mar 2025 08:28:37 -0400 Subject: [PATCH 6/9] New translations lab6-data-encryption-keys.md (Ukrainian) --- .../lab6-data-encryption-keys.uk.md | 43 +++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 docs/labs/kubernetes-the-hard-way/lab6-data-encryption-keys.uk.md diff --git a/docs/labs/kubernetes-the-hard-way/lab6-data-encryption-keys.uk.md b/docs/labs/kubernetes-the-hard-way/lab6-data-encryption-keys.uk.md new file mode 100644 index 0000000000..a6eb0ac0e6 --- /dev/null +++ b/docs/labs/kubernetes-the-hard-way/lab6-data-encryption-keys.uk.md @@ -0,0 +1,43 @@ +--- +author: Wale Soyinka +contributors: Steven Spencer, Ganna Zhyrnova +tags: + - kubernetes + - k8s + - лабораторна вправа +--- + +# Лабораторна робота 6: Створення конфігурації та ключа шифрування даних + +!!! info + + Це гілка розгалуження від оригінальної ["Kubernetes the hard way"](https://github.com/kelseyhightower/kubernetes-the-hard-way), Келсі Хайтауера (GitHub: kelseyhightower). На відміну від оригіналу, який базується на дистрибутивах, подібних до Debian, для архітектури ARM64, ця гілка націлена на дистрибутиви Enterprise Linux, такі як Rocky Linux, який працює на архітектурі x86_64. + +Kubernetes зберігає різні дані, включаючи стан кластера, конфігурації програм і секрети. Kubernetes дозволяє [шифрувати](https://kubernetes.io/docs/tasks/administer-cluster/encrypt-data) дані кластера в стані спокою. + +У цій лабораторній роботі ви згенеруєте ключ шифрування та [конфігурацію шифрування](https://kubernetes.io/docs/tasks/administer-cluster/encrypt-data/#understanding-the-encryption-at-rest-configuration), придатну для шифрування секретів Kubernetes. + +## Ключ шифрування + +Згенеруйте ключ шифрування: + +```bash +export ENCRYPTION_KEY=$(head -c 32 /dev/urandom | base64) +``` + +## Файл конфігурації шифрування + +Створіть файл конфігурації шифрування `encryption-config.yaml`: + +```bash +envsubst < configs/encryption-config.yaml \ + > encryption-config.yaml +``` + +Скопіюйте файл конфігурації шифрування `encryption-config.yaml` до кожного екземпляра контролера: + +```bash +scp encryption-config.yaml root@server:~/ +``` + +Далі: [Завантаження кластера etcd](lab7-bootstrapping-etcd.md) From b35be7ca5f6f6d0d72a5b8dec210e9c8b9dcf442 Mon Sep 17 00:00:00 2001 From: Rocky Linux Automation <75949597+rockylinux-auto@users.noreply.github.com> Date: Mon, 10 Mar 2025 08:28:38 -0400 Subject: [PATCH 7/9] New translations lab7-bootstrapping-etcd.md (Ukrainian) --- .../lab7-bootstrapping-etcd.uk.md | 94 +++++++++++++++++++ 1 file changed, 94 insertions(+) create mode 100644 docs/labs/kubernetes-the-hard-way/lab7-bootstrapping-etcd.uk.md diff --git a/docs/labs/kubernetes-the-hard-way/lab7-bootstrapping-etcd.uk.md b/docs/labs/kubernetes-the-hard-way/lab7-bootstrapping-etcd.uk.md new file mode 100644 index 0000000000..f47364c745 --- /dev/null +++ b/docs/labs/kubernetes-the-hard-way/lab7-bootstrapping-etcd.uk.md @@ -0,0 +1,94 @@ +--- +author: Wale Soyinka +contributors: Steven Spencer, Ganna Zhyrnova +tags: + - kubernetes + - k8s + - лабораторна вправа +--- + +# Лабораторна робота 7: Завантаження кластера `etcd` + +!!! info + + Це гілка розгалуження від оригінальної ["Kubernetes the hard way"](https://github.com/kelseyhightower/kubernetes-the-hard-way), Келсі Хайтауера (GitHub: kelseyhightower). На відміну від оригіналу, який базується на дистрибутивах, подібних до Debian, для архітектури ARM64, ця гілка націлена на дистрибутиви Enterprise Linux, такі як Rocky Linux, який працює на архітектурі x86_64. + +Компоненти Kubernetes не мають стану та зберігають стан кластера в [etcd](https://github.com/etcd-io/etcd). У цій лабораторній роботі ви завантажите тривузловий кластер `etcd` і налаштуєте його для високої доступності та безпечного віддаленого доступу. + +## Передумови + +Скопіюйте двійкові файли `etcd` і файли модуля `systemd` до примірника `server`: + +```bash +scp \ + downloads/etcd-v3.4.36-linux-amd64.tar.gz \ + units/etcd.service \ + root@server:~/ +``` + +Виконайте команди в наступних розділах цієї лабораторної роботи на машині `server`. Увійдіть на машину `server` за допомогою команди `ssh`. Приклад: + +```bash +ssh root@server +``` + +## Завантаження кластера etcd + +### Встановіть бінарні файли etcd + +Якщо у вас його ще не встановлено, спочатку встановіть утиліту `tar` з `dnf`. Потім розпакуйте та встановіть сервер `etcd` і утиліту командного рядка `etcdctl`: + +```bash + dnf -y install tar + tar -xvf etcd-v3.4.36-linux-amd64.tar.gz + mv etcd-v3.4.36-linux-amd64/etcd* /usr/local/bin/ +``` + +### Налаштуйте сервер etcd + +```bash + mkdir -p /etc/etcd /var/lib/etcd + chmod 700 /var/lib/etcd + cp ca.crt kube-api-server.key kube-api-server.crt \ + /etc/etcd/ +``` + +Кожен член `etcd` повинен мати унікальне ім’я в кластері `etcd`. Встановіть назву `etcd` так, щоб вона збігалася з назвою хоста поточного екземпляра обчислення: + +Створіть файл блоку `etcd.service` `systemd`: + +```bash +mv etcd.service /etc/systemd/system/ +chmod 644 /etc/systemd/system/etcd.service +``` + +!!! Note "Примітка" + + Хоча це вважається поганою формою безпеки, вам, можливо, доведеться тимчасово або назавжди вимкнути SELinux, якщо у вас виникнуть проблеми із запуском служби `etcd` `systemd`. Правильним виправленням є дослідження та створення необхідних файлів політики за допомогою таких інструментів, як `ausearch`, `audit2allow` та інших.\ + + Команди усувають SELinux і вимикають його, виконавши наступне: + + sudo sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config + setenforce 0 + +### Запустіть сервер `etcd` + +```bash + systemctl daemon-reload + systemctl enable etcd + systemctl start etcd +``` + +## Верифікація + +Перелічіть членів кластера `etcd`: + +```bash +etcdctl member list +``` + +```text +6702b0a34e2cfd39, started, controller, http://127.0.0.1:2380, http://127.0.0.1:2379, false +``` + +Далі: [Завантаження площини керування Kubernetes](lab8-bootstrapping-kubernetes-controllers.md) From b99e66720f8d041828728b9849d38be19666af54 Mon Sep 17 00:00:00 2001 From: Rocky Linux Automation <75949597+rockylinux-auto@users.noreply.github.com> Date: Mon, 10 Mar 2025 10:34:57 -0400 Subject: [PATCH 8/9] New translations lab8-bootstrapping-kubernetes-controllers.md (Ukrainian) --- ...bootstrapping-kubernetes-controllers.uk.md | 187 ++++++++++++++++++ 1 file changed, 187 insertions(+) create mode 100644 docs/labs/kubernetes-the-hard-way/lab8-bootstrapping-kubernetes-controllers.uk.md diff --git a/docs/labs/kubernetes-the-hard-way/lab8-bootstrapping-kubernetes-controllers.uk.md b/docs/labs/kubernetes-the-hard-way/lab8-bootstrapping-kubernetes-controllers.uk.md new file mode 100644 index 0000000000..4cdb770a60 --- /dev/null +++ b/docs/labs/kubernetes-the-hard-way/lab8-bootstrapping-kubernetes-controllers.uk.md @@ -0,0 +1,187 @@ +--- +author: Wale Soyinka +contributors: Steven Spencer, Ganna Zhyrnova +tags: + - kubernetes + - k8s + - лабораторна вправа + - kubectl + - etcd + - runc +--- + +# Лабораторна робота 8: Запуск Kubernetes Control Plane + +!!! info + + Це гілка розгалуження від оригінальної ["Kubernetes the hard way"](https://github.com/kelseyhightower/kubernetes-the-hard-way), Келсі Хайтауера (GitHub: kelseyhightower). На відміну від оригіналу, який базується на дистрибутивах, подібних до Debian, для архітектури ARM64, ця гілка націлена на дистрибутиви Enterprise Linux, такі як Rocky Linux, який працює на архітектурі x86_64. + +У цій лабораторній роботі ви завантажите площину керування Kubernetes. Ви встановите такі компоненти на контролері: сервер Kubernetes API, планувальник і диспетчер контролера. + +## Передумови + +Підключіться до `jumpbox` і скопіюйте двійкові файли Kubernetes і файли модуля `systemd` до примірника `server`: + +```bash +scp \ + downloads/kube-apiserver \ + downloads/kube-controller-manager \ + downloads/kube-scheduler \ + downloads/kubectl \ + units/kube-apiserver.service \ + units/kube-controller-manager.service \ + units/kube-scheduler.service \ + configs/kube-scheduler.yaml \ + configs/kube-apiserver-to-kubelet.yaml \ + root@server:~/ +``` + +Ви повинні запустити команди в наступних розділах цієї лабораторної роботи на машині `сервера`. Увійдіть до примірника контролера за допомогою команди `ssh`. Приклад: + +```bash +ssh root@server +``` + +## Надання площини керування Kubernetes + +Створіть каталог конфігурації Kubernetes: + +```bash +mkdir -p /etc/kubernetes/config +``` + +### Встановіть двійкові файли контролера Kubernetes + +Встановіть двійкові файли Kubernetes: + +```bash + chmod +x kube-apiserver \ + kube-controller-manager \ + kube-scheduler kubectl + + mv kube-apiserver \ + kube-controller-manager \ + kube-scheduler kubectl \ + /usr/local/bin/ +``` + +### Налаштуйте сервер API Kubernetes + +```bash + mkdir -p /var/lib/kubernetes/ + + mv ca.crt ca.key \ + kube-api-server.key kube-api-server.crt \ + service-accounts.key service-accounts.crt \ + encryption-config.yaml \ + /var/lib/kubernetes/ +``` + +Створіть одиничний файл `kube-apiserver.service` `systemd`: + +```bash +mv kube-apiserver.service /etc/systemd/system/kube-apiserver.service +``` + +### Налаштуйте менеджер контролера Kubernetes + +Перемістіть kubeconfig `kube-controller-manager` на місце: + +```bash +mv kube-controller-manager.kubeconfig /var/lib/kubernetes/ +``` + +Створіть файл модуля `kube-controller-manager.service` `systemd`: + +```bash +mv kube-controller-manager.service /etc/systemd/system/ +``` + +### Налаштуйте планувальник Kubernetes + +Перемістіть `kube-scheduler` kubeconfig на місце: + +```bash +mv kube-scheduler.kubeconfig /var/lib/kubernetes/ +``` + +Створіть файл конфігурації `kube-scheduler.yaml`: + +```bash +mv kube-scheduler.yaml /etc/kubernetes/config/ +``` + +Створіть системний файл блоку `kube-scheduler.service`: + +```bash +mv kube-scheduler.service /etc/systemd/system/ +``` + +### Запустіть служби контролера + +```bash + systemctl daemon-reload + + systemctl enable kube-apiserver \ + kube-controller-manager kube-scheduler + + systemctl start kube-apiserver \ + kube-controller-manager kube-scheduler +``` + +> Зачекайте до 10 секунд для повної ініціалізації сервера Kubernetes API. + +### Верифікація + +```bash +kubectl cluster-info --kubeconfig admin.kubeconfig +``` + +```text +Kubernetes control plane is running at https://127.0.0.1:6443 +``` + +## RBAC для авторизації Kubelet + +У цьому розділі ви налаштуєте дозволи RBAC, щоб дозволити серверу API Kubernetes отримувати доступ до API Kubelet на кожному робочому вузлі. Доступ до Kubelet API потрібен для отримання показників і журналів, а також для виконання команд у модулях. + +> Цей підручник встановлює прапор Kubelet `--authorization-mode` на `Webhook`. Режим `Webhook` використовує [SubjectAccessReview](https://kubernetes.io/docs/admin/authorization/#checking-api-access) API для визначення авторизації. + +Виконайте команди в цьому розділі на вузлі контролера, впливаючи на весь кластер. + +```bash +ssh root@server +``` + +Створіть `system:kube-apiserver-to-kubelet` [ClusterRole](https://kubernetes.io/docs/admin/authorization/rbac/#role-and-clusterrole) із дозволами на доступ до API Kubelet і виконання найпоширеніших завдань, пов’язаних із керуванням пакетами: + +```bash +kubectl apply -f kube-apiserver-to-kubelet.yaml \ + --kubeconfig admin.kubeconfig +``` + +### Перевірка RBAC + +На даний момент площина керування Kubernetes запущена та працює. Виконайте наступні команди з машини `jumpbox`, щоб переконатися, що вона працює: + +Зробіть HTTP-запит на інформацію про версію Kubernetes: + +```bash +curl -k --cacert ca.crt https://server.kubernetes.local:6443/version +``` + +```text +{ + "major": "1", + "minor": "32", + "gitVersion": "v1.32.0", + "gitCommit": "70d3cc986aa8221cd1dfb1121852688902d3bf53", + "gitTreeState": "clean", + "buildDate": "2024-12-11T17:59:15Z", + "goVersion": "go1.23.3", + "compiler": "gc", + "platform": "linux/amd64" +} +``` + +Далі: [Завантаження робочих вузлів Kubernetes](lab9-bootstrapping-kubernetes-workers.md) From fec0c6f5d7e295809fe15239f94d83d995ac0a9f Mon Sep 17 00:00:00 2001 From: Rocky Linux Automation <75949597+rockylinux-auto@users.noreply.github.com> Date: Mon, 10 Mar 2025 10:34:58 -0400 Subject: [PATCH 9/9] New translations lab9-bootstrapping-kubernetes-workers.md (Ukrainian) --- ...ab9-bootstrapping-kubernetes-workers.uk.md | 201 ++++++++++++++++++ 1 file changed, 201 insertions(+) create mode 100644 docs/labs/kubernetes-the-hard-way/lab9-bootstrapping-kubernetes-workers.uk.md diff --git a/docs/labs/kubernetes-the-hard-way/lab9-bootstrapping-kubernetes-workers.uk.md b/docs/labs/kubernetes-the-hard-way/lab9-bootstrapping-kubernetes-workers.uk.md new file mode 100644 index 0000000000..53756677fd --- /dev/null +++ b/docs/labs/kubernetes-the-hard-way/lab9-bootstrapping-kubernetes-workers.uk.md @@ -0,0 +1,201 @@ +--- +author: Wale Soyinka +contributors: Steven Spencer, Ganna Zhyrnova +tags: + - kubernetes + - k8s + - лабораторна вправа + - runc + - containerd + - etcd + - kubectl +--- + +# Лабораторна робота 9: Завантаження робочих вузлів Kubernetes + +!!! info + + Це гілка розгалуження від оригінальної ["Kubernetes the hard way"](https://github.com/kelseyhightower/kubernetes-the-hard-way), Келсі Хайтауера (GitHub: kelseyhightower). На відміну від оригіналу, який базується на дистрибутивах, подібних до Debian, для архітектури ARM64, ця гілка націлена на дистрибутиви Enterprise Linux, такі як Rocky Linux, який працює на архітектурі x86_64. + +У цій лабораторній роботі ви завантажите два робочі вузли Kubernetes. Ви встановите такі компоненти: [runc](https://github.com/opencontainers/runc), [плагіни мережевих контейнерів](https://github.com/containernetworking/cni), [containerd](https://github.com/containerd/containerd), [kubelet](https://kubernetes.io/docs/admin/kubelet) і [kube-proxy](https://kubernetes.io/docs/concepts/cluster-administration/proxies). + +## Передумови + +З `jumpbox` скопіюйте двійкові файли Kubernetes і файли блоку `systemd` до кожного робочого екземпляра: + +```bash +for host in node-0 node-1; do + SUBNET=$(grep $host machines.txt | cut -d " " -f 5) + sed "s|SUBNET|$SUBNET|g" \ + configs/10-bridge.conf > 10-bridge.conf + + sed "s|SUBNET|$SUBNET|g" \ + configs/kubelet-config.yaml > kubelet-config.yaml + + scp 10-bridge.conf kubelet-config.yaml \ + root@$host:~/ +done +``` + +```bash +for host in node-0 node-1; do + scp \ + downloads/runc.amd64 \ + downloads/crictl-v1.32.0-linux-amd64.tar.gz \ + downloads/cni-plugins-linux-amd64-v1.6.2.tgz \ + downloads/containerd-2.0.3-linux-amd64.tar.gz \ + downloads/kubectl \ + downloads/kubelet \ + downloads/kube-proxy \ + configs/99-loopback.conf \ + configs/containerd-config.toml \ + configs/kubelet-config.yaml \ + configs/kube-proxy-config.yaml \ + units/containerd.service \ + units/kubelet.service \ + units/kube-proxy.service \ + root@$host:~/ +done +``` + +Команди в цій лабораторній роботі потрібно запускати окремо для кожного робочого екземпляра: `node-0` і `node-1`. Показані лише кроки для `node-0`. Ви повинні повторити точні кроки та команди на `node-1`. + +Увійдіть до робочого екземпляра `node-0` за допомогою команди `ssh`. + +```bash +ssh root@node-0 +``` + +## Надання робочого вузла Kubernetes + +Встановіть залежності операційної системи: + +```bash + dnf -y update + dnf -y install socat conntrack ipset tar +``` + +> Двійковий файл `socat` підтримує команду `kubectl port-forward`. + +### Вимкніть Swap + +Якщо ви ввімкнули [swap](https://help.ubuntu.com/community/SwapFaq), kubelet не запуститься. [Рекомендовано вимкнути swap](https://github.com/kubernetes/kubernetes/issues/7294), щоб Kubernetes забезпечував належний розподіл ресурсів і якість обслуговування. + +Перевірте, чи ввімкнено обмін: + +```bash +swapon --show +``` + +Якщо вихідні дані порожні, то обмін не ввімкнено. Якщо вихідні дані не порожні, виконайте таку команду, щоб негайно вимкнути обмін: + +```bash +swapoff -a +``` + +Щоб гарантувати, що підкачка залишиться вимкненою після перезавантаження, закоментуйте рядок, який автоматично монтує том підкачки у файлі `/etc/fstab`. Впишіть: + +```bash +sudo sed -i '/swap/s/^/#/' /etc/fstab +``` + +Створіть каталоги встановлення: + +```bash +mkdir -p \ + /etc/cni/net.d \ + /opt/cni/bin \ + /var/lib/kubelet \ + /var/lib/kube-proxy \ + /var/lib/kubernetes \ + /var/run/kubernetes +``` + +Встановіть робочі двійкові файли: + +```bash + mkdir -p containerd + tar -xvf crictl-v1.32.0-linux-amd64.tar.gz + tar -xvf containerd-2.0.3-linux-amd64.tar.gz -C containerd + tar -xvf cni-plugins-linux-amd64-v1.6.2.tgz -C /opt/cni/bin/ + mv runc.amd64 runc + chmod +x crictl kubectl kube-proxy kubelet runc + mv crictl kubectl kube-proxy kubelet runc /usr/local/bin/ + mv containerd/bin/* /bin/ +``` + +### Налаштуйте мережу CNI + +Створіть файл конфігурації мережі `bridge`: + +```bash +mv 10-bridge.conf 99-loopback.conf /etc/cni/net.d/ +``` + +### Налаштуйте `containerd` + +Встановіть конфігураційні файли `container`: + +```bash + mkdir -p /etc/containerd/ + mv containerd-config.toml /etc/containerd/config.toml + mv containerd.service /etc/systemd/system/ +``` + +### Налаштуйте Kubelet + +Створіть файл конфігурації `kubelet-config.yaml`: + +```bash + mv kubelet-config.yaml /var/lib/kubelet/ + mv kubelet.service /etc/systemd/system/ +``` + +### Налаштуйте проксі Kubernetes + +```bash + mv kube-proxy-config.yaml /var/lib/kube-proxy/ + mv kube-proxy.service /etc/systemd/system/ +``` + +!!! Note "Примітка" + + Хоча це вважається поганою формою безпеки, вам, можливо, доведеться тимчасово або назавжди вимкнути SELinux, якщо у вас виникнуть проблеми із запуском необхідних служб systemd. Правильним рішенням є дослідження та створення необхідних файлів політики за допомогою таких інструментів, як ausearch, audit2allow тощо.\ + + Щоб виправити SELinux із шляху та вимкнути його, запустіть наступне: + + sudo sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config + setenforce 0 + +### Запустіть Worker Services + +```bash + systemctl daemon-reload + systemctl enable containerd kubelet kube-proxy + systemctl start containerd kubelet kube-proxy +``` + +## Верифікація + +Екземпляри обчислень, створені в цьому посібнику, не матимуть дозволу на завершення цього розділу перевірки. Виконайте наступні команди з машини `jumpbox`. + +Перелічіть зареєстровані вузли Kubernetes: + +```bash +ssh root@server "kubectl get nodes --kubeconfig admin.kubeconfig" +``` + +```text +NAME STATUS ROLES AGE VERSION +node-0 Ready 1m v1.32.0 +``` + +Після виконання всіх попередніх кроків у цій лабораторній роботі на `node-0` і `node-1` результат команди `kubectl get nodes` має показати: + +```text +NAME STATUS ROLES AGE VERSION +node-0 Ready 1m v1.32.0 +node-1 Ready 10s v1.32.0 +``` + +Далі: [Налаштування kubectl для віддаленого доступу](lab10-configuring-kubectl.md)