Крок за кроком установка та налаштування Kubernetes

Всім привіт!

Перебуваючи в збудженні від того, що вперше публікую статтю на Medium, хочу поділитися з вами кроками для ручної установки такої потужної технології, як Kubernetes. Якщо ви запитаєте, чому я це роблю, то скажу, що під час подачі заявки на одну вакансію мені запропонували виконати таке завдання. Я зробив це, з усіма труднощами, але результат був не зовсім вражаючий 🙂 Але, принаймні, для мене це можливість поділитися процесом, щоб в майбутньому він став корисним.

Ця стаття описує процес установки Kubernetes-кластера та налаштування на сервері вручну. Якщо ваша мета лише швидко встановити та використовувати Kubernetes, я б рекомендував скористатися інструментами Kubernetes від GCP або AWS.

Що таке Kubernetes?

Kubernetes — це система оркестрації контейнерів, розроблена Google і на даний момент доступна як відкритий код. В останні роки стало популярним запускати додатки в контейнерах. Але ефективне управління, моніторинг і масштабування цих контейнерів може бути складним завданням. І ось тут на допомогу приходить Kubernetes.

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

Підсумовуючи, Kubernetes значно спрощує управління контейнеризованими додатками. Це незамінний інструмент для мікросервісних архітектур, обробки великих даних та хмарних додатків.

pic

Архітектурна діаграма Kubernetes

1. Вимоги

Для встановлення Kubernetes-кластера вам спочатку потрібно мати сервер з операційною системою на базі Linux. В даному проекті я використовував Ubuntu 20.04 LTS, але з подібними кроками ви можете встановити Kubernetes і на інших дистрибутивах Linux. Для Kubernetes вам буде потрібно мінімум два сервери: один — Master Node, а інший — Worker Node. Master Node керує кластером, а на Worker Node будуть працювати поди додатків.

Тепер питання: де взяти сервери? У цьому процесі я використовую 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

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

sudo apt update  
sudo apt install -y kubeadm kubelet kubectl

Після завершення встановлення, ви можете перевірити конфігурацію, використавши наступну команду, але не забувайте про попереднє зауваження.

kubeadm version

Є ще одна річ, яку потрібно зробити — вимкнути swap. Що таке swap? Це диск, що використовується у випадках, коли оперативної пам'яті не вистачає. Якщо swap увімкнено, Kubernetes не може взяти під контроль і керувати системою. Тому давайте довіримо Kubernetes і вимкнемо swap. Крім того, щоб після перезавантаження серверу swap не включався автоматично, введіть наступну команду.

sudo swapoff -a //Це вимкне swap лише на один раз до перезавантаження.  
sudo nano /etc/fstab //Відкриємо цей файл і закоментуємо рядок із swap, щоб він завжди був вимкнений.

До цього моменту ми виконали налаштування для Worker Node і Master 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 до кластера, а також є додаткові налаштування для авторизації. Ці налаштування можуть змінюватися залежно від версії, тому найкраще орієнтуватися на виведення цієї команди. Наші два кроки: скопіювати рядок, що починається з 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 потрібно просто виконати код, наданий для підключення до кластеру. Після цього, якщо з'єднання успішне, ви зможете побачити Worker Node у списку, виконавши наступну команду на Master Node.

kubectl get nodes

Ця команда виведе список всіх node у кластері. Якщо біля вашого Worker Node написано "Ready", значить все успішно, і ваш оркестратор готовий до роботи. Вітаємо!

3. Тестування Kubernetes Cluster

Звісно, після всього цього налаштування, необхідно перевірити, чи все працює. Ми ж весь час працювали в чорному терміналі і не бачили реальних результатів. Наприклад, можна підняти nginx сервіс. Створимо деплоймент:

kubectl create deployment nginx --image=nginx

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

pic

Перегляд pod'ів та node'ів.

Щоб відкрити наш 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. Ви можете налаштувати його під себе, звісно. Але якщо ви зробили це, а тепер не можете знайти чи отримати доступ, я рекомендую вам перевірити список сервісів. Ось як це можна зробити. Дозвольте показати приклад.

pic

Тепер, коли ви побачили свій порт, ви можете здійснити запит до URL і побачити стандартну сторінку nginx.

4. Завершення

Я намагався розповісти, як встановити і використовувати k8s. Якщо ви дійшли до цього етапу, це означає, що ви вже вирішили чимало помилок. Встановлювати складно, але якщо Kubernetes — це море, то на даний момент ми лише пірнали до колін. Але ви звикли до холоду води і тепер, впевнений, легко просуватиметесь далі. Я теж зараз на цьому етапі, і далі ми побачимо такі можливості, як ingress, configmaps, persistent volumes, secrets. Для моніторингу вашої інфраструктури можна використовувати такі інструменти, як Grafana чи Lens.

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

Дякую..

Перекладено з: Adım Adım Kubernetes Kurulumu ve Yapılandırması

Leave a Reply

Your email address will not be published. Required fields are marked *