Déploiement rapide d’un cluster Kubernetes avec des cartes Rock Pi S et Pine A64 via k3s …
Tags: kubernetes, k3s, docker, node
Published: 2019-09-11 04:30:42

---
title: Déploiement rapide d’un cluster Kubernetes avec des cartes Rock Pi S et Pine A64 via k3s …
published: true
tags: kubernetes,k3s,docker,nodejs
canonical_url: https://medium.com/@abenahmed1/d%C3%A9ploiement-rapide-dun-cluster-kubernetes-avec-des-cartes-rock-pi-s-et-pine-a64-via-k3s-aece27828d53
---

![](https://cdn-images-1.medium.com/max/2670/1*RZXliBNpYD_OEfUlv3kvVg.jpeg)

J’avais réalisé un test avec MicroK8S et une carte Pine A64 dans cet article :

[**Kubernetes en noeud unique sur une carte Pine A64 via MicroK8s …**
](https://medium.com/@abenahmed1/kubernetes-en-noeud-unique-sur-une-carte-pine-a64-via-microk8s-41726ec7bfff)

![](https://cdn-images-1.medium.com/max/2060/0*TT0NwpfgnFYYghvV.png)

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:

[**RockpiS**
*ROCK Pi S is a Rockchip RK3308 based SBC(Single Board Computer) by Radxa. It equips a 64bits quad core processor, USB…*wiki.radxa.com](https://wiki.radxa.com/RockpiS)

[**ROCK PI S**
*An extremely "rocking" mini computer for your projects! Get creative!! :-) Rockchip RK3308 Quad A35 64bit processor…*shop.allnetchina.cn](https://shop.allnetchina.cn/products/rock-pi-s)

![](https://cdn-images-1.medium.com/max/2000/1*VZ6skoDRNuAZ03270X0ncA.jpeg)

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.

![](https://cdn-images-1.medium.com/max/2000/0*MxPsgIt-N9ELXtgj.jpg)

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.

![](https://cdn-images-1.medium.com/max/2000/1*3vjHKqaP9EkqGAxAD2pVhw.jpeg)

![](https://cdn-images-1.medium.com/max/2000/1*-GfCpkX9Kwz4GrOXKZGtMQ.jpeg)

Je charge la distribution Debian 9.9 correspondante à cette carte :

[**Index of /rockpis/images/debian**
*Edit description*dl.radxa.com](https://dl.radxa.com/rockpis/images/debian/)

[**RockpiS/Debian**
*ROCK Pi S Debian is an easy to use desktop system. While working with ROCKPI4Debian, you will find it do well on…*wiki.radxa.com](https://wiki.radxa.com/RockpiS/Debian)

via Etcher :

[**balenaEtcher - Home**
*Electron is based on Gtk2, which can't run natively on Wayland. Fortunately, the XWayland Server provides backwards…*www.balena.io](https://www.balena.io/etcher/)

![](https://cdn-images-1.medium.com/max/2000/0*7enJHuxJtvvj_xpL.png)

Je charge également une image Armbian pour la carte Pine A64 (encore une fois avec Etcher) :

[**Pine64**
*SUPPORTED devices are tested and they work apart from known issues and missing features. Support is provided as far as…*www.armbian.com](https://www.armbian.com/pine64/)

![](https://cdn-images-1.medium.com/max/2436/1*U1vIQLKK5WhyXmive1ZFdA.jpeg)

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 :

![](https://cdn-images-1.medium.com/max/2000/1*VrmZehXHazPXgSMWZ42x5Q.jpeg)

![](https://cdn-images-1.medium.com/max/2000/1*DWTjBXxLp6dTFOW5YzisPg.jpeg)

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 -

![](https://cdn-images-1.medium.com/max/2670/1*P-Lun1nHIz73sqw8tNEMSg.jpeg)

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

![](https://cdn-images-1.medium.com/max/2312/1*v-ouP6ZiXvPuYIkSTBJTRQ.jpeg)

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 -

![](https://cdn-images-1.medium.com/max/2722/1*I_T_tUfeZ71n5xQmtxigPg.jpeg)

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

    $ curl -s https://install.zerotier.com | bash

    $ zerotier-cli join <NETWORK ID>

![](https://cdn-images-1.medium.com/max/2106/1*GQiAA5XijFKLfMh2-NB-aw.jpeg)

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 :
[**MetalLB, bare metal load-balancer for Kubernetes**
*Before starting with installation, make sure you meet all the requirements. In particular, you should pay attention to…*metallb.universe.tf](https://metallb.universe.tf/installation/)

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

![](https://cdn-images-1.medium.com/max/2630/1*Xqt3k0w70ZTlpkq-fpBQqA.jpeg)

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

![](https://cdn-images-1.medium.com/max/2560/1*Hb8eNaMYZdg3ZO3b9k_bvQ.jpeg)

![](https://cdn-images-1.medium.com/max/2678/1*luBpa1IpKe7v_4t1oYKj0w.jpeg)

Déploiement du chatbot vocal dédié au démonstrateur FC :
[**Chatbot vocal de test utilisant Web Speech API et sous la forme d’une Progressive Web App …**
*Il y a eu une déferlante d’articles depuis le début de l’année sur les Progressive Web Apps (PWA) créées par Google en…*medium.com](https://medium.com/@abenahmed1/chatbot-vocal-de-test-utilisant-web-speech-api-et-sous-la-forme-dune-progressive-web-app-ab8fbbf41e73)

![](https://cdn-images-1.medium.com/max/2708/1*Xvu7Fw9jcUQiM86OQCourQ.jpeg)

    ---
    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) :
[**deep75/pwafcbot**
*You can't perform that action at this time. You signed in with another tab or window. You signed out in another tab or…*github.com](https://github.com/deep75/pwafcbot)
[**Argo Tunnel | Cloudflare**
*Protégez vos serveurs Web contre les attaques directes Dès qu'une application est déployée, les développeurs et les…*www.cloudflare.com](https://www.cloudflare.com/fr-fr/products/argo-tunnel/)

Je récupère la version ARM 64 Bits de Cloudflared sur Github qui est chargée sur la carte Pine A64 :
[**danacr/drone-cloudflared**
*You can't perform that action at this time. You signed in with another tab or window. You signed out in another tab or…*github.com](https://github.com/danacr/drone-cloudflared/releases)

![](https://cdn-images-1.medium.com/max/2196/1*h9HWDaYb13GJnXWWj-cfCg.jpeg)

![](https://cdn-images-1.medium.com/max/2094/1*kk5Eq5xX7CBs8I7dHAGQ7g.jpeg)

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

    $ cloudflared tunnel --url http://192.168.193.11:8000

![](https://cdn-images-1.medium.com/max/2322/1*t2aEBQk-zYuqLDKINkZ0iA.jpeg)

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

![](https://cdn-images-1.medium.com/max/2000/1*LPLP-JtvqyW4e4D8RZrvew.jpeg)

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) :
[**PM2 ·**
*Advanced process manager for production Node.js applications. Load balancer, logs facility, startup script, micro…*pm2.keymetrics.io](http://pm2.keymetrics.io/)

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

![](https://cdn-images-1.medium.com/max/2498/1*nASiDftNg8ylwvfV6mu-zw.jpeg)

Les deux cartes apparaissent après liaison sur le dashboard de PM2 Plus :
[**Overview | PM2 Plus Documentation**
*P(rocess) M(anager) 2 Plus Welcome to the Overview of PM2 Plus! Once you go serious about production, you need to make…*doc.pm2.io](http://doc.pm2.io/en/plus/overview/)

![](https://cdn-images-1.medium.com/max/2000/1*CMp8fNz8ebriIgWkxTIsXg.jpeg)

![](https://cdn-images-1.medium.com/max/2716/1*medzrb5MXD8RuuzzVviqlA.jpeg)

![](https://cdn-images-1.medium.com/max/2716/1*4oOMktFdcbI_0SlOKNddTw.jpeg)

![](https://cdn-images-1.medium.com/max/2716/1*JKYvwZ4rLeLPgY2kL7HHew.jpeg)

![](https://cdn-images-1.medium.com/max/2000/0*NkLSKTG7bC7qWuLl.jpg)

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

![](https://cdn-images-1.medium.com/max/2304/1*6pIKVZGte1G6mnvsHx_koA.jpeg)

A suivre !