Вітаю всіх! У захваті від того, що вперше ділюсь статтею на Medium, я хочу поділитись кроками з ручної установки такої потужної технології, як Kubernetes. Звідки це виникло, запитаєте ви? Мене попросили зробити це як задачу в одній вакансії, я спробував, і хоч результат вийшов не дуже, але все ж хочу поділитись досвідом, щоб у вас був якийсь плюс у цій темі.
До речі, ця стаття стосується саме ручної установки Kubernetes кластера на сервер, а також налаштувань. Якщо ваша мета лише швидко встановити Kubernetes і почати працювати, я рекомендую вам скористатися інструментами Kubernetes, які пропонують GCP або AWS.
Що таке Kubernetes?
Kubernetes — це платформа для оркестрації контейнерів, розроблена Google і наразі доступна як проект з відкритим кодом. Під час розробки додатків стало популярним запускати їх у контейнерах. Але ефективно управляти, моніторити і масштабувати ці контейнери може бути складно. Ось тут і вступає в гру Kubernetes.
Kubernetes полегшує управління, розгортання та масштабування контейнеризованих додатків. Ця платформа працює як в локальних дата-центрах, так і в хмарі, і є ідеальним інструментом для великих і мікросервісних архітектур.
Коротко кажучи, Kubernetes значно спрощує управління контейнеризованими додатками. Це незамінний інструмент для мікросервісних архітектур, обробки великих даних та хмарних додатків.
Архітектурна діаграма Kubernetes
1. Вимоги
Для встановлення Kubernetes кластера спершу потрібна операційна система на базі Linux. Я використав Ubuntu 20.04 LTS, але ви можете здійснити установку і на інших дистрибутивах Linux за подібними кроками. Для Kubernetes вам знадобиться мінімум два сервери: один Master Node та один Worker Node. Master Node керуватиме кластером, а на Worker Node працюватимуть додатки в контейнерах (pod).
Звідки ж ми візьмемо ці сервери? Я буду використовувати GCP (Google Cloud Platform). Звичайно, я витрачаю безкоштовний кредит, який вони мені надали. Давайте відкриємо два сервери і налаштуємо їх. Є кілька дрібних нюансів, про які я, можливо, розповім в іншій статті. Якщо сервери вже налаштовані, переходимо до наступного кроку.
2. Встановлення Kubernetes
Спочатку потрібно встановити деякі залежності на сервери. Для обох серверів виконайте наступні команди, щоб встановити необхідні пакети. (Процес однаковий для обох серверів, але я розгляну відмінності на наступних етапах).
sudo apt update
sudo apt-get update && sudo apt-get install -y ca-certificates curl gnupg lsb-release apt-transport-https
Тепер додаємо репозиторій Kubernetes на сервер.
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
Додаємо репозиторій Kubernetes в систему.
echo "deb https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list
Ось альтернативний код, якщо під час встановлення виникнуть проблеми — вам потрібно буде вручну видалити kubernetes.list і додати наступну команду:
sudo mkdir -p -m 755 /etc/apt/keyrings
echo "deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.31/deb/ /" | sudo tee /etc/apt/sources.list.d/kubernetes.list
Якщо ми успішно додали репозиторії, перевіримо налаштування, виконавши команду оновлення та встановлення.
Вітаю всіх! У захваті від того, що вперше публікую статтю на Medium, хочу поділитись кроками ручної установки такої потужної технології, як Kubernetes. Звідки це виникло, запитаєте ви? Я отримав задачу у вакансії, спробував зробити, і хоча результат не зовсім вдалий, хочу поділитись досвідом, щоб ви могли отримати щось корисне.
До речі, ця стаття стосується саме ручної установки Kubernetes кластеру на сервер і налаштувань. Якщо ваша мета лише швидко налаштувати Kubernetes та почати працювати, раджу скористатись інструментами Kubernetes, що пропонують GCP або AWS.
Що таке Kubernetes?
Kubernetes — це платформа для оркестрації контейнерів, розроблена Google і наразі доступна як проект з відкритим кодом. Під час розробки додатків стало популярним запускати їх у контейнерах. Але ефективно управляти, моніторити і масштабувати ці контейнери може бути складно. Ось тут і вступає в гру Kubernetes.
Kubernetes полегшує управління, розгортання та масштабування контейнеризованих додатків. Ця платформа працює як в локальних дата-центрах, так і в хмарі, і є ідеальним інструментом для великих і мікросервісних архітектур.
Коротше кажучи, Kubernetes значно спрощує управління контейнеризованими додатками. Це незамінний інструмент для мікросервісних архітектур, обробки великих даних та хмарних додатків.
Архітектурна діаграма Kubernetes
1. Вимоги
Для того, щоб встановити Kubernetes кластер, вам знадобиться операційна система на базі Linux. Я використав Ubuntu 20.04 LTS, але ви можете виконати установку й на інших дистрибутивах Linux за подібними кроками. Для Kubernetes вам знадобиться мінімум два сервери: один Master Node і один Worker Node. Master Node керуватиме кластером, а на Worker Node працюватимуть додатки в контейнерах (pod).
Звідки ж ми візьмемо ці сервери? Я буду використовувати GCP (Google Cloud Platform). Звичайно, витрачаю безкоштовний кредит, який вони мені надали. Давайте відкриємо два сервери і налаштуємо їх. Є кілька дрібних нюансів, про які я, можливо, розповім в іншій статті. Якщо сервери вже налаштовані, переходимо до наступного етапу.
2. Встановлення Kubernetes
Спочатку потрібно встановити деякі залежності на сервери. Для обох серверів виконайте наступні команди, щоб встановити необхідні пакети. (Процес однаковий для обох серверів, але я покажу відмінності на наступних етапах.)
sudo apt update
sudo apt-get update && sudo apt-get install -y ca-certificates curl gnupg lsb-release apt-transport-https
Тепер давайте додамо репозиторій Kubernetes на сервер.
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
Додаємо репозиторій Kubernetes в систему.
echo "deb https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list
Ось альтернативний код, якщо під час установки виникнуть проблеми — вам потрібно буде вручну видалити kubernetes.list і додати наступну команду:
sudo mkdir -p -m 755 /etc/apt/keyrings
echo "deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.31/deb/ /" | sudo tee /etc/apt/sources.list.d/kubernetes.list
Тепер, коли ми додали репозиторії, перевіримо налаштування, виконавши команду оновлення та встановлення.
При установці, будь ласка, переконайтесь, що Kubernetes встановлено коректно, це можна перевірити через логи Kubernetes.
sudo apt update
sudo apt install -y kubeadm kubelet kubectl
Якщо встановлення завершене, ви можете перевірити його, виконуючи нижчевказану команду, але не забувайте про попереднє зауваження.
kubeadm version
Є ще одна річ, яку потрібно зробити — вимкнути swap. Що таке swap? Це диск, який використовується, коли недостатньо RAM. Коли swap увімкнено, Kubernetes не може управляти і контролювати систему. Тому давайте вимкнемо swap для Kubernetes. Крім того, щоб swap не увімкнувся після перезавантаження сервера, введіть наступну команду.
sudo swapoff -a //Вимикає swap до наступного перезавантаження.
sudo nano /etc/fstab //Відкриває цей файл, щоб закоментувати рядок з swap, щоб вимкнути його назавжди.
На цьому етапі ми завершили налаштування для Worker Node, а тепер продовжуємо з Master Node.
2.1. Установка Master Node
Щоб налаштувати Master Node, треба виконати наступну команду. Ця команда ініціалізує Kubernetes і створить кластер.
sudo kubeadm init --pod-network-cidr 192.168.0.0/16
Після успішного завершення цього процесу, у логах з’являться важливі повідомлення для нас. У виводі є команда, яка починається з "kubeadm join" — це ключ для підключення вашого Worker Node. Також є кілька кроків для налаштування доступу, які можуть відрізнятися залежно від версії Kubernetes, тому найкраще слідувати виводу. Два головних кроки: скопіювати команду з "kubeadm join" та виконати наступні команди:
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
Ще один важливий крок — для взаємодії між pod’ами потрібно встановити мережевий плагін. Є багато варіантів, таких як Flannel чи Calico, але я вибрав Calico.
kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml
Якщо ви не впевнені, що мережевий плагін був правильно встановлений або щось пішло не так, ви можете перезавантажити Kubernetes за допомогою наступних команд.
sudo systemctl restart kubelet
systemctl status kubelet
2.2. Установка Worker Node
На стороні Worker Node є лише один крок — вставити код, який дається для підключення до кластеру. Після цього, якщо підключення успішне, перейдіть до Master Node і виконайте наступну команду, щоб перевірити, чи ваш Worker Node з'явився в кластері.
kubectl get nodes
Ця команда виведе список усіх node в кластері. Якщо поруч з вашим Worker Node написано "Ready", це означає, що все успішно і ваш оркестратор готовий до роботи. Вітаємо!
3. Тестування Kubernetes Кластера
Звісно, після всіх цих налаштувань варто провести тестування. Ми були в командному рядку і не бачили конкретного результату, тому спробуємо запустити nginx-сервіс. Створимо деплоймент.
kubectl create deployment nginx --image=nginx
Тепер треба перевірити, чи було створено pod. Для зручності я поділюсь виводом, де показано як pod'и, так і nodes.
Виведення pod’ів та нод.
Щоб зробити наш nginx доступним ззовні, потрібно відкрити доступ.
kubectl expose deployment nginx --type=NodePort --port=80 --node-port=30007
Тепер, якщо все правильно налаштовано, ви зможете отримати доступ до nginx. Для цього вам потрібно буде створити URL за наступним шаблоном:
http://<Node_IP>:<Node_Port>
Що таке Node IP і Node Port? Node IP — це зовнішня IP-адреса вашого Worker Node.
При установці, будь ласка, переконайтесь, що Kubernetes було встановлено коректно, це можна перевірити через логи Kubernetes.
sudo apt update
sudo apt install -y kubeadm kubelet kubectl
Якщо встановлення завершено, ви можете перевірити його, виконавши наступну команду, але не забувайте про попереднє зауваження.
kubeadm version
Є ще одна річ, яку треба зробити — вимкнути swap. Що таке swap? Це диск, що використовується, коли RAM недостатньо. Коли swap увімкнено, Kubernetes не може контролювати систему. Тому давайте вимкнемо swap для Kubernetes. Крім того, щоб swap не увімкнувся після перезавантаження сервера, введіть наступну команду.
sudo swapoff -a //Вимикає swap до наступного перезавантаження.
sudo nano /etc/fstab //Відкриває цей файл, щоб закоментувати рядок з swap, щоб вимкнути його назавжди.
На цьому етапі ми завершили налаштування для Worker Node, а тепер продовжуємо з Master Node.
2.1. Установка Master Node
Щоб налаштувати Master Node, треба виконати наступну команду. Ця команда ініціалізує Kubernetes і створить кластер.
sudo kubeadm init --pod-network-cidr 192.168.0.0/16
Після успішного завершення цього процесу у логах з’являться важливі повідомлення для нас. Вивід містить команду, що починається з "kubeadm join" — це ключ для підключення вашого Worker Node. Також є кілька кроків для налаштування доступу, які можуть відрізнятися залежно від версії Kubernetes, тому найкраще слідувати виводу. Два головних кроки: скопіювати команду з "kubeadm join" та виконати наступні команди:
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
Ще один важливий крок — для взаємодії між pod’ами потрібно встановити мережевий плагін. Є багато варіантів, таких як Flannel чи Calico, але я вибрав Calico.
kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml
Якщо ви не впевнені, що мережевий плагін було правильно встановлено, або щось пішло не так, ви можете перезавантажити Kubernetes за допомогою наступних команд.
sudo systemctl restart kubelet
systemctl status kubelet
2.2. Установка Worker Node
На стороні Worker Node є лише один крок — вставити код, що дається для підключення до кластеру. Після цього, якщо підключення успішне, перейдіть до Master Node і виконайте наступну команду, щоб перевірити, чи ваш Worker Node з'явився в кластері.
kubectl get nodes
Ця команда виведе список усіх node в кластері. Якщо поруч з вашим Worker Node написано "Ready", це означає, що все успішно і ваш оркестратор готовий до роботи. Вітаємо!
3. Тестування Kubernetes Кластера
Звісно, після всіх цих налаштувань варто провести тестування. Ми були в командному рядку і не бачили конкретного результату, тому спробуємо запустити nginx-сервіс. Створимо деплоймент.
kubectl create deployment nginx --image=nginx
Тепер треба перевірити, чи було створено pod. Для зручності я поділюсь виводом, де показано як pod'и, так і nodes.
Виведення pod’ів та нод.
Щоб зробити наш nginx доступним ззовні, потрібно відкрити доступ.
kubectl expose deployment nginx --type=NodePort --port=80 --node-port=30007
Тепер, якщо все правильно налаштовано, ви зможете отримати доступ до nginx. Для цього вам потрібно буде створити URL за наступним шаблоном:
http://<Node_IP>:<Node_Port>
Що таке Node IP і Node Port? Node IP — це зовнішня IP-адреса вашого Worker Node.
Node-port — це порт, на якому працює образ nginx. Якщо ви уважно подивилися на код вище, то я встановив node-port на 30007. Звісно, ви можете встановити свій власний порт. Але якщо ви встановили, а тепер не можете знайти, не переживайте, просто подивіться на сервіси. Ось як це зробити. Зараз я покажу вам приклад виводу.
Тепер, коли ви побачили наш порт, ви зможете побачити сторінку за замовчуванням nginx, надіславши запит на URL.
4. Завершення
Я намагався пояснити, як встановити та використовувати Kubernetes (k8s). Якщо ви дійшли до цього етапу, значить, ви вже вирішили чимало проблем. Це може бути складно, але якщо k8s — це океан, то ми тільки занурили ноги. Однак ви звикнете до прохолоди води, і з часом вам буде набагато легше рухатись вперед. Я теж зараз на цьому етапі, далі вас чекають такі функції як ingress, configmaps, persistent volumes, secrets. Для моніторингу вашої інфраструктури ви можете використовувати такі інструменти, як Grafana або Lens.
Це була моя перша стаття, сподіваюся, я знайду мотивацію написати більше. Якщо цей матеріал був корисний для вас, я буду дуже радий!
Дякую!
Node-port — це порт, на якому працює образ nginx. Якщо ви уважно подивилися на код вище, то я встановив node-port на 30007. Звісно, ви можете встановити свій власний порт. Але якщо ви встановили, а тепер не можете знайти, не переживайте, просто подивіться на сервіси. Ось як це зробити. Зараз я покажу вам приклад виводу.
Тепер, коли ви побачили наш порт, ви зможете побачити сторінку за замовчуванням nginx, надіславши запит на URL.
4. Завершення
Я намагався пояснити, як встановити та використовувати Kubernetes (k8s). Якщо ви дійшли до цього етапу, значить, ви вже вирішили чимало проблем. Це може бути складно, але якщо k8s — це океан, то ми тільки занурили ноги. Однак ви звикнете до прохолоди води, і з часом вам буде набагато легше рухатись вперед. Я теж зараз на цьому етапі, далі вас чекають такі функції як ingress, configmaps, persistent volumes, secrets. Для моніторингу вашої інфраструктури ви можете використовувати такі інструменти, як Grafana або Lens.
Це була моя перша стаття, сподіваюся, я знайду мотивацію написати більше. Якщо цей матеріал був корисний для вас, я буду дуже радий!
Дякую!
Перекладено з: Adım Adım Kubernetes Kurulumu ve Yapılandırması