
RĂ©cemment, une entreprise bien connue a annoncĂ© qu'elle allait migrer sa gamme de portables vers l'architecture ARM. En entendant cette nouvelle, je me suis souvenu : en consultant Ă nouveau les prix d'EC2 dans AWS, j'ai remarquĂ© les Graviton avec un prix trĂšs attractif. L'astuce, bien sĂ»r, Ă©tait que c'Ă©tait de l'ARM. Ă l'Ă©poque, je ne rĂ©alisais pas que l'ARM Ă©tait quelque chose de sĂ©rieuxâŠ
Pour moi, cette architecture a toujours Ă©tĂ© rĂ©servĂ©e aux mobiles et autres gadgets IoT. Des « vrais » serveurs sous ARM, c'est un peu Ă©trange, presque sauvage⊠Cependant, une nouvelle idĂ©e m'est venue Ă l'esprit, et donc un week-end, j'ai dĂ©cidĂ© de vĂ©rifier ce qu'il est possible de faire aujourd'hui sur ARM. Pour cela, j'ai dĂ©cidĂ© de commencer par quelque chose de familier â un cluster Kubernetes. Et pas juste un « cluster » quelconque, mais un vĂ©ritable, comme je suis habituĂ© Ă voir en production.
Selon ma vision, le cluster doit ĂȘtre accessible depuis Internet, exĂ©cuter une application Web, et il doit Ă©galement y avoir au moins une surveillance. Pour rĂ©aliser cette idĂ©e, il me faudrait quelques Raspberry Pi, au minimum le modĂšle 3B+. Bien qu'AWS aurait pu servir de plateforme pour les expĂ©riences, j'Ă©tais plus intĂ©ressĂ© par les « framboises » (qui Ă©taient de toute façon inutilisĂ©es). Ainsi, nous allons dĂ©ployer un cluster Kubernetes avec Ingress, Prometheus et Grafana sur ceux-ci.
Préparation des « framboises »
Installation du systĂšme d'exploitation et de SSH
Pour le choix du systÚme d'exploitation, je ne me suis pas trop compliqué : j'ai simplement pris la version la plus récente de Raspberry Pi OS Lite avec . Une documentation sur l'installation est également disponible AprÚs avoir connecté un moniteur et un clavier, il est nécessaire de configurer au préalable le réseau et SSH :
Pour que le cluster fonctionne, le maĂźtre doit avoir une adresse IP statique, tandis que sur les nĆuds de travail, c'est Ă la discrĂ©tion de l'utilisateur. J'ai prĂ©fĂ©rĂ© des adresses statiques partout pour des raisons de commoditĂ© de configuration.
- Une adresse statique peut ĂȘtre configurĂ©e dans le systĂšme d'exploitation (dans le fichier
- , un exemple approprié est disponible) ou en réservant le lease sur le serveur DHCP de votre routeur (dans mon cas, celui de la maison).
/etc/dhcpcd.confLe serveur SSH se configure simplement dans raspi-config ( - options d'interface â sshAprĂšs cela, il est possible de se connecter via SSH (par dĂ©faut, le login est).
pi , et le mot de passe estraspberry ou celui que vous avez modifié) et de continuer la configuration. Autres configurations
Autres paramĂštres
- Nous allons définir le nom d'hÎte. Dans mon exemple, nous allons utiliser
pi-controletpi-worker. - Vérifions que le systÚme de fichiers est étendu sur tout le disque (
df -h /). Si nĂ©cessaire, il peut ĂȘtre Ă©tendu Ă l'aide de raspi-config. - Changer le mot de passe de l'utilisateur par dĂ©faut dans raspi-config.
- DĂ©sactivons le fichier d'Ă©change (c'est une exigence de Kubernetes ; si vous ĂȘtes intĂ©ressĂ© par les dĂ©tails Ă ce sujet, consultez ):
dphys-swapfile swapoff systemctl disable dphys-swapfile - Mettons Ă jour les paquets vers les derniĂšres versions :
apt-get update && apt-get dist-upgrade -y - Installons Docker et des paquets supplémentaires :
apt-get install -y docker docker.io apt-transport-https curl bridge-utils iptables-persistentLors de l'installation
iptables-persistent, il sera nĂ©cessaire de sauvegarder les paramĂštres d'iptables pour ipv4, et dans le fichier/etc/iptables/rules.v4â ajouter des rĂšgles dans la chaĂźneFORWARD, comme ceci :# Generated by xtables-save v1.8.2 on Sun Jul 19 00:27:43 2020 *filter :INPUT ACCEPT [0:0] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [0:0] -A FORWARD -s 10.1.0.0/16 -j ACCEPT -A FORWARD -d 10.1.0.0/16 -j ACCEPT COMMIT - Il ne reste plus qu'Ă redĂ©marrer.
Tout est maintenant prĂȘt pour l'installation du cluster Kubernetes.
Installation de Kubernetes
à ce stade, j'ai délibérément mis de cÎté tous mes développements d'automatisation d'installation et de configuration du cluster K8s. à la place, nous allons utiliser la documentation officielle sur (légÚrement complétée par des commentaires et des abréviations).
Ajoutons le dépÎt Kubernetes :
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
cat <<EOF | sudo tee /etc/apt/sources.list.d/kubernetes.list
deb https://apt.kubernetes.io/ kubernetes-xenial main
EOF
sudo apt-get updateEnsuite, la documentation suggĂšre d'installer le CRI (interface d'exĂ©cution de conteneurs). Ătant donnĂ© que Docker est dĂ©jĂ installĂ©, nous continuons et installez les composants principaux :
sudo apt-get install -y kubelet kubeadm kubectl kubernetes-cni Au moment de l'installation des composants principaux, j'ai immédiatement ajouté kubernetes-cni, qui est nécessaire au fonctionnement du cluster. Et il y a un point important : le paquet kubernetes-cni ne crée pour une raison quelconque pas de répertoire par défaut pour les configurations des interfaces CNI, donc j'ai dû le créer manuellement :
mkdir -p /etc/cni/net.dPour le backend de réseau, dont nous parlerons ci-dessous, il est nécessaire d'installer le plugin pour CNI. J'ai choisi le plugin portmap que je connais bien (voir la liste complÚte dans ):
curl -sL https://github.com/containernetworking/plugins/releases/download/v0.7.5/cni-plugins-arm-v0.7.5.tgz | tar zxvf - -C /opt/cni/bin/ ./portmapConfiguration de Kubernetes
NĆud avec le plan de contrĂŽle
L'installation du cluster lui-mĂȘme est assez simple. Pour accĂ©lĂ©rer ce processus et vĂ©rifier que les images Kubernetes sont accessibles, vous pouvez prĂ©alablement exĂ©cuter :
kubeadm config images pullNous allons maintenant procĂ©der Ă l'installation proprement dite â initialisons le plan de contrĂŽle du cluster :
kubeadm init --pod-network-cidr=10.1.0.0/16 --service-cidr=10.2.0.0/16 --upload-certsVeuillez noter que les sous-réseaux pour les services et les pods ne doivent pas se chevaucher entre eux ni avec les réseaux existants.
Ă la fin, un message nous montrera que tout va bien et nous expliquera comment connecter les nĆuds de travail au plane de contrĂŽle :
Votre plane de contrÎle Kubernetes a été initialisé avec succÚs !
Pour commencer à utiliser votre cluster, vous devez exécuter ce qui suit en tant qu'utilisateur ordinaire :
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
Vous devez maintenant déployer un réseau de pods dans le cluster.
Exécutez "kubectl apply -f [podnetwork].yaml" avec l'une des options répertoriées à :
https://kubernetes.io/docs/concepts/cluster-administration/addons/
Vous pouvez maintenant rejoindre n'importe quel nombre de nĆuds du plane de contrĂŽle en exĂ©cutant la commande suivante sur chacun d'eux en tant que root :
kubeadm join 192.168.88.30:6443 --token a485vl.xjgvzzr2g0xbtbs4
--discovery-token-ca-cert-hash sha256:9da6b05aaa5364a9ec59adcc67b3988b9c1b94c15e81300560220acb1779b050
--control-plane --certificate-key 72a3c0a14c627d6d7fdade1f4c8d7a41b0fac31b1faf0d8fdf9678d74d7d2403
Veuillez noter que la clé de certificat donne accÚs à des données sensibles du cluster, gardez-la secrÚte !
En guise de précaution, les certificats téléchargés seront supprimés dans deux heures ; si nécessaire, vous pouvez utiliser
"kubeadm init phase upload-certs --upload-certs" pour recharger les certificats par la suite.
Ensuite, vous pouvez rejoindre n'importe quel nombre de nĆuds de travail en exĂ©cutant ce qui suit sur chacun d'eux en tant que root :
kubeadm join 192.168.88.30:6443 --token a485vl.xjgvzzr2g0xbtbs4
--discovery-token-ca-cert-hash sha256:9da6b05aaa5364a9ec59adcc67b3988b9c1b94c15e81300560220acb1779b050Exécutons les recommandations pour l'ajout de la configuration pour l'utilisateur. Et je recommande également d'ajouter immédiatement l'autocomplétion pour kubectl :
kubectl completion bash > ~$HOME/.kube/completion.bash.inc
printf "
# Complétion de shell Kubectl
source '$HOME/.kube/completion.bash.inc'
" >> $HOME/.bash_profile
source $HOME/.bash_profileĂ ce stade, vous pouvez dĂ©jĂ voir le premier nĆud dans le cluster (bien qu'il ne soit pas encore prĂȘt) :
root@pi-control:~# kubectl get no
NOM STATUT RĂLES ĂGE VERSION
pi-control NotReady maitre 29s v1.18.6Configuration du réseau
Ensuite, comme mentionné dans le message aprÚs l'installation, il sera nécessaire d'installer un réseau dans le cluster. La documentation propose le choix entre Calico, Cilium, contiv-vpp, Kube-router et Weave Net⊠Ici, j'ai dévié des instructions officielles et choisi une option qui m'est plus familiÚre et compréhensible : en mode host-gw (plus de détails sur les backends disponibles dans la ).
L'installer dans le cluster est assez simple. Pour commencer - téléchargeons les manifestes :
wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml Ensuite, nous changeons dans les paramĂštres le type de vxlan sur host-gw:
sed -i 's/vxlan/host-gw/' kube-flannel.yml⊠et le sous-réseau des pods - de la valeur par défaut à celle indiquée lors de l'initialisation du cluster :
sed -i 's#10.244.0.0/16#10.1.0.0/16#' kube-flannel.ymlAprÚs cela, nous créons les ressources :
kubectl create -f kube-flannel.yml C'est fait ! AprĂšs un certain temps, le premier nĆud K8s passera au statut PrĂȘt:
NOM STATUT RĂLES ĂGE VERSION
pi-control PrĂȘt maitre 2m v1.18.6Ajout d'un nĆud de travail
Vous pouvez maintenant ajouter un worker. Pour ce faire, sur celui-ci â aprĂšs avoir installĂ© Kubernetes selon le scĂ©nario dĂ©crit ci-dessus â il suffit simplement d'exĂ©cuter la commande prĂ©cĂ©demment obtenue :
kubeadm join 192.168.88.30:6443 --token a485vl.xjgvzzr2g0xbtbs4
--discovery-token-ca-cert-hash sha256:9da6b05aaa5364a9ec59adcc67b3988b9c1b94c15e81300560220acb1779b050Ă ce stade, nous pouvons considĂ©rer que le cluster est prĂȘt :
root@pi-control:~# kubectl get no
NAME STATUS ROLES AGE VERSION
pi-control Ready master 28m v1.18.6
pi-worker Ready 2m8s v1.18.6Je n'avais que deux Raspberry Pi Ă portĂ©e de main, donc je ne voulais pas en donner une pour le control plane. uniquement Ainsi, j'ai supprimĂ© le taint automatiquement attribuĂ© du nĆud pi-control en exĂ©cutant :
root@pi-control:~# kubectl edit node pi-control⊠et en supprimant les lignes :
- effect: NoSchedule
key: node-role.kubernetes.io/masterRemplissage du cluster avec le minimum nécessaire
Tout d'abord, nous aurons besoin de Helm. Bien sûr, il est possible de tout faire sans lui, mais Helm permet de configurer littéralement certains composants à votre goût sans modifier de fichiers. Et en fait, c'est juste un fichier binaire qui « ne demande rien ».
Alors, rendez-vous sur dans la section docs/installation et exécutez la commande depuis là :
curl -s https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3 | bashEnsuite, ajoutons le dépÎt de charts :
helm repo add stable https://kubernetes-charts.storage.googleapis.com/Maintenant, installons les composants d'infrastructure selon le plan :
- Ingress controller ;
- Prometheus ;
- Grafana ;
- cert-manager.
Ingress controller
Le premier composant â Ingress controller â s'installe assez facilement et est prĂȘt Ă l'emploi « dĂšs la sortie de la boĂźte ». Pour ce faire, il suffit d'aller dans et d'exĂ©cuter la commande d'installation depuis lĂ :
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v0.34.1/deploy/static/provider/baremetal/deploy.yamlCependant, Ă ce moment-lĂ , la « framboise » a commencĂ© Ă se mettre Ă ramer et Ă s'opposer aux IOPS disques. Le problĂšme est que l'Ingress controller installe un grand nombre de ressources, effectue beaucoup de requĂȘtes Ă l'API et, par consĂ©quent, beaucoup de donnĂ©es sont Ă©crites dans etcd. En gĂ©nĂ©ral, soit la carte mĂ©moire de classe 10 n'est pas trĂšs performante, soit les cartes SD ne sont pas suffisantes pour une telle charge. NĂ©anmoins, aprĂšs environ 5 minutes, tout s'est lancĂ©.
Un namespace a été créé et un contrÎleur avec tout ce dont il avait besoin est apparu en son sein :
root@pi-control:~# kubectl -n ingress-nginx get pod
NAME READY STATUS RESTARTS AGE
ingress-nginx-admission-create-2hwdx 0/1 Completed 0 31s
ingress-nginx-admission-patch-cp55c 0/1 Completed 0 31s
ingress-nginx-controller-7fd7d8df56-68qp5 1/1 Running 0 48sPrometheus
Les deux composants suivants sont assez simples à installer via Helm à partir du dépÎt chart.
Trouvons Prometheus, créons un espace de noms et installons-y :
helm search repo stable | grep prometheus
kubectl create ns monitoring
helm install prometheus --namespace monitoring stable/prometheus --set server.ingress.enabled=True --set server.ingress.hosts={"prometheus.home.pi"}Par défaut, Prometheus demande 2 disques : un pour les données de Prometheus et un pour les données d'AlertManager. Comme aucune classe de stockage n'a été créée dans le cluster, les disques ne seront pas demandés et les pods ne démarreront pas. Pour les installations bare metal de Kubernetes, nous utilisons généralement Ceph rbd, mais dans le cas de Raspberry Pi, c'est clairement excessif.
Nous allons donc crĂ©er un stockage local simple sur hostpath. Les manifestes PV (volume permanent) pour prometheus-server et prometheus-alertmanager sont regroupĂ©s dans le fichier prometheus-pv.yaml dans . Le rĂ©pertoire pour le PV doit ĂȘtre prĂ©parĂ© Ă l'avance sur le disque de l'hĂŽte auquel nous voulons lier Prometheus : dans l'exemple, il est prĂ©cisĂ© nodeAffinity par le hostname pi-worker et des rĂ©pertoires y ont Ă©tĂ© créés /data/localstorage/prometheus-server et /data/localstorage/prometheus-alertmanager.
Téléchargeons (clonons) le manifeste et ajoutons-le à Kubernetes :
kubectl create -f prometheus-pv.yamlà ce stade, j'ai rencontré pour la premiÚre fois un problÚme d'architecture ARM. Kube-state-metrics, qui est installé par défaut dans le chart Prometheus, a refusé de démarrer. Il a renvoyé l'erreur :
root@pi-control:~# kubectl -n monitoring logs prometheus-kube-state-metrics-c65b87574-l66d8
standard_init_linux.go:207: exec user process caused "exec format error"En fait, l'image utilisée pour kube-state-metrics provient du projet CoreOS, qui n'est pas compatible avec ARM :
kubectl -n monitoring get deployments.apps prometheus-kube-state-metrics -o=jsonpath={.spec.template.spec.containers[].image}
quay.io/coreos/kube-state-metrics:v1.9.7J'ai dû faire quelques recherches et trouver, par exemple, . Pour l'utiliser, nous mettrons à jour le release en spécifiant quelle image utiliser pour kube-state-metrics :
helm upgrade prometheus --namespace monitoring stable/prometheus --set server.ingress.enabled=True --set server.ingress.hosts={"prometheus.home.pi"} --set kube-state-metrics.image.repository=carlosedp/kube-state-metrics --set kube-state-metrics.image.tag=v1.9.6Vérifions que tout a démarré :
root@pi-control:~# kubectl -n monitoring get po
NAME READY STATUS RESTARTS AGE
prometheus-alertmanager-df65d99d4-6d27g 2/2 Running 0 5m56s
prometheus-kube-state-metrics-5dc5fd89c6-ztmqr 1/1 Running 0 5m56s
prometheus-node-exporter-49zll 1/1 Running 0 5m51s
prometheus-node-exporter-vwl44 1/1 Running 0 4m20s
prometheus-pushgateway-c547cfc87-k28qx 1/1 Running 0 5m56s
prometheus-server-85666fd794-z9qnc 2/2 Running 0 4m52sGrafana et cert-manager
Pour les graphiques et les tableaux de bord, nous installons Grafana:
helm install grafana --namespace monitoring stable/grafana --set ingress.enabled=true --set ingress.hosts={"grafana.home.pi"}Ă la fin de la sortie, ils nous montreront comment obtenir le mot de passe d'accĂšs :
kubectl get secret --namespace monitoring grafana -o jsonpath="{.data.admin-password}" | base64 --decode ; echoPour commander des certificats, nous installerons cert-manager. Pour son installation, nous nous référerons à , qui propose les commandes correspondantes pour Helm :
helm repo add jetstack https://charts.jetstack.io
helm install
cert-manager jetstack/cert-manager
--namespace cert-manager
--version v0.16.0
--set installCRDs=truePour des certificats auto-signĂ©s Ă usage domestique, cela suffit. Cependant, si vous devez obtenir le mĂȘme Let's Encrypt, il est nĂ©cessaire de configurer un cluster issuer supplĂ©mentaire. Les dĂ©tails peuvent ĂȘtre trouvĂ©s dans notre article «».
J'ai moi-mĂȘme optĂ© pour l'option du , pensant que l'option staging de LE serait suffisante. Modifions l'email dans l'exemple, enregistrons-le dans un fichier et ajoutons-le au cluster ():
kubectl create -f cert-manager-cluster-issuer.yamlNous pouvons maintenant commander un certificat, par exemple, pour Grafana. Pour cela, un domaine et un accÚs au cluster de l'extérieur sont nécessaires. J'ai un domaine, et j'ai configuré le transfert de trafic des ports 80 et 443 sur mon routeur domestique conformément au service ingress-controller créé :
kubectl -n ingress-nginx get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
ingress-nginx-controller NodePort 10.2.206.61 80:31303/TCP,443:30498/TCP 23dLe port 80 est ici traduit en 31303, et le 443 en 30498. (Les ports sont générés de maniÚre aléatoire, donc vous en aurez d'autres.)
Voici un exemple de certificat ():
apiVersion: cert-manager.io/v1alpha2
kind: Certificate
metadata:
name: grafana
namespace: monitoring
spec:
dnsNames:
- grafana.home.pi
secretName: grafana-tls
issuerRef:
kind: ClusterIssuer
name: letsencrypt-stagingAjoutons-le au cluster :
kubectl create -f cert-manager-grafana-certificate.yamlAprĂšs cela, une ressource Ingress apparaĂźtra, Ă travers laquelle la validation avec Letâs Encrypt se fera :
root@pi-control:~# kubectl -n monitoring get ing
NAME CLASS HOSTS ADDRESS PORTS AGE
cm-acme-http-solver-rkf8l grafana.home.pi 192.168.88.31 80 72s
grafana grafana.home.pi 192.168.88.31 80 6d17h
prometheus-server prometheus.home.pi 192.168.88.31 80 8d AprĂšs la validation, nous verrons que la ressource certificate est prĂȘte, et dans le secret mentionnĂ© ci-dessus grafana-tls se trouvent le certificat et la clĂ©. Nous pouvons immĂ©diatement vĂ©rifier qui a Ă©mis le certificat :
root@pi-control:~# kubectl -n monitoring get certificate
NAME READY SECRET AGE
grafana True grafana-tls 13m
root@pi-control:~# kubectl -n monitoring get secrets grafana-tls -ojsonpath="{.data['tls.crt']}" | base64 -d | openssl x509 -issuer -noout
issuer=CN = Fake LE Intermediate X1Revenons à Grafana. Nous devrons légÚrement modifier son lancement Helm, en ajustant les paramÚtres TLS conformément au certificat créé.
Pour cela, téléchargeons le chart, modifions-le et le mettons à jour depuis le répertoire local :
helm pull --untar stable/grafana Modifions le fichier grafana/values.yaml les paramĂštres TLS :
tls:
- secretName: grafana-tls
hosts:
- grafana.home.pi Ici, nous pouvons également configurer Prometheus installé comme datasource:
datasources:
datasources.yaml:
apiVersion: 1
datasources:
- name: Prometheus
type: prometheus
url: http://prometheus-server:80
access: proxy
isDefault: trueNous mettons maintenant à jour le chart Grafana depuis le répertoire local :
helm upgrade grafana --namespace monitoring ./grafana --set ingress.enabled=true --set ingress.hosts={"grafana.home.pi"} Vérifions que dans l'Ingress grafana le port 443 a été ajouté et qu'il y a un accÚs via HTTPS :
root@pi-control:~# kubectl -n monitoring get ing grafana
NAME CLASS HOSTS ADDRESS PORTS AGE
grafana grafana.home.pi 192.168.88.31 80, 443 63m
root@pi-control:~# curl -kI https://grafana.home.pi
HTTP/2 302
server: nginx/1.19.1
date: Tue, 28 Jul 2020 19:01:31 GMT
content-type: text/html; charset=utf-8
cache-control: no-cache
expires: -1
location: /login
pragma: no-cache
set-cookie: redirect_to=; Path=/; HttpOnly; SameSite=Lax
x-frame-options: deny
strict-transport-security: max-age=15724800; includeSubDomainsPour démontrer Grafana en action, vous pouvez télécharger et ajouter . Voici à quoi cela ressemble :

Je recommande également d'ajouter un tableau de bord pour le node exporter : il montrera en détail ce qui se passe avec les « framboises » (charge CPU, utilisation de la mémoire, réseau, disque, etc.).
AprĂšs cela, je considĂšre que le cluster est prĂȘt Ă accepter et Ă exĂ©cuter des applications !
Remarque sur la construction
Pour assembler des applications pour l'architecture ARM, il existe au moins deux options. Tout d'abord, on peut assembler sur un appareil ARM. Cependant, aprĂšs avoir examinĂ© l'utilisation actuelle de deux Raspberry Pi, j'ai rĂ©alisĂ© qu'ils ne peuvent mĂȘme pas supporter l'assemblage. J'ai donc commandĂ© un nouveau Raspberry Pi 4 (qui est plus puissant et dispose de 4 Go de mĂ©moire) â je prĂ©vois de l'utiliser pour l'assemblage.
La deuxiĂšme option consiste Ă assembler une image Docker multi-architecture sur une machine plus puissante. Pour cela, il y a . Si l'application est dans un langage compilĂ©, une cross-compilation pour ARM sera nĂ©cessaire. Je ne vais pas dĂ©crire tous les rĂ©glages nĂ©cessaires pour cette approche, car cela nĂ©cessiterait un article Ă part. En mettant en Ćuvre cette mĂ©thode, on peut obtenir des images « universelles » : Docker, exĂ©cutĂ© sur un appareil ARM, tĂ©lĂ©chargera automatiquement l'image correspondant Ă l'architecture.
Conclusion
L'expérience menée a dépassé toutes mes attentes : [au moins] un Kubernetes « vanille » avec la base nécessaire se comporte plutÎt bien sur ARM, et lors de sa configuration, seuls quelques détails ont posé problÚme.
Les Raspberry Pi 3B+ supportent la charge du CPU, cependant leurs cartes SD constituent un rĂ©el goulet d'Ă©tranglement. Des collĂšgues m'ont suggĂ©rĂ© que dans certaines versions, il est possible de dĂ©marrer Ă partir d'USB, oĂč l'on peut connecter un SSD : dans ce cas, la situation devrait s'amĂ©liorer.
Voici un exemple de charge CPU lors de l'installation de Grafana :

Pour des expériences et « à essayer », à mon avis, un cluster Kubernetes sur des « framboises » transmet bien mieux les sensations d'exploitation que Minikube, car tous les composants du cluster sont installés et fonctionnent de maniÚre « professionnelle ».
à terme, j'ai l'idée d'ajouter à ce cluster tout le cycle CI/CD, entiÚrement réalisé sur Raspberry Pi. Je serais également heureux si quelqu'un pouvait partager son expérience de configuration de K8s sur AWS Graviton.
P.S. Oui, « production » peut ĂȘtre plus proche que je ne le pensais :

P.P.S.
Lisez aussi dans notre blog :
- «».
Source : habr.com
