K3s на Raspberry Pi и ClusterHat


Узнайте, как развернуть k3s на кластере Raspberry Pi с помощью ClusterHat и ClusterCTRL.

Аппаратное обеспечение

  • 1 x 8GB Raspberry Pi 4
  • 4 x Raspberry Pi Zero 2 W
  • 1 x ClusterHat v2.5
  • 5 x SD-карта

Пользовательские образы ОС

Поскольку вы используете ClusterHat, вы захотите использовать пользовательские образы ОС. В данном руководстве вы будете использовать 64-битные версии каждой из них и версию CNAT Lite для контроллера. Включите SSH для каждого из образов. Имя пользователя не обязательно должно быть pi, но для данного руководства имя пользователя должно быть одинаковым для всех узлов. После записи каждой SD-карты поместите ее в соответствующее устройство, чтобы они были упорядочены. Узел P1 — это слот, который находится на той же стороне, что и контроллер Ethernet. Узлы увеличиваются по порядку до P4, который находится на той же стороне, что и разъемы питания и HDMI. Вы можете обратиться к предыдущему посту, где подробно описаны шаги по созданию SD-карт с помощью Raspberry Pi Imager.

Первая загрузка

Когда все SD-карты вставлены в соответствующие узлы, можно включить управляющий узел. ClusterHat обеспечит питание и сетевое взаимодействие с дополнительными узлами. Питание каждого из узлов можно контролировать независимо. Вы можете подключиться к устройству по SSH через WIFI или через ethernet, в зависимости от того, что вы включили на предыдущем шаге.

Подключитесь к управляющему узлу и включите питание P1:

pi@control-node:~ $ clusterctrl on p1

Войдите в полноэкранный режим Выход из полноэкранного режима

Вы увидите, как загорится зеленый светодиод и начнется загрузка узла.

Подайте питание на другие узлы:

pi@control-node:~ $ clusterctrl on p2 && clusterctrl on P3 && clusterctrl on p4

Войти в полноэкранный режим Выйти из полноэкранного режима

Обновление образов ОС

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

Начните с узла управления:

pi@control-node:~ $ sudo apt update && sudo apt dist-upgrade -y

Войти в полноэкранный режим Выйти из полноэкранного режима

По желанию добавьте следующие строки в /etc/hosts на узле управления:

172.19.181.1    p1
172.19.181.2    p2
172.19.181.3    p3
172.19.181.4    p4

Войти в полноэкранный режим Выйти из полноэкранного режима

Вы также можете использовать IP-адрес напрямую.

Обновите каждый из дополнительных узлов через ssh:

pi@control-node:~ $ ssh p1 'sudo apt update && sudo apt dist-upgrade -y'
pi@control-node:~ $ ssh p2 'sudo apt update && sudo apt dist-upgrade -y'
pi@control-node:~ $ ssh p3 'sudo apt update && sudo apt dist-upgrade -y'
pi@control-node:~ $ ssh p4 'sudo apt update && sudo apt dist-upgrade -y'

Войти в полноэкранный режим Выйти из полноэкранного режима

На момент написания этой статьи требуется дополнительное изменение базовой ОС на каждом узле. Это изменение необходимо для запуска контейнеров, так как настройки по умолчанию для cgroups недавно изменились.

Добавьте следующую конфигурацию в /boot/cmdline.txt на каждом узле, а затем перезагрузитесь:

cgroup_memory=1 cgroup_enable=memory

Войти в полноэкранный режим Выход из полноэкранного режима

Готовность к работе с k3s

Документация по k3s просто невероятна. В этом руководстве вы будете использовать другой инструмент под названием k3sup для развертывания кластера k3s.

Сначала установите k3sup:

pi@control-node:~ $ sudo curl -sLS https://get.k3sup.dev | sh

Войдите в полноэкранный режим Выйдите из полноэкранного режима

Установите управляющий узел k3sup:

pi@control-node:~ $ k3sup install --ip 172.19.181.254 --user $(whoami)

Войти в полноэкранный режим Выйти из полноэкранного режима

Этот процесс завершится с результатом, подобным этому:

...
Saving file to: /home/pi/kubeconfig

# Test your cluster with:
export KUBECONFIG=/home/pi/kubeconfig
kubectl config set-context default
kubectl get node -o wide
pi@control-node:~ $

Войти в полноэкранный режим Выйти из полноэкранного режима

После настройки контекста и проверки готовности управляющего узла добавьте остальные узлы в кластер.

pi@control-node:~ $ k3sup join --ip 172.19.181.1 --server-ip 172.19.181.254 --user $(whoami)
pi@control-node:~ $ k3sup join --ip 172.19.181.2 --server-ip 172.19.181.254 --user $(whoami)
pi@control-node:~ $ k3sup join --ip 172.19.181.3 --server-ip 172.19.181.254 --user $(whoami)
pi@control-node:~ $ k3sup join --ip 172.19.181.4 --server-ip 172.19.181.254 --user $(whoami)

Войти в полноэкранный режим Выход из полноэкранного режима

Теперь у вас есть кластер kubernetes, развернутый на оборудовании стоимостью около $100.

pi@control-node:~ $ kubectl get node
NAME STATUS ROLES AGE VERSION
control-node Ready control-plane,master 25m v1.24.3+k3s1
p1 Ready <none> 20m v1.24.3+k3s1
p2 Ready <none> 20m v1.24.3+k3s1
p3 Ready <none> 22m v1.24.3+k3s1
p4 Ready <none> 19m v1.24.3+k3s1
pi@control-node:~ $

Войти в полноэкранный режим Выход из полноэкранного режима

Тестовое развертывание

Разверните нативное приложение Spring Boot для ARM64 на кластере:

Создайте файл spring-boot-native-pi.yaml

---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: spring-boot-native-pi
spec:
  selector:
    matchLabels:
      app: springbootnativepi
  replicas: 4
  template:
    metadata:
      labels:
        app: springbootnativepi
    spec:
      containers:
      - name: springbootnativepi
        image: dashaun/spring-pi-native:focal-arm64
        ports:
        - containerPort: 8080
---
apiVersion: v1
kind: Service
metadata:
  name: web-service
spec:
  selector:
    app: springbootnativepi
  ports:
    - protocol: TCP
      port: 8080

Войдите в полноэкранный режим Выйдите из полноэкранного режима

Проверить:

pi@control-node:~ $ kubectl get pods
NAME READY STATUS RESTARTS AGE
spring-boot-native-pi-59f7d7659c-hvlp8 1/1 Running 0 42m
spring-boot-native-pi-59f7d7659c-dp7nn 1/1 Running 0 42m
spring-boot-native-pi-59f7d7659c-sf899 1/1 Running 0 42m
spring-boot-native-pi-59f7d7659c-99vfq 1/1 Running 0 42m
pi@control-node:~ $
Войдите в полноэкранный режим Выйти из полноэкранного режима

Резюме

В этом руководстве вы узнали, как развернуть k3s поверх пользовательских образов ОС, предоставляемых ClusterHat, на Raspberry Pi.

Оцените статью
devanswers.ru
Добавить комментарий