Kubernetes — это инструмент оркестровки контейнеров для гибридных облачных платформ. Он был разработан компанией Google. Kubernetes позволяет пользователям управлять контейнерами docker на различных облачных платформах и платформах виртуализации. K3s — это облегченный двоичный файл развертывания kubernetes, который призван уменьшить «высоконагруженную» развертку k8s. K3s разрабатывается Rancher.

В этом посте мы расскажем, как установить кластер Kubernetes на Ubuntu LTS с помощью k3s. В качестве альтернативы вы можете посмотреть, как установить k8s на Ubuntu с помощью kubeadm.

Архитектура Kubernetes включает в себя мастер-узел и рабочие узлы. Они выполняют следующие функции:

  • Master— управление кластером, вызовы API и т.д.
  • Worker— это рабочие нагрузки, на которых развертываются капсулы и запускаются приложения. Их можно добавлять и удалять из кластера.

Итак, чтобы создать кластер k3s, вам нужно как минимум два хоста, а именно master узел и один рабочий узел. В этом посте мы будем использовать один главный узел и два рабочих узла.

Нам нужно подготовить наши узлы, чтобы запустить k3s в кластере. Используйте следующие шаги для установки кластера k3s на Ubuntu:

1. Обновите систему Ubuntu

Если на ваших серверах установлена Ubuntu, обновите и модернизируйте их:

sudo apt update
sudo apt -y upgrade && sudo systemctl reboot

2. Сопоставьте имена хостов на каждом узле

Убедитесь, что имена хостов отображены на каждом узле. Для этого нужно добавить IP и имя хоста каждого узла в поле /etc/hosts файл каждого узла.

В нашей системе это выглядит следующим образом:

$ sudo vim /etc/hosts
172.16.10.3 master
172.16.10.4 worker01
172.16.10.10 worker02

Это должно быть сделано на всех хостах, чтобы вы могли использовать DNS-имена.

3. Установите Docker на Ubuntu

Следующим шагом будет установка docker на хосты. Как уже говорилось, Kubernetes используется для управления контейнерами Docker в гибридной облачной инфраструктуре. Таким образом, нам необходимо установить docker на все узлы, прежде чем мы сможем настроить K3s.

Добавьте репозиторий Docker APT:

sudo apt update
sudo apt install apt-transport-https ca-certificates curl software-properties-common -y
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu focal stable"

Установите Docker CE на Ubuntu:

sudo apt update && sudo apt install docker-ce -y

Это необходимо сделать на всех узлах, включая главный узел. После успешной установки запустите и включите службу.

sudo systemctl start docker
sudo systemctl enable docker

Вы также можете проверить, запущена ли служба и работает ли она:

 systemctl status docker

Добавьте своего пользователя в группу Docker, чтобы не набирать sudo при каждом запуске команд docker.

sudo usermod -aG docker ${USER}
newgrp docker

4. Настройка главного узла k3s

На этом шаге мы установим и подготовим главный узел. Это включает в себя установку службы k3s и ее запуск.

curl -sfL https://get.k3s.io | sh -s - --docker

Выполните приведенную выше команду для установки k3s на главный узел. Сценарий установит k3s и запустит его автоматически.

[INFO]  Finding release for channel stable
[INFO]  Using v1.29.6+k3s2 as release
[INFO]  Downloading hash https://github.com/k3s-io/k3s/releases/download/v1.29.6+k3s2/sha256sum-amd64.txt
[INFO]  Downloading binary https://github.com/k3s-io/k3s/releases/download/v1.29.6+k3s2/k3s
[INFO]  Verifying binary download
[INFO]  Installing k3s to /usr/local/bin/k3s
[INFO]  Skipping installation of SELinux RPM
[INFO]  Creating /usr/local/bin/kubectl symlink to k3s
[INFO]  Creating /usr/local/bin/crictl symlink to k3s
[INFO]  Skipping /usr/local/bin/ctr symlink to k3s, command exists in PATH at /usr/bin/ctr
[INFO]  Creating killall script /usr/local/bin/k3s-killall.sh
[INFO]  Creating uninstall script /usr/local/bin/k3s-uninstall.sh
[INFO]  env: Creating environment file /etc/systemd/system/k3s.service.env
[INFO]  systemd: Creating service file /etc/systemd/system/k3s.service
[INFO]  systemd: Enabling k3s unit
Created symlink /etc/systemd/system/multi-user.target.wants/k3s.service → /etc/systemd/system/k3s.service.
[INFO]  systemd: Starting k3s

Чтобы проверить, успешно ли установилась служба, можно использовать:

systemctl status k3s

Проверить, работает ли главный узел, можно с помощью :

sudo kubectl get nodes -o wide

Результат должен быть примерно таким:

NAME    STATUS   ROLES                  AGE   VERSION        INTERNAL-IP      EXTERNAL-IP   OS-IMAGE           KERNEL-VERSION     CONTAINER-RUNTIME
noble   Ready    control-plane,master   15s   v1.29.6+k3s2   188.40.183.232   <none>        Ubuntu 24.04 LTS   6.8.0-38-generic   docker://27.1.1

5. Разрешить порты на брандмауэре

Нам нужно разрешить порты, которые будут использоваться для связи между главным и рабочими узлами. Этими портами являются 443 и 6443.

sudo ufw allow 6443/tcp
sudo ufw allow 443/tcp

Необходимо извлечь токен из мастера, который будет использоваться для присоединения узлов к мастеру.

На главном узле:

sudo cat /var/lib/rancher/k3s/server/node-token

После этого вы получите токен, имеющий следующий вид:

K1078f2861628c95aa328595484e77f831adc3b58041e9ba9a8b2373926c8b034a3::server:417a7c6f46330b601954d0aaaa1d0f5b

6. Установите k3s на рабочие узлы

Следующим шагом будет установка k3s на рабочие узлы. Выполните приведенные ниже команды для установки k3s на рабочие узлы:

curl -sfL http://get.k3s.io | K3S_URL=https://<master_IP>:6443 K3S_TOKEN=<join_token> sh -s - --docker

Где master_IP IP-адрес главного узла, а join_token это токен, полученный от ведущего узла. например

curl -sfL http://get.k3s.io | K3S_URL=https://172.16.10.3:6443 K3S_TOKEN=K1078f2861628c95aa328595484e77f831adc3b58041e9ba9a8b2373926c8b034a3::server:417a7c6f46330b601954d0aaaa1d0f5b sh -s - --docker

Проверить, запущен ли k3s-агент на рабочих узлах, можно следующим образом:

sudo systemctl status k3s-agent

Чтобы убедиться, что наши узлы успешно добавлены в кластер, выполните команду :

sudo kubectl get nodes

Ваш вывод должен выглядеть следующим образом:

 kubectl get nodes -o wide

Это показывает, что мы успешно настроили наш кластер k3s и готовы развернуть на нем приложения.

7. Развертывание аддонов на K3s

K3s — это легкий инструмент kubernetes, который не поставляется в комплекте со всеми инструментами, но вы можете установить их отдельно.

Установка инструмента командной строки Helm на k3s
  • Загрузите последнюю версию инструмента командной строки Helm с этого сайта страница.
  • Распакуйте tar-файл с помощью tar -xvcf <downloaded-file>
  • Переместите двоичный файл в /usr/local/bin/helm
sudo mv linux-amd64/helm /usr/local/bin/helm

Проверка версии

$ helm version

Добавьте репозиторий helm chart для установки приложений с помощью helm:

helm repo add stable https://charts.helm.sh/stable
helm repo update

8. Развертывание приложения на k3s

Теперь мы можем развернуть тестовое приложение на кластере K3s.

Развертывание веб-прокси Nginx на K3s

Nginx можно использовать в качестве веб-прокси для открытия маршрутов входящего и исходящего веб-трафика в кластере.

Мы можем установить веб-прокси nginx с помощью Helm:

helm install nginx-ingress stable/nginx-ingress --namespace kube-system \
  --set defaultBackend.enabled=false

Мы можем проверить, было ли установлено приложение:

$ kubectl get pods -n kube-system -l app=nginx-ingress -o wide

Результат должен быть таким:

root@master:~# kubectl get pods -n kube-system -l app=nginx-ingress -o wide
NAME                                       READY   STATUS    RESTARTS   AGE   IP          NODE       NOMINATED NODE   READINESS GATES
nginx-ingress-controller-56547fb57-vsjdm   1/1     Running   0          28s   10.42.2.6   worker01   <none>           <none>

Мы успешно развернули веб-прокси nginx на k3s.

как настроить kubernetes на ubuntu 20 с помощью k3s

9. Удаление k3s (бонус)

Чтобы удалить k3s на рабочих узлах, выполните:

sudo /usr/local/bin/k3s-agent-uninstall.sh
sudo rm -rf /var/lib/rancher

Чтобы удалить k3s на главном узле, выполните:

sudo /usr/local/bin/k3s-uninstall.sh
sudo rm -rf /var/lib/rancher