Déploiement rapide d’un cluster Kubernetes avec des cartes Rock Pi S et Pine A64 via K3S …

Image for post
Image for post

ans un précédent article, j’avais réalisé un test avec MicroK8s et une carte Pine A64 :

Image for post
Image for post

Je profite de l’arrivée de la nouvelle carte Rock Pi S de Radxa Team qui démarre à 9,99$ pour initier un cluster K8S avec une carte Pine A64:

Image for post
Image for post

La carte Rock Pi S est équipée d’un SoC Rockchip RK3308 qui intègre quatre cœurs ARM Cortex-A35 64 bits (pouvant atteindre jusqu’à 1,3 GHz). Le SoC contient également un détecteur d’activité vocale (VAD) intégré pour une utilisation avec des applications vocales intelligentes. Radxa a inclus un en-tête GPIO à 26 broches ainsi qu’un lecteur de carte microSD.

Image for post
Image for post

De plus, la carte Rock Pi S possède un port Ethernet 100 Mbps, un port USB 2.0 Type-A et un port USB 2.0 Type-C qui supporte l’alimentation OTG et 5V. La carte est livrée avec 256 Mo ou 512 Mo de RAM. En option, la carte Rock Pi S peut intégrer jusqu’à 8 Go de stockage NAND embarqué, un module RTL8723BS compatible Wi-Fi 4 (jusqu’à 802.11 n) et du Bluetooth 4.0. La carte fonctionne actuellement sous Debian, Slackware et supportera aussi le Buildroot.

Image for post
Image for post
Image for post
Image for post
Image for post
Image for post

Je peux alors relier ces deux cartes via deux cables Ethernet attachés à un switch pour faire la liaison vers mon réseau local dans le cadre de cette expérience :

Image for post
Image for post
Image for post
Image for post

Je charge sur la carte Rock Pi S un serveur k3s sans agent :

$ curl -sfL https://get.k3s.io | INSTALL_K3S_EXEC="--disable-agent" sh -
Image for post
Image for post

en ayant récuperée le binaire k3s ARM 64 Bits sur Github :

Image for post
Image for post

Je charge le même binaire sur la carte Pine A64 et je peux lier cette dernière à la carte Rock Pi S pour former mon cluster Kubernetes :

$ curl -sfL https://get.k3s.io | K3S_URL=https://<IP Rock Pi S>:6443 K3S_TOKEN=XXX sh -
Image for post
Image for post

J’ai lié la carte Pine A64 à ZeroTier :

$ curl -s https://install.zerotier.com | bash$ zerotier-cli join <NETWORK ID>
Image for post
Image for post

Il est alors possible de déployer MetalLB pour obtenir un service de Load Balancing alternatif à celui fourni par défaut avec Traefik dans k3s :

$ kubectl apply -f https://raw.githubusercontent.com/google/metallb/v0.8.1/manifests/metallb.yaml
Image for post
Image for post

avec cette configuration pour le DHCP :

apiVersion: v1
kind: ConfigMap
metadata:
namespace: metallb-system
name: config
data:
config: |
address-pools:
- name: default
protocol: layer2
addresses:
- 192.168.193.10-192.168.193.100
Image for post
Image for post
Image for post
Image for post
Image for post
Image for post
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: fcbot
spec:
replicas: 1
template:
metadata:
labels:
app: fcbot
spec:
containers:
- name: fcbot
image: mcas/pwafcbot-armv8:latest
ports:
- containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
name: fcbot-service
labels:
app: fcbot-service
spec:
type: LoadBalancer
ports:
# the port that this service should serve on
- port: 8000
targetPort: 80
protocol: TCP
selector:
app: fcbot

Ici le service émet sur le port TCP 8000. Pour profiter de l’adresse IP fournie par ZeroTier et bénéficier d’un accès en HTTPS, je vais utiliser Cloudflare Argo Tunnel (le chatbot étant sous la forme d’un Progressive Web App) :

Je récupère la version ARM 64 Bits de Cloudflared sur Github qui est chargée sur la carte Pine A64 :

Image for post
Image for post
Image for post
Image for post

Dès lors, lancement d’un tunnel vers l’IP du service du chatbot vocal :

$ cloudflared tunnel --url http://192.168.193.11:8000
Image for post
Image for post

Cloudflare me retourne une adresse que j’utilise pour poser mes questions au Chatbot :

Image for post
Image for post

Pour monitorer ces cartes, j’utilise ici PM2 Plus de Keymetrics avec pm2-server-monit (en ayant installé auparavant Nodejs en sa version ARM 64 Bits) :

$ curl -sL https://deb.nodesource.com/setup_12.x | bash -
$ apt-get install -y nodejs
$ npm install pm2 -g
$ pm2 install pm2-server-monit
Image for post
Image for post
Image for post
Image for post
Image for post
Image for post
Image for post
Image for post

e nouvelles images Linux devraient être disponibles pour cette carte Rock Pi S permettant son utilisation en tant qu’agent au sein du cluster k3s :

Image for post
Image for post

A suivre !

Image for post
Image for post

Above the clouds, the sky is always blue ...

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store