Узнайте, как развернуть 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.