Інформація в цьому документі може бути застарілою
Дата оновлення цього документа старіша за оригінал, можливо інформація в ньому застаріла. Радимо ознайомитись з оригіналом англійською для отримання найсвіжіших відомостей: Installing kubeadm
Встановлення kubeadm
Ця сторінка показує, як встановити інструменти kubeadm
. Для отримання інформації щодо того, як створити кластер за допомогою kubeadm після виконання цього процесу встановлення, див. сторінку Створення кластера за допомогою kubeadm.
Інструкція з встановлення стосується Kubernetes v1.31. Якщо ви хочете використовувати іншу версію Kubernetes, перегляньте натомість такі сторінки:
Перш ніж ви розпочнете
- У вас має бути сумісний хост на основі Linux. Проєкт Kubernetes надає загальні інструкції для дистрибутивів Linux, зокрема на базі Debian та Red Hat, а також для дистрибутивів без менеджера пакетів.
- 2 ГБ або більше оперативної памʼяті на кожній машині (менше може залишити мало місця для ваших застосунків).
- 2 процесори або більше для машин панелі управління.
- Повноцінне мережеве зʼєднання між усіма машинами в кластері (публічна чи приватна мережа підходить).
- Унікальні імена хостів, MAC-адреси та product_uuid для кожного вузла. Див. тут для отримання докладнішої інформації.
- Відкриті певні порти на ваших машинах. Див. тут для отримання докладнішої інформації.
Примітка:
Встановлення за допомогоюkubeadm
виконується за допомогою бінарних файлів, які використовують динамічне звʼязування та передбачають, що ваша цільова система надає бібліотеку glibc
. Це припущення стосується багатьох дистрибутивів Linux (включаючи Debian, Ubuntu, Fedora, CentOS і т. д.), але не завжди відповідає дійсності у випадку власних та легких дистрибутивів, які типово не включають glibc
, наприклад, Alpine Linux. Очікується, що дистрибутив включає або шар сумісності, який забезпечує необхідні символи, або glibc
.Перевірка унікальності MAC-адрес та product_uuid для кожного вузла
- Ви можете отримати MAC-адресу мережевих інтерфейсів за допомогою команди
ip link
абоifconfig -a
. - product_uuid можна перевірити за допомогою команди
sudo cat /sys/class/dmi/id/product_uuid
.
Ймовірно, що апаратні пристрої матимуть унікальні адреси, хоча деякі віртуальні машини можуть мати ідентичні значення. Kubernetes використовує ці значення для унікальної ідентифікації вузлів в кластері. Якщо ці значення не є унікальними для кожного вузла, процес встановлення може завершитися невдачею.
Перевірка мережевих адаптерів
Якщо у вас є більше одного мережевого адаптера і компоненти Kubernetes недоступні за стандартним маршрутом, ми рекомендуємо додати IP-маршрут(и), щоб адреси кластера Kubernetes відповідали конкретному адаптеру.
Перевірка необхідних портів
Ці необхідні порти повинні бути відкриті для взаємодії компонентів Kubernetes між собою. Ви можете використовувати інструменти, такі як netcat, щоб перевірити, чи відкритий порт. Наприклад:
nc 127.0.0.1 6443 -v
Мережевий втулок Podʼа, який ви використовуєте, також може вимагати, щоб певні порти були відкриті. Оскільки це відрізняється для кожного мережевого втулка, будь ласка, перегляньте їх документацію про те, які порти їм потрібні.
Конфігурація swap
Стандартно kubelet не запускається, якщо на вузлі виявлено swap-памʼять. Це означає, що swap слід або вимкнути, або дозволити його використання kubelet.
- Щоб дозволити swap, додайте
failSwapOn: false
до конфігурації kubelet або як аргумент командного рядка. Примітка: навіть якщо вказаноfailSwapOn: false
, робочі навантаження не матимуть стандартно доступу до swap. Це можна змінити, встановивши параметрswapBehavior
, знову ж таки в конфігураційному файлі kubelet. Для використання swap, встановіть значенняswapBehavior
інше ніж стандартне налаштуванняNoSwap
. Докладніше дивіться у розділі Управління памʼяттю swap. - Щоб вимкнути swap, можна використовувати команду
sudo swapoff -a
для тимчасового відключення swap. Щоб зробити цю зміну постійною після перезавантаження, переконайтеся, що swap вимкнено у конфігураційних файлах, таких як/etc/fstab
,systemd.swap
, залежно від того, як це налаштовано у вашій системі.
Встановлення середовища виконання контейнерів
Для запуску контейнерів у Pod, Kubernetes використовує середовище виконання контейнерів.
Стандартно Kubernetes використовує Container Runtime Interface (CRI), щоб взаємодіяти з обраним середовищем.
Якщо ви не вказуєте середовище виконання, kubeadm
автоматично намагається виявити встановлене середовище виконання контейнерів, скануючи список відомих точок доступу.
Якщо виявлено кілька або жодного середовища виконання контейнерів, kubeadm
повідомить про помилку та запросить вас вказати, яке середовище ви хочете використовувати.
Дивіться середовища виконання контейнерів для отримання додаткової інформації.
Примітка:
Рушій Docker не має реалізації CRI, що є вимогою для роботи контейнерного середовища в Kubernetes. З цього приводу слід встановити додатковий сервіс cri-dockerd.cri-dockerd
— це проєкт, побудований на основі колишньої вбудованої підтримки Docker Engine, яка була вилучена з kubelet у версії 1.24.Наведені нижче таблиці містять відомі точки доступу для підтримуваних операційних систем:
Середовище виконання | Шлях до Unix socket |
---|---|
containerd | unix:///var/run/containerd/containerd.sock |
CRI-O | unix:///var/run/crio/crio.sock |
Docker Engine (з cri-dockerd) | unix:///var/run/cri-dockerd.sock |
Середовище виконання | Шлях до іменованого pipe Windows |
---|---|
containerd | npipe:////./pipe/containerd-containerd |
Docker Engine (з cri-dockerd) | npipe:////./pipe/cri-dockerd |
Встановлення kubeadm, kubelet та kubectl
Ви повинні встановити ці пакунки на всіх своїх машинах:
kubeadm
: команда для ініціалізації кластера.kubelet
: компонент, який працює на всіх машинах у вашому кластері та виконує такі дії, як запуск підсистем та контейнерів.kubectl
: утиліта командного рядка для взаємодії з вашим кластером.
kubeadm не буде встановлювати або керувати kubelet
або kubectl
за вас, тому вам потрібно забезпечити відповідність їх версії панелі управління Kubernetes, яку ви хочете, щоб kubeadm
встановив для вас. Якщо цього не зробити, існує ризик змішування версій, що може призвести до непередбачуваної та неправильної роботи. Однак одина невелика розбіжність між kubelet
та панеллю управління підтримується, але версія kubelet
ніколи не повинна перевищувати версію API сервера. Наприклад, kubelet
версії 1.7.0 буде повністю сумісний з API-сервером версії 1.8.0, але не навпаки.
Щодо інформації про встановлення kubectl
, див. Встановлення та налаштування kubectl.
Попередження:
Ці інструкції виключають усі пакунки Kubernetes з будь-яких оновлень системи. Це через те, щоkubeadm
та Kubernetes вимагають спеціальної уваги під час оновлення.Докладніше про відмінності версій:
apt.kubernetes.io
та yum.kubernetes.io
) визнані
застарілими та заморожені станом на 13 вересня 2023.
Використання нових репозиторіїв пакунків, розміщених за адресою pkgs.k8s.io`,
настійно рекомендується і є обовʼязковим для встановлення версій Kubernetes, випущених після 13 вересня 2023 року.
Застарілі репозиторії та їхні вміст можуть бути видалені у будь-який момент у майбутньому і без попереднього повідомлення.
Нові репозиторії пакунків надають можливість завантаження версій Kubernetes, починаючи з v1.24.0.Примітка:
Є окремий репозиторій пакунків для кожної мінорної версії Kubernetes. Якщо ви хочете встановити іншу мінорну версію, крім v1.31, див. посібник з встановлення для бажаної мінорної версії.Ці інструкції для Kubernetes v1.31.
Оновіть індекс пакунків
apt
та встановіть пакунки, необхідні для використання репозитарію Kubernetesapt
:sudo apt-get update # apt-transport-https може бути фіктивним пакунком; якщо це так, ви можете пропустити цей крок sudo apt-get install -y apt-transport-https ca-certificates curl gpg
Завантажте публічний ключ підпису для репозиторіїв пакунків Kubernetes. Той самий ключ підпису використовується для всіх репозитаріїв, тому ви можете ігнорувати версію в URL:
# Якщо каталог `/etc/apt/keyrings` не існує, його слід створити до команди curl, прочитайте нижче наведене примітку. # sudo mkdir -p -m 755 /etc/apt/keyrings curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.31/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg
Примітка:
У випусках старших за Debian 12 та Ubuntu 22.04 теки/etc/apt/keyrings
типово не існує, її слід створити до команди curl.Додайте відповідний репозиторій Kubernetes
apt
. Зверніть увагу, що цей репозиторій містить пакунки лише для Kubernetes 1.31; для інших мінорних версій Kubernetes вам потрібно змінити мінорну версію Kubernetes в URL так, щоб вона відповідала вашій бажаній мінорній версії (також перевірте, чи ви ознайомились з документацією для версії Kubernetes, яку ви плануєте встановити).# Це перезаписує будь-яку наявну конфігурацію в /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.31/deb/ /' | sudo tee /etc/apt/sources.list.d/kubernetes.list
Оновіть індекс пакунків
apt
, встановіть kubelet, kubeadm та kubectl, та зафіксуйте їх версію:sudo apt-get update sudo apt-get install -y kubelet kubeadm kubectl sudo apt-mark hold kubelet kubeadm kubectl
(Опціонально) Увімкніть kublet перед запуском kubeadm:
sudo systemctl enable --now kubelet
Встановіть SELinux у режим
permissive
:Ці інструкції для Kubernetes 1.31.
# Встановити SELinux у режим `permissive` (фактично відключити його) sudo setenforce 0 sudo sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config
Увага:
- Встановлення SELinux у режим
permissive
за допомогою виконанняsetenforce 0
таsed ...
фактично його вимикає. Це необхідно для того, щоб дозволити контейнерам отримувати доступ до файлової системи хосту, наприклад, деякі мережеві застосунки кластера вимагають цього. Ви повинні зробити це до тих пір, поки підтримка SELinux не буде покращена в kubelet. - Ви можете залишити увімкненим SELinux, якщо ви знаєте, як його налаштувати, але це може вимагати налаштувань, які не підтримуються kubeadm.
Додайте репозиторій Kubernetes
yum
. Параметрexclude
в визначенні репозиторію забезпечує, що пакунки, повʼязані з Kubernetes, не оновлюються при виконанніyum update
, оскільки є спеціальна процедура, якої слід дотримуватися для оновлення Kubernetes. Зверніть увагу, що цей репозиторій має пакунки лише для Kubernetes v1.31; для інших мінорних версій Kubernetes вам потрібно змінити мінорну версію Kubernetes в URL так, щоб вона відповідала вашій бажаній мінорній версії (також перевірте, чи ви ознайомились з документацією для версії Kubernetes, яку ви плануєте встановити).# Це перезаписує будь-яку існуючу конфігурацію в /etc/yum.repos.d/kubernetes.repo cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo [kubernetes] name=Kubernetes baseurl=https://pkgs.k8s.io/core:/stable:/v1.31/rpm/ enabled=1 gpgcheck=1 gpgkey=<https://pkgs.k8s.io/core:/stable:/v1.31/rpm/repodata/repomd.xml.key exclude=kubelet kubeadm kubectl cri-tools kubernetes-cni EOF
Встановіть kubelet, kubeadm та kubectl, та активуйте kubelet:
sudo yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes
(Опціонально) Увімкніть kubelet перед запуском kubeadm:
sudo systemctl enable --now kubelet
Встановіть втулки CNI (необхідно для більшості мережевих підсистем):
CNI_PLUGINS_VERSION="v1.3.0"
ARCH="amd64"
DEST="/opt/cni/bin"
sudo mkdir -p "$DEST"
curl -L "https://github.com/containernetworking/plugins/releases/download/${CNI_PLUGINS_VERSION}/cni-plugins-linux-${ARCH}-${CNI_PLUGINS_VERSION}.tgz" | sudo tar -C "$DEST" -xz
Визначте теку для завантаження файлів команд:
Примітка:
ЗміннаDOWNLOAD_DIR
повинна бути встановлена на теку з правами на запис. Якщо ви використовуєте Flatcar Container Linux, встановіть DOWNLOAD_DIR="/opt/bin"
.DOWNLOAD_DIR="/usr/local/bin"
sudo mkdir -p "$DOWNLOAD_DIR"
Встановіть crictl (необхідно для взаємодії з Container Runtime Interface (CRI), необовʼязково для kubeadm):
CRICTL_VERSION="v1.31.0"
ARCH="amd64"
curl -L "https://github.com/kubernetes-sigs/cri-tools/releases/download/${CRICTL_VERSION}/crictl-${CRICTL_VERSION}-linux-${ARCH}.tar.gz" | sudo tar -C $DOWNLOAD_DIR -xz
Встановіть kubeadm
, kubelet
та додайте службу kubelet
systemd:
RELEASE="$(curl -sSL https://dl.k8s.io/release/stable.txt)"
ARCH="amd64"
cd $DOWNLOAD_DIR
sudo curl -L --remote-name-all https://dl.k8s.io/release/${RELEASE}/bin/linux/${ARCH}/{kubeadm,kubelet}
sudo chmod +x {kubeadm,kubelet}
RELEASE_VERSION="v0.16.2"
curl -sSL "https://raw.githubusercontent.com/kubernetes/release/${RELEASE_VERSION}/cmd/krel/templates/latest/kubelet/kubelet.service" | sed "s:/usr/bin:${DOWNLOAD_DIR}:g" | sudo tee /usr/lib/systemd/system/kubelet.service
sudo mkdir -p /usr/lib/systemd/system/kubelet.service.d
curl -sSL "https://raw.githubusercontent.com/kubernetes/release/${RELEASE_VERSION}/cmd/krel/templates/latest/kubeadm/10-kubeadm.conf" | sed "s:/usr/bin:${DOWNLOAD_DIR}:g" | sudo tee /usr/lib/systemd/system/kubelet.service.d/10-kubeadm.conf
Примітка:
Звіртесь з примітками в розділі Перш ніж ви розпочнете для дистрибутивів Linux, які типово не містятьglibc
.Встановіть kubectl
, відповідно до інструкцій на сторінці Встановлення інструментів.
Опціонально, увімкніть службу kubelet
перед запуском kubeadm
:
sudo systemctl enable --now kubelet
Примітка:
Дистрибутив Flatcar Container Linux монтує теку/usr
як файлову систему тільки для читання. Перед ініціалізацією кластера вам потрібно виконати додаткові кроки для налаштування теки для запису. Див. Посібник з усунення несправностей kubeadm, щоб дізнатися, як налаштувати теку для запису.Kubelet тепер перезавантажується кожні кілька секунд, чекаючи в циклі crashloop на вказівки від kubeadm.
Налаштування драйвера cgroup
Як середовище виконання контейнерів, так і kubelet мають властивість, відому як "cgroup driver", яка є важливою для управління cgroup на машинах з операційною системою Linux.
Попередження:
Обовʼязково встановлюйте спільний драйвер cgroup для середовища виконання контейнерів та kubelet, інакше процес kubelet завершиться із помилкою.
Докладніше дивіться в розділі Налаштування драйвера cgroup.
Розвʼязання проблем
Якщо у вас виникають труднощі з kubeadm, будь ласка, звертайтеся до наших документів щодо розвʼязання проблем.