TĂ€ielik Kubernetes nullist Raspberry Pi-l.

TĂ€ielik Kubernetes nullist Raspberry Pi-l.

Hiljuti teatas ĂŒks tuntud ettevĂ”te, et viib oma sĂŒlearvutite seeria ĂŒle ARM-arhitektuurile. Seda uudist kuuldes meenus mulle, et kui jĂ€lle vaatasin AWS-i EC2 hindu, siis mĂ€rkasin Gravitoniid, mille hinnad olid tĂ”eliselt ahvatlevad. Loomulikult oli aga pĂ”hikĂŒsimus, et need on ARM. Siis ei tulnud mul ĂŒldse pĂ€he, et ARM on tĂ”eliselt tĂ”sine


Minu jaoks oli see arhitektuur alati seotud mobiilsete seadmete ja muude IoT-vidinatega. „TĂ”elised“ serverid ARM-is tundusid kuidagi ebatavalised, isegi hirmutavad
 Siiski, uus mĂ”te jĂ€i mulle pĂ€he kummitama, seega otsustasin ĂŒhel nĂ€dalavahetusel uurida, mida tĂ€pselt saab tĂ€na ARM-il kĂ€ivitada. Ja selleks tahtsin alustada millegagi tuttavast — Kubernetes'e klasstrist. Ja mitte lihtsalt mĂ”nest „klastrist“, vaid kĂ”ik pidi olema tĂ”siseltvĂ”etav, et see oleks maksimaalselt sarnane sellele, kuidas ma olen harjunud seda nĂ€gema tootmises.

Minu plaani kohaselt peaks klaster olema ligipÀÀsetav Internetis, seal peaks töötama veebirakendus ja olema vĂ€hemalt ĂŒks seire. Selle idee elluviimiseks on vajalik paar (vĂ”i rohkem) Raspberry Pi vĂ€hemalt mudelist 3B+. Eksperimentideks sobiks ka AWS, kuid mind huvitasid just «maliinid» (mis seisis niisama). Seega loome neile Kubernetes klastriga koos Ingress, Prometheus ja Grafana.

«Maliinide» ettevalmistamine

OpsĂŒsteemi ja SSH installimine

OpsĂŒsteemi valimisel ei viibinud ma palju: lihtsalt vĂ”tsin kĂ”ige vĂ€rskema Raspberry Pi OS Lite koos ametlik veebisait. Seal on saadaval paigaldusdokumendid, kĂ”ik toimingud tuleb teha kĂ”ikidel tulevase klastrite sĂ”lmedel. Edasi tuleb teha jĂ€rgmised toimingud (samuti kĂ”ikidel sĂ”lmedel).

Monitori ja klaviatuuri ĂŒhendamisel tuleb eelnevalt seadistada vĂ”rk ja SSH:

  1. Klastri tööks peab pÔhiklosseril olema kindlasti staatiline IP-aadress, töötluspunktidel - vastavalt soovile. Mina eelistasin igal pool staatilisi aadresse seadistamise mugavuse nimel.
  2. Staatilist aadressi saab konfigureerida opsĂŒsteemis (failis /etc/dhcpcd.conf on sobib nĂ€ide) vĂ”i tĂ€nu lease fikseerimisele DHCP-serveris, mida kasutatakse (minu puhul — kodus) ruuteris.
  3. ssh-server lĂŒlitatakse lihtsalt sisse raspi-configis (liidese valikud → ssh).

PĂ€rast seda saab juba sisse logida SSH kaudu (vaikimisi on kasutajanimi — pi, ja parool — raspberry vĂ”i see, millele see on muutunud) ja jĂ€tkata seadistustega.

Muud seadistused

  1. Seadistame hostinime. Minu nÀites kasutatakse pi-control ja pi-worker.
  2. Kontrollime, et failisĂŒsteem on laiendatud kogu ketas (df -h /). Vajadusel saab seda laiendada raspi-configi abil.
  3. Muudame vaikimisi kasutaja parooli raspi-configis.
  4. Keen muutame swap-faili vÀlja (see on Kubernetes'e nÔue; kui teid huvitavad detailid, vaadake issue #53533):
    dphys-swapfile swapoff
    systemctl disable dphys-swapfile
  5. Uuendame paketid uusimatele versioonidele:
    apt-get update && apt-get dist-upgrade -y
  6. Installeerime Dockeri ja tÀiendavad paketid:
    apt-get install -y docker docker.io apt-transport-https curl bridge-utils iptables-persistent

    Installeerimisel iptables-persistent on vajalik iptables'i seadistused salvestada ipv4 jaoks, ja faili /etc/iptables/rules.v4 — lisada reeglid kettasse FORWARD, nii:

    # 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
  7. Alles jÀÀb vaid restartida.

NĂŒĂŒd on kĂ”ik valmis Kubernetes'e klastri installimiseks.

Kubernetes'e installatsioon

Sel etapil olen spetsiaalselt lisanud kÔik oma ja meie ettevÔtte automatiseerimise rakendamise ja K8s klustrierimise arendused. Selle asemel kasutame ametlikku dokumentatsiooni saidilt kubernetes.io (veidi tÀiendatud kommentaaride ja kokkuvÔtetega).

Lisame Kubernetes'i reposi:

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 update

Edasi dokumendis soovitatakse installida CRI (container runtime interface). Kuna Docker on juba installitud, liigume edasi ja installime pÔhikomponendid:

sudo apt-get install -y kubelet kubeadm kubectl kubernetes-cni

PÔhikomponentide installimise etapis lisasin kohe kubernetes-cni, mis on vajalik klusteri tööks. Siin on oluline punkt: pakett kubernetes-cni mingil pÔhjusel ei loo vaikimisi kausta CNI-liideste seadistamiseks, seega pidin selle kÀsitsi looma:

mkdir -p /etc/cni/net.d

Network-bÀkendi tööks, millest rÀÀgitakse allpool, on vajalik CNI plugina tÀiendav installimine. Valisin tuttava ja arusaadava plugina portmap (tÀielik nimekiri on nÀhtav punktis dokumentatsioonis):

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/ ./portmap

Kubernetesi seadistamine

Control plane'i sÔlm

Klastri installimine on ĂŒsna lihtne. Protsessi kiirendamiseks ja selle kontrollimiseks, et Kubernetesi pildid on kergesti saadaval, vĂ”ite eelnevalt kĂ€ivitada jĂ€rgmise kĂ€su:

kubeadm config images pull

NĂŒĂŒd teeme installatsiooni — initsialiseerime klastris control plane'i:

kubeadm init --pod-network-cidr=10.1.0.0/16 --service-cidr=10.2.0.0/16 --upload-certs

Pange tĂ€hele, et teenuste ja pod'ide alavĂ”rgud ei tohi ĂŒksteisega ega olemasolevate vĂ”rkudega kattuda.

LÔpus kuuleme sÔnumit, et kÔik on hÀsti, ja antakse ka juhised, kuidas liita tööseisundid control plane'iga:

Teie Kubernetes juhtimislennuk on edukalt initsialiseeritud!
Klastri kasutamiseks peate tavalise kasutajana kÀivitama jÀrgmised kÀsud:
 mkdir -p $HOME/.kube
 sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
 sudo chown $(id -u):$(id -g) $HOME/.kube/config
NĂŒĂŒd peaksite klastrisse kasutusele vĂ”tma pod-vĂ”rgu.
KĂ€ivitage "kubectl apply -f [podnetwork].yaml" ĂŒhe valiku abil, mis on loetletud aadressil:
 https://kubernetes.io/docs/concepts/cluster-administration/addons/
NĂŒĂŒd saate ĂŒhendada suvalise arvu juhtimislennuki sĂ”lmi, kĂ€ivitades jĂ€rgmise kĂ€su igaĂŒhel juurena:
 kubeadm join 192.168.88.30:6443 --token a485vl.xjgvzzr2g0xbtbs4 
   --discovery-token-ca-cert-hash sha256:9da6b05aaa5364a9ec59adcc67b3988b9c1b94c15e81300560220acb1779b050 
   --control-plane --certificate-key 72a3c0a14c627d6d7fdade1f4c8d7a41b0fac31b1faf0d8fdf9678d74d7d2403
Palun pidage meeles, et sertifikaadi vÔti annab juurdepÀÀsu klastrite tundlikule teabele, hoidke seda saladuses!
Kaitseks kustutatakse ĂŒleslaaditud sertifikaadid kahe tunni pĂ€rast; Kui vajalik, saate kasutada
"kubeadm init phase upload-certs --upload-certs" sertifikaatide uuesti laadimiseks.
SeejĂ€rel saate ĂŒhendada suvalise arvu töötlussĂ”lmi, kĂ€ivitades igaĂŒhel juurena jĂ€rgmise kĂ€su:
kubeadm join 192.168.88.30:6443 --token a485vl.xjgvzzr2g0xbtbs4 
   --discovery-token-ca-cert-hash sha256:9da6b05aaa5364a9ec59adcc67b3988b9c1b94c15e81300560220acb1779b050

Teeme soovitused konfi lisamiseks kasutajale. Samuti soovitan kohe lisada kubectl jaoks automaatset tÀiendamist:

 kubectl completion bash > ~/.kube/completion.bash.inc
 printf "
 # Kubectl shell completion
 source '$HOME/.kube/completion.bash.inc'
 " >> $HOME/.bash_profile
 source $HOME/.bash_profile

Selles etapis on juba vÔimalik nÀha klastris esimest sÔlme (kuigi see pole veel valmis):

root@pi-control:~# kubectl get no
NIMED        OLEK        ROLLID    VANUS   VERSIOON
pi-control   NotReady    master    29s     v1.18.6

VÔrgu konfiguratsioon

Edasi, nagu mainitud pĂ€rast installimist, on vaja seadistada vĂ”rk klastrisse. Dokumentatsioon pakub valikuid Calico, Cilium, contiv-vpp, Kube-router ja Weave Net... Siin ma kaldusin kĂ”rvale ametlikest juhistest ja valisin endale tuttavama ja arusaadavama variandi: flannel host-gw reĆŸiimis (rohkem saadaval olevate taustade kohta vt projekti dokumentatsioonist).

Selle installimine klastrisse on ĂŒsna lihtne. Esiteks - laadige alla manifestid:

wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

SeejĂ€rel muudame seadetes tĂŒĂŒbi vxlan jĂ€rgnevaga host-gw:

sed -i 's/vxlan/host-gw/' kube-flannel.yml

... ja pod'ide alamvÔrk - vaikimisi vÀÀrtusest sellele, mis on mÀÀratud klastrit algatades:

sed -i 's#10.244.0.0/16#10.1.0.0/16#' kube-flannel.yml

PĂ€rast seda loome ressursid:

kubectl create -f kube-flannel.yml

Valmis! MÔne aja pÀrast lÀheb esimene K8s sÔlm olekusse Valmis:

NIMED        OLEK     ROLLID    VANUS   VERSIOON
pi-control   Valmis   master    2m      v1.18.6

Töötava sÔlme lisamine

NĂŒĂŒd saab lisada töötaja. Selleks tuleb pĂ€rast Kubernetes'i installimist eespool kirjeldatud stsenaariumi jĂ€rgi lihtsalt tĂ€ita eelnevalt saadud kĂ€sk:

kubeadm join 192.168.88.30:6443 --token a485vl.xjgvzzr2g0xbtbs4 
    --discovery-token-ca-cert-hash sha256:9da6b05aaa5364a9ec59adcc67b3988b9c1b94c15e81300560220acb1779b050

Selle vÔib lugeda klastriks valmis:

root@pi-control:~# kubectl get no
NIMI       OLEK     ROLLID     VANUS    VERSIOON
pi-control  Valmis   master    28m    v1.18.6
pi-worker   Valmis       2m8s   v1.18.6

Mul oli kĂ€epĂ€rast ainult kaks Raspberry Pi, nii et mulle ei meeldinud ĂŒks neist ainult control plane'ile anda. SeetĂ”ttu eemaldasin automaatselt mÀÀratud taandi sĂ”lme pi-control, kĂ€ivitades:

root@pi-control:~# kubectl edit node pi-control


 ja kustutasin read:

 - effect: NoSchedule
   key: node-role.kubernetes.io/master

Klastri vajalik minimaalne tÀitmine

Esiteks vajame Helm. Muidugi, saab kĂ”ik teha ka ilma selleta, kuid Helm vĂ”imaldab mÀÀrata teatud komponente tĂ€iesti ilma failide muutmiseta. Ja tegelikult on see lihtsalt binaarfail, mis "leiba ei kĂŒsi".

Nii et, lÀheme helm.sh docs/installatsiooni sektsiooni ja tÀidame sealt selle kÀsu:

curl -s https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3 | bash

PĂ€rast seda lisame chartide reposi:

helm repo add stable https://kubernetes-charts.storage.googleapis.com/

NĂŒĂŒd paigaldame infrastruktuuri komponente vastavalt kavandatule:

  • Ingress controller;
  • Prometheus;
  • Grafana;
  • cert-manager.

Ingress controller

Esimene komponent — Ingress controller — on seda ĂŒsna lihtne seadistada ja see on «karbist» valmis kasutamiseks. Selleks piisab, kui minna bare-metal jaole veebisaidil ja kĂ€ivitada sealt installimiskĂ€sk:

kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v0.34.1/deploy/static/provider/baremetal/deploy.yaml

Kuid sel hetkel hakkas «maliin» pingutama ja IOPS-i vastu seisma. Asi on selles, et koos Ingress-kontrolleriga installitakse suur hulk ressursse, tehtakse palju API-pĂ€ringuid ja seega kirjutatakse palju andmeid etcd-sse. ÜhesĂ”naga, kas 10. klassi mĂ€lukaart ei ole eriti efektiivne vĂ”i SD-kaartide maht ei piisa sellise koormuse jaoks. KĂŒll aga pĂ€rast viit minutit kĂ”ik kĂ€ivitus.

Loodi namespace ja sinna tekkis kontroller koos kogu vajalikuga:

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          48s

Prometheus

JĂ€rgmised kaks komponenti on ĂŒsna lihtne installida Helm'i kaudu chart repo'st.

Leiame Prometheus, loome namespace ja installime sinna:

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"}

Vaikimisi tellib Prometheus 2 ketast: ĂŒhte Prometheuse andmete jaoks ja teist AlertManageri andmete jaoks. Kuna klastris ei ole loodud storage class'i, ei tellita kettaid ja pod'id ei kĂ€ivitu. Bare metal'ite Kubernetes'i installatsioonide puhul kasutame tavaliselt Ceph rbd, kuid Raspberry Pi puhul on see ilmselge ĂŒlemÀÀrasus.

SeetĂ”ttu loome lihtsa kohalikku salvestust hostpath'il. PV (persistent volume) manifestid prometheus-server'i ja prometheus-alertmanager'i jaoks on ĂŒhendatud failis prometheus-pv.yaml ĂŒhes Git-reposid artikli nĂ€idiste jaoks. PV jaoks tuleb ette luua kataloog soovitud sĂ”lmes, millega tahame Prometheust siduda: nĂ€ites on kirjeldatud nodeAffinity hostname jĂ€rgi pi-worker ja seal on loodud kataloogid. /data/localstorage/prometheus-server ja /data/localstorage/prometheus-alertmanager.

Laadime (kloneerime) manifesti ja lisame Kubernetesesse:

kubectl create -f prometheus-pv.yaml

Sellel etapil kohtasin esmakordselt ARM-arkitektuuri probleemi. Kube-state-metrics, mis installitakse vaikimisi Prometheuse charts, keeldus kÀivitumisest. See andis vea:

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"

Asi on selles, et kube-state-metrics kasutab CoreOS projekti pilti, mis ei ole ARM-i jaoks koostatav:

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.7

Pidin veidi guugeldama ja leidma nÀiteks see pilt. Selleks kasuta uuendame vÀlja, mÀrkides Àra, millist pilti kasutada kube-state-metrics'i jaoks:

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.6

Kontrollime, et kÔik oleks kÀimas:

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          4m52s

Grafana ja cert-manager

Kuidas graafikute ja dashboardide jaoks paigaldada Grafana:

helm install grafana --namespace monitoring stable/grafana  --set ingress.enabled=true --set ingress.hosts={"grafana.home.pi"}

VÀljundi lÔpus nÀitame, kuidas saada autentimiskoode:

kubectl get secret --namespace monitoring grafana -o jsonpath="{.data.admin-password}" | base64 --decode ; echo

Sertifikaatide tellimiseks paigaldame cert-manager. Selle paigaldamiseks saame juhinduda dokumentatsioonis, mis pakub vastavaid kÀske Helm'i jaoks:

helm repo add jetstack https://charts.jetstack.io

helm install 
  cert-manager jetstack/cert-manager 
  --namespace cert-manager 
  --version v0.16.0 
  --set installCRDs=true

Iseendale allkirjastatud sertifikaatide jaoks on kodus selleks tĂ€iesti piisav. Kui aga soovite saada sama Let’s Encrypt, tuleb seadistada ka cluster issuer. TĂ€iendava teabe leiate meie artiklist „SSL-sertifikaadid Let’s Encrypt'i kaudu cert-manageris Kuberneteses».

Olen ise valiku teinud dokumentatsioonis olevast nÀitest, otsustades, et LE staging-versioon on piisav. Muudame nÀites e-posti, salvestame faili ja lisame klastrisse (, otsustades, et staging-versioon LE piisab. Muudame nÀites e-posti, salvestame faili ja lisame klastrisse (cert-manager-cluster-issuer.yaml):

kubectl create -f cert-manager-cluster-issuer.yaml

NĂŒĂŒd saab tellida sertifikaadi, nĂ€iteks Grafana jaoks. Selleks on vajalik domeen ja juurdepÀÀs klastrisse vĂ€ljastpoolt. Domeen mul on, ja olen seadistanud liikluse suunamise portidele 80 ja 443 kodu ruuteris vastavalt loodud ingress-controller'i teenusele:

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   23d

80. port suunisesed ĂŒleviakse 31303 ja 443 — 30498. (Portid genereeritakse juhuslikult, seega vĂ”ivad need olla teised.)

Siin on nÀide sertifikaadist (cert-manager-grafana-certificate.yaml):

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-staging

Lisame selle klastrisse:

kubectl create -f cert-manager-grafana-certificate.yaml

PĂ€rast seda ilmub Ingress ressurss, mille kaudu toimub Let’s Encrypt’i valideerimine:

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

PĂ€rast valideerimise lĂ€bimist nĂ€eme, et ressurss certificate on valmis, ja ĂŒlaltoodud salajas grafana-tls — sertifikaat ja vĂ”ti. VĂ”ime kohe kontrollida, kes sertifikaadi vĂ€lja andis:

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 X1

Naasime Grafanasse. Peame natuke muutma tema Helm-rakendust, muutes TLS-i seadeid vastavalt loodud sertifikaadile.

Selleks laadime charti alla, muudame ja vÀrskendame kohalikust kataloogist:

helm pull --untar stable/grafana

Redigeerime failis grafana/values.yaml TLS-i seaded:

  tls:
    - secretName: grafana-tls
      hosts:
        - grafana.home.pi

Siin on otse vÔimalik seadistada installitud Prometheust andmeallikaks:

datasources:
  datasources.yaml:
    apiVersion: 1
    datasources:
    - name: Prometheus
      type: prometheus
      url: http://prometheus-server:80
      access: proxy
      isDefault: true

NĂŒĂŒd vĂ€rskendame kohalikust kataloogist Grafana charti:

helm upgrade grafana --namespace monitoring ./grafana  --set ingress.enabled=true --set ingress.hosts={"grafana.home.pi"}

Kontrollime, et Ingress grafana oleks lisatud 443 port ja oleks juurdepÀÀs HTTPS-i kaudu:

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; includeSubDomains

Grafana toimimise demonstreerimiseks saab alla laadida ja lisada kube-state-metrics'i dashboardi.Nii see vÀlja nÀeb:

TĂ€ielik Kubernetes nullist Raspberry Pi-l.

Soovitan ka lisada node exporter'i dashboardi: see nĂ€itab ĂŒksikasjalikult, mis toimub 'maliinidega' (CPU koormus, mĂ€lu, vĂ”rgu, ketta ja muu kasutus).

PÀrast seda usun, et klaster on valmis rakenduste vastuvÔtmiseks ja kÀitamiseks!

MĂ€rkus koostamise kohta

Rakenduste koostamiseks ARM-architektuuri alla on vĂ€hemalt kaks varianti. Esiteks, saab koostada ARM-seadmest. Kuid vaadates kahe Raspberry Pi praegust kasutust, sain aru, et nad ei peaks isegi koostamist vastu. Seega tellisin endale uue Raspberry Pi 4 (see on jĂ”ulisem ja seal on lausa 4 GB mĂ€lu) — plaanin sellel koostada.

Teine vĂ”imalus on multicontainer Docker'i pildi koostamine vĂ”imsamal masinal. Selleks on docker buildx laiendus.. Kui rakendus on koostatud keeles, mis vajab kompileerimist, siis on vajalik kross-kompileerimine ARM-i jaoks. Ma ei hakka kĂ”iki seadistusi sellise tee jaoks kirjeldama, kuna see tooks kaasa eraldi artikli. Selle lĂ€henemise rakendamisel on vĂ”imalik saavutada "ĂŒldised" pildid: Docker, mis töötab ARM-masinal, laadib automaatselt vastava arhitektuuri pildi.

KokkuvÔte

Tehtud katse ĂŒletas kĂ”ik mu ootused: [kuni] "vanilje" Kubernetes vajaliku baasi korral tunneb end ARM-il ĂŒsna hĂ€sti, ja selle seadistamise kĂ€igus tekkis vaid paar nĂŒanssi.

Isegi Raspberry Pi 3B+ peavad CPU koormust, kuid nende SD-kaardid on selge pudelikael. Kolllegid ĂŒtlesid, et mĂ”nedes versioonides on vĂ”imalus kĂ€ivituda USB-st, kuhu saab ĂŒhendada SSD: siis on tĂ”enĂ€oliselt olukord parem.

Siin on nÀide CPU koormusest Grafana installimisel:

TĂ€ielik Kubernetes nullist Raspberry Pi-l.

Eksperimentide ja „katsetamiseks“ arvan, et Kubernetes-klaster „malinatel“ edastab tunde eksploateerimisest tunduvalt paremini kui sama Minikube, kuna kĂ”ik klaseeri komponendid seadistatakse ja töötavad „tĂ€iskasvanulikult“.

Tulevikus on plaanis lisada klastrile kogu CI/CD tsĂŒkkel, mis on tĂ€ielikult Rakvere Pi peal teostatud. Samuti oleksin tĂ€nulik, kui keegi jagaks oma kogemusi K8s seadistamise osas AWS Graviton'itel.

P.S. Jah, "production" vÔib olla lÀhemal, kui ma arvasin:

TĂ€ielik Kubernetes nullist Raspberry Pi-l.

P.P.S.

Lugege ka meie blogist:

Allikas: habr.com

Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster