Налаштування процесу на 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
- Встановлення необхідних інструментів
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
- Реєстрація репозиторію 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.
- Оновлення та встановлення інструментів Kubernetes
sudo apt update
sudo apt-get install -y kubectl kubelet kubeadm
kubectl
: Інтерфейс командного рядка для керування кластерами Kubernetes.
kubelet
: Основний агент, що працює на всіх вузлах кластера для керування подами та контейнерами.
kubeadm
: Інструмент для створення та управління Kubernetes кластером.
- Встановлення та запуск miniKube
minikube — це локальний Kubernetes, який спрямований на спрощення навчання та розробки для Kubernetes. Останню версію можна знайти тут.
minikube start
- Перевірка установки:
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 кластера
- Вимкнення 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