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.
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