Введение
Kubernetes — это оркестратор для контейнеров, написанный на языке Go в Google. Раньше уже существовали решения для создания и развёртывания виртуальных машин — такие как Microsoft Hyper-V или продукты от VMware.
Для контейнеров был тот же Docker — он позволял администрировать по несколько контейнеров одновременно. Однако для развёртывания больших многокомпонентных продуктов для сервисов и приложений, использующих контейнеры в своей архитектуре, технологий не было.
Поэтому появился Kubernetes: он позволяет автоматизировать развёртывание целых кластеров с контейнерами, гибко задавать различные политики и настройки и пользоваться подходом Infrastructure as Code.
При этом Kubernetes позволяет распределять ресурсы серверов более эффективно благодаря лёгкости контейнеров. Виртуальные машины, каждая из которых запускает отдельную копию операционной системы, работают очень медленно и потребляют кучу ресурсов. А Kubernetes может крутить контейнеры на одном сервере, не требуя для каждого из них отдельной ОС.
Подготовка
Чтобы установить Kubernetes нам потребуется виртуальная машина в облаке или локально на Вашем сервере виртуализации. На данную виртуалку нам необходимо установить Ubuntu Server 22.04 LTS (можете выбрать любую другую версию Ubuntu Server или другой подходящий дистрибутив, например, Debian). После успешной установки операционной системы можно приступать к развертыванию Kubernetes.
Установка Kubernetes
В моем случае для Kubernetes я буду использовать containerd вместо полноценного Docker.
containerd — это бывшая часть Docker, а ныне самостоятельное решение, реализующее исполняемую среду для запуска контейнеров. При его создании, как утверждают разработчики, они стремились к простоте, надёжности и портируемости.
Также в качестве сетевого плагина я буду использовать Calico.
Приступим к установке:
1. Отключаем swap
swapoff -a
sed -i '/swap/s/^/#/' /etc/fstab
2. Добавляем два модуля ядра
tee /etc/modules-load.d/containerd.conf <<EOF
overlay
br_netfilter
EOF
3. Загружаем эти модули ядра
modprobe overlay
modprobe br_netfilter
4. Создаем файл конфигурации
tee /etc/sysctl.d/kubernetes.conf <<EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
EOF
5. Применяем все параметры конфигурации ядра
sysctl --system
6. Устанавливаем необходимые утилиты
apt install -y curl gnupg2 software-properties-common apt-transport-https ca-certificates
7. Загружаем GPG-ключ для репозитория Docker
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmour -o /etc/apt/trusted.gpg.d/docker.gpg
8. Добавляем репозиторий Docker
add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
9. Устанавливаем containerd
apt update && apt install -y containerd.io
10. Создаем и вносим изменения в конфигурационный файл для containerd
containerd config default | sudo tee /etc/containerd/config.toml >/dev/null 2>&1
sed -i 's/SystemdCgroup \= false/SystemdCgroup \= true/g' /etc/containerd/config.toml
11. Перезапускаем, добавляем в автозапуск и проверяем статус у containerd
systemctl restart containerd
systemctl enable containerd
systemctl status containerd
12. Загружаем GPG-ключ для репозитория Kubernetes
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo gpg --dearmour -o /etc/apt/trusted.gpg.d/kubernetes-xenial.gpg
13. Добавляем репозиторий Kubernetes
apt-add-repository "deb http://apt.kubernetes.io/ kubernetes-xenial main"
14. Загружаем еще один GPG-ключ для репозитория Kubernetes
curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.28/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg
15. Устанавливаем пакеты Kubernetes
apt update && apt install -y kubelet kubeadm kubectl
16. «Замораживаем» пакеты Kubernetes
apt-mark hold kubelet kubeadm kubectl
17. Инициализируем кластер Kubernetes и задаем CIDR для сети подов
kubeadm init --pod-network-cidr=10.244.0.0/16
18. Создаем папку .kube и копируем туда конфигурационный файл
mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
19. Изменяем владельца и группу файла конфигурации Kubernetes для текущего пользователя и «размораживаем» пакеты Kubernetes
chown $(id -u):$(id -g) $HOME/.kube/config
apt-mark unhold kubelet kubeadm kubectl
20. Применяем манифест Calico для развертывания сетевого плагина в нашем кластере Kubernetes
kubectl apply -f https://raw.githubusercontent.com/projectcalico/calico/v3.25.0/manifests/calico.yaml
Простые 20 шагов — и Ваш кластер Kubernetes установлен и готов к работе!
После успешного старта Calico Вы можете начинать пользоваться своим кластером Kubernetes и разворачивать в нем все, что душе угодно.
Проверить успешность запуска можно следующей командой:
sudo kubectl get pods -n kube-system
Команда отобразит все системные поды Kubernetes, а также поды Calico.
Если в статусе всех подов будет указано «Running», то Ваш кластер успешно запущен и готов к работе.