Початок роботи з Kubernetes

Налаштування процесу на Ubuntu

Встановлення Docker

sudo apt install -y docker.io  
sudo systemctl enable docker  
sudo systemctl start docker  
sudo usermod -aG docker $USER

systemctl enable docker: Налаштовує Docker для автоматичного запуску при завантаженні системи.
systemctl start docker: Негайно запускає службу Docker.
usermod: Модифікує налаштування облікового запису користувача. -aG docker: Додає вашого користувача ($USER) до групи docker, надаючи дозволи для виконання команд Docker без необхідності використовувати sudo.

Встановлення інструментів Kubernetes

  1. Встановлення необхідних інструментів
sudo apt install -y snapd  
sudo apt install -y ethtool  
VERSION="v1.32.0"  
wget https://github.com/kubernetes-sigs/cri-tools/releases/download/$VERSION/crictl-$VERSION-linux-amd64.tar.gz  
sudo tar zxvf crictl-$VERSION-linux-amd64.tar.gz -C /usr/local/bin  
rm -f crictl-$VERSION-linux-amd64.tar.gz

Snap — це універсальний менеджер пакетів, який може надавати kubectl, kubeadm та інші інструменти незалежно від традиційних репозиторіїв apt.
ethtool потрібен для керування мережею.
crictl (CRI Command Line Interface) — утиліта для взаємодії з контейнерними середовищами. Деталі можна знайти на https://github.com/kubernetes-sigs/cri-tools

  1. Реєстрація репозиторію Kubernetes
sudo apt-get install -y apt-transport-https ca-certificates curl gnupg  

# Якщо папка `/etc/apt/keyrings` не існує,  
# її слід створити перед виконанням команди curl  
# sudo mkdir -p -m 755 /etc/apt/keyrings  
curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.32/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg  

# дозволяє небезпечним APT-програмам читати цей ключ  
sudo chmod 644 /etc/apt/keyrings/kubernetes-apt-keyring.gpg  

# Ця команда перезаписує будь-яку існуючу конфігурацію в   
# /etc/apt/sources.list.d/kubernetes.list  
echo 'deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.32/deb/ /' | sudo tee /etc/apt/sources.list.d/kubernetes.list  
# допомагає інструментам, таким як command-not-found, працювати коректно  
sudo chmod 644 /etc/apt/sources.list.d/kubernetes.list

apt-transport-https: Дозволяє apt отримувати пакети через HTTPS.
ca-certificates: Підтримує SSL сертифікати для захищеного з'єднання.
curl -fsSL: Завантажує GPG ключ із Kubernetes.

  1. Оновлення та встановлення інструментів Kubernetes
sudo apt update  
sudo apt-get install -y kubectl kubelet kubeadm

kubectl: Інтерфейс командного рядка для керування кластерами Kubernetes.
kubelet: Основний агент, що працює на всіх вузлах кластера для керування подами та контейнерами.
kubeadm: Інструмент для створення та управління Kubernetes кластером.

  1. Встановлення та запуск miniKube

minikube — це локальний Kubernetes, який спрямований на спрощення навчання та розробки для Kubernetes. Останню версію можна знайти тут.

minikube start
  1. Перевірка установки:
kubectl version --client  

Client Version: v1.32.0  
Kustomize Version: v5.5.0  

kubectl get po -A  

NAMESPACE NAME READY STATUS RESTARTS AGE  
kube-system coredns-6f6b679f8f-w7z5q 1/1 Running 0 45m  
kube-system etcd-minikube 1/1 Running 0 45m  
kube-system kube-apiserver-minikube 1/1 Running 0 45m  
kube-system kube-controller-manager-minikube 1/1 Running 0 45m  
kube-system kube-proxy-n6thg 1/1 Running 0 45m  
kube-system kube-scheduler-minikube 1/1 Running 0 45m  
kube-system storage-provisioner 1/1 Running 1 (44m ago) 45m

Налаштування Kubernetes кластера

  1. Вимкнення Swap (необхідно для Kubernetes):
sudo swapoff -a

Ця команда вимикає swap для поточної сесії. Swap буде знову увімкнений після перезавантаження, якщо ви не зміните системні налаштування. Вимкнення swap є обов'язковим для Kubernetes, оскільки планувальник і kubelet припускають повний контроль над системною пам'яттю.
(Додаткову інформацію можна знайти в кінці)

Для локальної розробки можна використовувати Kubernetes зі swap. Однак вам потрібно налаштувати kubelet для використання swap, додавши ці рядки до файлу /var/lib/kubelet/config.yaml:

featureGates:  
 NodeSwap: true  
failSwapOn: false

2. Ініціалізація контрольної плати

sudo kubeadm init --pod-network-cidr=192.168.0.0/16

kubeadm init налаштовує контрольну плиту, включаючи API-сервер, контролер, планувальник та etcd.
Параметр --pod-network-cidr=192.168.0.0/16 вказує діапазон мережевих адрес для Pod. Це необхідно для додатку мережі Pod, щоб керувати мережею між Pod. Точний CIDR залежить від мережевого рішення, яке ви будете використовувати (наприклад, Flannel, Calico).

3. Налаштування kubectl для вашого користувача

mkdir -p $HOME/.kube  
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config  
sudo chown $(id -u):$(id -g) $HOME/.kube/config

kubectl потребує доступу до конфігураційного файлу кластера (admin.conf), щоб спілкуватися з контрольним планом.
Ці команди копіюють конфігураційний файл до домашнього каталогу користувача та налаштовують правильні дозволи, що дозволяє використовувати kubectl без необхідності кожного разу застосовувати sudo.

Чому Kubernetes потребує вимкнення swap

Точне управління ресурсами:

  • Kubernetes керує Pod і їхнім розподілом ресурсів (CPU та пам'ять) за допомогою cgroups. Ці cgroups накладають обмеження на пам'ять для контейнерів.
  • Swap може порушити обмеження пам'яті cgroup, оскільки система може перемістити пам'ять до swap, замість того щоб накладати обмеження, що може призвести до непередбачуваної поведінки.

Продуктивність і стабільність:

  • Kubernetes очікує, що використання пам'яті на вузлі буде відображати фактичне використання без накладних витрат swap. Swap може погіршити продуктивність, вводячи затримки в доступі до пам'яті, що може призвести до тайм-аутів додатків або відмов в умовах обмежених ресурсів.

Поведінка при вичерпанні пам'яті (OOM):

  • Kubernetes покладається на Linux OOM killer для завершення Pod, коли пам'ять вичерпано. Якщо swap увімкнено, система може затримати виклик OOM killer, використовуючи swap-простір, що може призвести до нестабільності кластера.

Кращі практики для вузлів кластера:

  • Вузли Kubernetes для виробничого середовища зазвичай мають достатньо фізичної пам'яті, що усуває необхідність в swap. Очікується, що вузли мають ретельно сплановане та монітороване використання пам'яті, кероване самим Kubernetes.

Перекладено з: Getting started with Kubernetes

Leave a Reply

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