Kubernetes прекращает поддержку Docker-а. Теперь, вся тяжелая работа, которую вы вложили в изучение, сильно изменится. Даже с самого начала пути использование Kubernetes не будет прежним.
Я говорю о самой установке инструмента управления контейнерами. Вы, конечно, не можете развернуть Kubernetes так же, как когда-то — установив Docker в качестве среды выполнения.
Вместе мы сейчас попробуем установить Kubernetes на Ubuntu Server 20.04 без Docker-а.
Что вам понадобится
- Пользователь с привилегиями sudo
- Экземпляр Ubuntu Server 20.04 (он будет служить Контроллером — вам понадобятся другие экземпляры для работы в качестве узлов, но я собираюсь продемонстрировать только на Контроллере, так как установка будет одинаковой на всех машинах)
Как установить среду выполнения containerd
Первое, что мы сделаем, это установим среду выполнения containerd, которая займет место Docker. Войдите в свой экземпляр Ubuntu Server и обязательно обновите apt с помощью команды:
sudo apt-get update
После этого вы должны запустить обновление с помощью команды:
sudo apt-get upgrade -y
Если ядро ??обновляется, вам нужно перезагрузить сервер (если у вас не установлен и не запущен Live Patch).
Установите containerd с помощью команды:
sudo apt-get install containerd -y
Настройте containerd и запустите службу с помощью команд:
sudo mkdir -p /etc/containerd
sudo su -
containerd config default /etc/containerd/config.toml
Как установить Kubernetes
Далее мы установим Kubernetes. Сначала нужно добавить ключ GPG репозитория с помощью команды:
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add
Добавьте репозиторий Kubernetes с помощью команды:
sudo apt-add-repository "deb http://apt.kubernetes.io/ kubernetes-xenial main"
Теперь вы можете установить все необходимые компоненты Kubernetes с помощью команды:
sudo apt-get install kubeadm kubelet kubectl –y
Как решить несколько проблем, возникших с containerd
Здесь все становится немного сложнее. В Docker было решено множество внутренних вещей. Когда вы переходите на containerd, вам нужно внести некоторые изменения в конфигурацию вручную.
Первое изменение — добавить строку в /etc/sysctl.conf. Откройте файл командой:
sudo nano /etc/sysctl.conf
Открыв этот файл, добавьте снизу следующее:
net.bridge.bridge-nf-call-iptables = 1
Сохраните и закройте файл.
Затем введите команды:
sudo -s
sudo echo '1' > /proc/sys/net/ipv4/ip_forward
exit
Перезагрузите конфигурации с помощью команды:
sudo sysctl --system
Вам также потребуется загрузить пару необходимых модулей с помощью команд:
sudo modprobe overlay
sudo modprobe br_netfilter
Как только вы позаботитесь об этом, то сможете инициализировать Kubernetes.
Как завершить настройку
Вам нужно будет отобразить все ваши узлы в / etc / hosts. Убедитесь, что отображение имеет форму:
IP Address hostname
Следующим шагом является установка имени хоста вашего контроллера (убедитесь, что оно соответствует имени хоста, которое вы использовали в / etc / hosts) с помощью команды:
sudo hostnamectl set-hostname HOSTNAME
Где HOSTNAME — это имя хоста, которое вы хотите использовать.
Отключите свопинг, открыв файл fstab для редактирования командой:
sudo nano /etc/fstab
В этом файле закомментируйте (добавив символ # в начало строки) запись, которая начинается с:
/swap.img
Эта строка теперь будет начинаться с:
# / swap.img
Сохраните и закройте файл.
Отключите своп командой:
sudo swapoff -a
Вытащите необходимые контейнеры командой:
sudo kubeadm config images pull
На контроллере инициализируйте Kubernetes с помощью команды:
sudo kubeadm init --pod-network-cidr=IPADDRESS/24
Где IPADDRESS — это IP-адрес вашего контроллера.
В конечном итоге вы вернетесь к команде, которую нужно запустить на ваших узлах, чтобы они могли подключиться к кластеру. Скопируйте эту команду.
Прежде чем вы сможете присоединить узлы к кластеру, вам нужно позаботиться о еще нескольких битах в кластере.
На контроллере создайте каталог кластера с помощью команды:
mkdir -p $ HOME / .kube
Скопируйте файл конфигурации в этот каталог с помощью команды:
sudo cp -i /etc/kubernetes/admin.conf $ HOME / .kube / config
Дайте конфигурационному файлу соответствующие разрешения с помощью команды:
sudo chown $(id -u):$(id -g) $HOME/.kube/config
Разверните сеть контейнеров (в данном случае мы будем использовать weave-net) в кластере с помощью команды:
kubectl apply -f "https://cloud.weave.works/k8s/net?k8s-version=$(kubectl version | base64 | tr -d '\n')"
Теперь вы можете запустить команду соединения на каждом из узлов, чтобы завершить работу кластера.
Процесс не так прост, как раньше. Надеюсь, что в будущем развертывание кластера Kubernetes будет таким же простым, как и при использовании Docker.
alex1t
А в чём смысл отключения файла подкачки?
Kotofeus
Похоже чтобы все точно падало и рушилось)
DorianPeregrim
Для корректной утилизации ресурсов инстанса подами.
yellowmew
вот в этом ишью дан самый полный и адекватный ответ почему на узлах кубера надо отключать своп
alex1t
Спасибо, за ссылку. Было полезно почитать. Но в целом я понял, что жёсткой рекомендации не использовать своп нет, просто k8s не умеет с ним работать. Желающих получить такой функционал хватает тоже судя по комментариям. А пока это действительно рекомендация, если вы хотите иметь строгие гарантии на ресурсы
iwannabeacoder
Там крайне жесткие рекомендации, потому что сервис kubelet просто не стартует с включенным свопом. Но, есть возможность указать в его параметрах командной строки, чтобы он игнорировал проверку наличия свопа.
akukin
В том, что как утверждают разработчики «кубер пока не умеет хорошо с ним работать».
Есть люди, которым тоже не хватает свопа в Кубере. На Github есть ветка общения на эту тему.
github.com/kubernetes/kubernetes/issues/53533
Они там собирают кейсы при которых своп мог быть полезным и топят за возможность оставлять своп.