Lengkapkan Kubernetes dari awal pada Raspberry Pi

Lengkapkan Kubernetes dari awal pada Raspberry Pi

Baru-baru ini, sebuah syarikat terkenal mengumumkan bahawa ia memindahkan barisan komputer ribanya kepada seni bina ARM. Apabila saya mendengar berita ini, saya teringat: ketika sekali lagi melihat harga untuk EC2 dalam AWS, saya melihat Gravitons dengan harga yang sangat lazat. Tangkapan, sudah tentu, ia adalah ARM. Saya tidak pernah terfikir bahawa ARM agak serius...

Bagi saya, seni bina ini sentiasa menjadi domain mudah alih dan perkara IoT yang lain. Pelayan "Sebenar" pada ARM entah bagaimana luar biasa, dalam beberapa cara malah liar... Walau bagaimanapun, pemikiran baharu melekat di kepala saya, jadi pada hujung minggu saya memutuskan untuk menyemak perkara yang boleh dijalankan pada ARM hari ini. Dan untuk ini saya memutuskan untuk memulakan dengan sesuatu yang dekat dan sayang - kelompok Kubernetes. Dan bukan hanya beberapa jenis "kelompok" konvensional, tetapi segala-galanya "dengan cara dewasa", supaya ia seboleh-bolehnya sama seperti yang saya biasa melihatnya dalam pengeluaran.

Menurut idea saya, kluster harus boleh diakses dari Internet, beberapa aplikasi web harus berjalan di dalamnya, dan sekurang-kurangnya perlu ada pemantauan. Untuk melaksanakan idea ini, anda memerlukan sepasang (atau lebih) Raspberry Pi sekurang-kurangnya model 3B+. AWS boleh menjadi platform untuk eksperimen, tetapi saya berminat dengan "raspberi" (yang masih terbiar). Jadi, kami akan menggunakan gugusan Kubernetes dengan Ingress, Prometheus dan Grafana pada mereka.

Menyediakan "raspberi"

Memasang OS dan SSH

Saya tidak terlalu peduli dengan memilih OS untuk dipasang: Saya baru sahaja menggunakan Raspberry Pi OS Lite terkini laman rasmi. Tersedia di sana dokumentasi pemasangan, semua tindakan yang mesti dilakukan pada semua nod kelompok masa hadapan. Seterusnya, anda perlu melakukan manipulasi berikut (juga pada semua nod).

Selepas menyambungkan monitor dan papan kekunci, anda mesti mengkonfigurasi rangkaian dan SSH dahulu:

  1. Untuk kluster beroperasi, induk mesti mempunyai alamat IP statik, dan nod pekerja mesti mempunyai alamat IP statik. Saya lebih suka alamat statik sepanjang untuk memudahkan persediaan.
  2. Alamat statik boleh dikonfigurasikan dalam OS (dalam fail /etc/dhcpcd.conf terdapat contoh yang sesuai) atau dengan menetapkan pajakan dalam pelayan DHCP penghala yang digunakan (dalam kes saya, rumah).
  3. ssh-server hanya disertakan dalam raspi-config (pilihan antara muka → ssh).

Selepas ini, anda boleh log masuk melalui SSH (log masuk lalai ialah pi, dan kata laluan ialah raspberry atau yang anda tukar) dan teruskan dengan tetapan.

Tetapan lain

  1. Mari kita tetapkan nama hos. Dalam contoh saya mereka akan gunakan pi-control и pi-worker.
  2. Mari kita semak bahawa sistem fail dilanjutkan untuk meliputi keseluruhan cakera (df -h /). Jika perlu, ia boleh dikembangkan menggunakan raspi-config.
  3. Mari tukar kata laluan pengguna lalai dalam raspi-config.
  4. Mari matikan fail swap (ini adalah keperluan Kubernetes; jika anda berminat dengan butiran mengenai topik ini, lihat Mengeluarkan #53533):
    dphys-swapfile swapoff
    systemctl disable dphys-swapfile
  5. Mari kemas kini pakej kepada versi terkini:
    apt-get update && apt-get dist-upgrade -y
  6. Mari pasangkan Docker dan pakej tambahan:
    apt-get install -y docker docker.io apt-transport-https curl bridge-utils iptables-persistent

    Apabila memasang iptables-persistent anda perlu menyimpan tetapan iptables untuk ipv4, dan dalam fail /etc/iptables/rules.v4 - tambah peraturan pada rantai FORWARD, seperti ini:

    # 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. Yang tinggal hanyalah but semula.

Kini anda sudah bersedia untuk memasang kluster Kubernetes anda.

Memasang Kubernetes

Pada peringkat ini, saya sengaja mengetepikan semua perkembangan saya dan korporat kami untuk mengautomasikan pemasangan dan konfigurasi gugusan K8s. Sebaliknya, mari gunakan dokumentasi rasmi dengan kubernetes.io (sedikit ditambah dengan ulasan dan singkatan).

Mari tambahkan repositori 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 update

Selanjutnya dalam dokumentasi adalah dicadangkan untuk memasang CRI (antara muka masa jalan kontena). Memandangkan Docker sudah dipasang, mari teruskan dan pasang komponen utama:

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

Pada langkah memasang komponen utama, saya segera menambah kubernetes-cni, yang diperlukan untuk kluster beroperasi. Dan di sini terdapat satu perkara penting: pakej kubernetes-cni atas sebab tertentu ia tidak mencipta direktori lalai untuk tetapan antara muka CNI, jadi saya terpaksa menciptanya secara manual:

mkdir -p /etc/cni/net.d

Untuk bahagian belakang rangkaian berfungsi, yang akan dibincangkan di bawah, anda perlu memasang pemalam untuk CNI. Saya memilih pemalam portmap yang biasa dan mudah difahami oleh saya (untuk senarai lengkap, lihat dokumentasi):

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

Mengkonfigurasi Kubernetes

Nod dengan satah kawalan

Memasang kluster itu sendiri agak mudah. Dan untuk mempercepatkan proses ini dan mengesahkan bahawa imej Kubernetes tersedia, anda boleh menjalankan:

kubeadm config images pull

Sekarang kami menjalankan pemasangan itu sendiri - mulakan satah kawalan kluster:

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

Sila ambil perhatian bahawa subnet untuk perkhidmatan dan pod tidak boleh bertindih antara satu sama lain atau dengan rangkaian sedia ada.

Pada akhirnya, kami akan ditunjukkan mesej bahawa semuanya baik-baik saja, dan pada masa yang sama mereka akan memberitahu kami cara melampirkan nod pekerja pada satah kawalan:

Your Kubernetes control-plane has initialized successfully!
To start using your cluster, you need to run the following as a regular user:
 mkdir -p $HOME/.kube
 sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
 sudo chown $(id -u):$(id -g) $HOME/.kube/config
You should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
 https://kubernetes.io/docs/concepts/cluster-administration/addons/
You can now join any number of the control-plane node running the following command on each as root:
 kubeadm join 192.168.88.30:6443 --token a485vl.xjgvzzr2g0xbtbs4 
   --discovery-token-ca-cert-hash sha256:9da6b05aaa5364a9ec59adcc67b3988b9c1b94c15e81300560220acb1779b050 
   --contrl-plane --certificate-key 72a3c0a14c627d6d7fdade1f4c8d7a41b0fac31b1faf0d8fdf9678d74d7d2403
Please note that the certificate-key gives access to cluster sensitive data, keep it secret!
As a safeguard, uploaded-certs will be deleted in two hours; If necessary, you can use
"kubeadm init phase upload-certs --upload-certs" to reload certs afterward.
Then you can join any number of worker nodes by running the following on each as root:
kubeadm join 192.168.88.30:6443 --token a485vl.xjgvzzr2g0xbtbs4 
   --discovery-token-ca-cert-hash sha256:9da6b05aaa5364a9ec59adcc67b3988b9c1b94c15e81300560220acb1779b050

Mari ikuti cadangan untuk menambah konfigurasi untuk pengguna. Pada masa yang sama, saya mengesyorkan menambah autolengkap untuk kubectl dengan segera:

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

Pada peringkat ini, anda sudah boleh melihat nod pertama dalam kluster (walaupun ia belum bersedia lagi):

root@pi-control:~# kubectl get no
NAME         STATUS     ROLES    AGE   VERSION
pi-control   NotReady   master   29s   v1.18.6

Konfigurasi rangkaian

Seterusnya, seperti yang dinyatakan dalam mesej selepas pemasangan, anda perlu memasang rangkaian ke dalam kelompok. Dokumentasi menawarkan pilihan daripada Calico, Cilium, contiv-vpp, Kube-router dan Weave Net... Di sini saya menyimpang daripada arahan rasmi dan memilih pilihan yang lebih biasa dan mudah difahami untuk saya: flanel dalam mod hos-gw (untuk maklumat lanjut tentang bahagian belakang yang tersedia, lihat dokumentasi projek).

Memasangnya dalam kelompok agak mudah. Mula-mula, muat turun manifes:

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

Kemudian tukar jenis dengan dalam tetapan vxlan pada host-gw:

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

... dan subnet pod - daripada nilai lalai kepada nilai yang ditentukan semasa permulaan kluster:

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

Selepas itu, kami mencipta sumber:

kubectl create -f kube-flannel.yml

sedia! Selepas beberapa lama, nod K8s pertama akan bertukar kepada status Ready:

NAME         STATUS   ROLES    AGE   VERSION
pi-control   Ready    master   2m    v1.18.6

Menambah Nod Pekerja

Kini anda boleh menambah pekerja. Untuk melakukan ini - selepas memasang Kubernetes sendiri mengikut senario yang diterangkan di atas - anda hanya perlu menjalankan arahan yang diterima sebelum ini:

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

Pada ketika ini kita boleh mengandaikan bahawa kluster sudah sedia:

root@pi-control:~# kubectl get no
NAME         STATUS   ROLES    AGE    VERSION
pi-control   Ready    master   28m    v1.18.6
pi-worker    Ready    <none>   2m8s   v1.18.6

Saya hanya mempunyai dua Raspberry Pis di tangan, jadi memberikan salah satu daripadanya sahaja Saya tidak mahu ia di bawah pesawat kawalan. Jadi saya mengeluarkan kotoran yang dipasang secara automatik dari nod kawalan pi dengan menjalankan:

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

... dan mengalih keluar baris:

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

Mengisi kluster dengan minimum yang diperlukan

Pertama sekali kita perlukan Helm. Sudah tentu, anda boleh melakukan segala-galanya tanpa itu, tetapi Helm membenarkan anda menyesuaikan beberapa komponen secara literal mengikut budi bicara anda tanpa menyunting fail. Dan sebenarnya, ia hanyalah fail binari yang "tidak meminta roti."

Jadi mari kita pergi ke helm.sh ke bahagian dokumen/pemasangan dan laksanakan arahan dari sana:

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

Selepas itu, tambahkan repositori carta:

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

Sekarang mari pasang komponen infrastruktur seperti yang dirancang:

  • Pengawal masuk;
  • Prometheus;
  • Grafana;
  • pengurus sijil.

Pengawal masuk

Komponen pertama ialah Pengawal masuk - Pemasangan agak mudah dan sedia untuk digunakan di luar kotak. Untuk melakukan ini, hanya pergi ke bahagian logam kosong di tapak dan jalankan arahan pemasangan dari sana:

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

Walau bagaimanapun, pada masa ini "raspberi" mula tegang dan memasuki cakera IOPS. Faktanya ialah bersama-sama dengan pengawal Ingress, sejumlah besar sumber dipasang, banyak permintaan kepada API dibuat dan, dengan itu, banyak data ditulis kepada etcd. Secara umum, sama ada kad memori kelas 10 tidak begitu produktif, atau kad SD pada dasarnya tidak mencukupi untuk beban sedemikian. Namun, selepas kira-kira 5 minit semuanya bermula.

Ruang nama telah dicipta dan pengawal dan semua yang diperlukan muncul di dalamnya:

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

Dua komponen seterusnya agak mudah untuk dipasang melalui Helm dari repo carta.

Kita dapati Prometheus, cipta ruang nama dan tetapkannya kepada:

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

Secara lalai, Prometheus memesan 2 cakera: untuk data Prometheus itu sendiri dan untuk data AlertManager. Memandangkan kelas storan belum dibuat dalam kelompok, cakera tidak akan dipesan dan pod tidak akan bermula. Untuk pemasangan Kubernetes logam kosong, kami biasanya menggunakan Ceph rbd, tetapi dalam kes Raspberry Pi ini jelas berlebihan.

Oleh itu, mari kita cipta storan tempatan yang mudah pada laluan hos. PV (isipadu berterusan) manifes untuk prometheus-server dan prometheus-alertmanager digabungkan dalam fail prometheus-pv.yaml в Repositori Git dengan contoh untuk artikel. Direktori untuk PV diperlukan terlebih dahulu buat pada cakera nod yang kita ingin ikat Prometheus: dalam contoh ia ditulis nodeAffinity dengan nama hos pi-worker dan direktori dicipta di atasnya /data/localstorage/prometheus-server и /data/localstorage/prometheus-alertmanager.

Muat turun (klon) manifes dan tambahkannya pada Kubernetes:

kubectl create -f prometheus-pv.yaml

Pada peringkat ini, saya pertama kali menghadapi masalah seni bina ARM. Kube-state-metrics, yang dipasang secara lalai dalam carta Prometheus, enggan bermula. Ia memberikan ralat:

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"

Hakikatnya ialah kube-state-metrics menggunakan imej projek CoreOS, yang tidak disusun untuk 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.7

Saya terpaksa melakukan googling sedikit dan mencari, sebagai contoh, imej ini. Untuk menggunakannya, mari kemas kini keluaran untuk menunjukkan imej yang hendak digunakan untuk 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.6

Mari kita semak bahawa semuanya telah bermula:

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 dan pengurus sijil

Untuk carta dan papan pemuka kami tetapkan grafana:

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

Pada akhir output kami akan ditunjukkan cara mendapatkan kata laluan akses:

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

Untuk memesan sijil kami akan pasang pengurus sijil. Untuk memasangnya, sila rujuk dokumentasi, yang menawarkan arahan yang sepadan untuk 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=true

Untuk sijil yang ditandatangani sendiri untuk kegunaan rumah, ini cukup memadai. Jika anda perlu mendapatkan yang sama Ayo Sulitkan, maka anda juga perlu mengkonfigurasi pengeluar kluster. Butiran mengenai perkara ini boleh didapati dalam artikel kami "Sijil SSL daripada Let's Encrypt dengan pengurus sijil dalam Kubernetes'.

Saya sendiri menetap pada pilihan daripada contoh dalam dokumentasi, memutuskan bahawa pilihan pementasan LE akan mencukupi. Kami menukar e-mel dalam contoh, simpan ke fail dan tambahkannya ke kluster (sijil-pengurus-pengeluar-kluster.yaml):

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

Kini anda boleh memesan sijil, sebagai contoh, untuk Grafana. Ini memerlukan domain dan akses kepada kluster dari luar. Saya mempunyai domain dan saya mengkonfigurasi trafik dengan memajukan port 80 dan 443 pada penghala rumah saya mengikut perkhidmatan pengawal masuk yang dibuat:

kubectl -n ingress-nginx get svc
NAME                                 TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)                      AGE
ingress-nginx-controller             NodePort    10.2.206.61    <none>        80:31303/TCP,443:30498/TCP   23d

Dalam kes ini, port 80 diterjemahkan kepada 31303, dan port 443 kepada 30498. (Port dijana secara rawak, jadi port anda akan berbeza.)

Berikut adalah contoh sijil (sijil-pengurus-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

Tambahkannya pada kluster:

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

Selepas ini, sumber Ingress akan muncul, yang melaluinya pengesahan Let's Encrypt akan berlaku:

root@pi-control:~# kubectl -n monitoring get ing
NAME                        CLASS    HOSTS                        ADDRESS         PORTS   AGE
cm-acme-http-solver-rkf8l   <none>   grafana.home.pi      192.168.88.31   80      72s
grafana                     <none>   grafana.home.pi      192.168.88.31   80      6d17h
prometheus-server           <none>   prometheus.home.pi   192.168.88.31   80      8d

Selepas pengesahan berlalu, kita akan melihat bahawa sumber itu certificate bersedia, dan dalam rahsia di atas grafana-tls - sijil dan kunci. Anda boleh segera menyemak siapa yang mengeluarkan sijil:

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

Mari kembali ke Grafana. Kami perlu membetulkan sedikit keluaran Helmnya dengan menukar tetapan untuk TLS agar sepadan dengan sijil yang dijana.

Untuk melakukan ini, muat turun carta, edit dan kemas kini daripada direktori tempatan:

helm pull --untar stable/grafana

Mengedit dalam fail grafana/values.yaml Parameter TLS:

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

Di sini anda boleh segera mengkonfigurasi Prometheus yang dipasang sebagai datasource:

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

Kini kami mengemas kini carta Grafana dari direktori tempatan:

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

Menyemak apa yang ada dalam Ingress grafana port 443 telah ditambah dan terdapat akses melalui HTTPS:

root@pi-control:~# kubectl -n monitoring get ing grafana
NAME      CLASS    HOSTS                     ADDRESS         PORTS     AGE
grafana   <none>   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=%2F; Path=/; HttpOnly; SameSite=Lax
x-frame-options: deny
strict-transport-security: max-age=15724800; includeSubDomains

Untuk menunjukkan Grafana dalam tindakan, anda boleh memuat turun dan menambah papan pemuka untuk kube-state-metrics. Inilah rupanya:

Lengkapkan Kubernetes dari awal pada Raspberry Pi

Saya juga mengesyorkan menambah papan pemuka untuk pengeksport nod: ia akan menunjukkan secara terperinci apa yang berlaku dengan "raspberi" (beban CPU, memori, rangkaian, penggunaan cakera, dll.).

Selepas ini saya fikir begitu kluster sedia menerima dan menjalankan permohonan!

Nota tentang perhimpunan

Terdapat sekurang-kurangnya dua pilihan untuk membina aplikasi untuk seni bina ARM. Pertama, anda boleh membina pada peranti ARM. Walau bagaimanapun, selepas melihat pelupusan semasa dua Raspberry Pis, saya menyedari bahawa mereka juga tidak akan bertahan dalam pemasangan. Oleh itu, saya memesan sendiri Raspberry Pi 4 baharu (ia lebih berkuasa dan mempunyai memori sebanyak 4 GB) - Saya bercadang untuk membinanya.

Pilihan kedua ialah membina imej Docker berbilang gerbang pada mesin yang lebih berkuasa. Untuk ini ada sambungan docker buildx. Jika aplikasi dalam bahasa yang disusun, maka kompilasi silang untuk ARM akan diperlukan. Saya tidak akan menerangkan semua tetapan untuk laluan ini, kerana... Ini memerlukan artikel yang berasingan. Dengan melaksanakan pendekatan ini, adalah mungkin untuk mencapai imej "sejagat": Docker yang berjalan pada mesin ARM sendiri akan memuat turun secara automatik imej yang sepadan dengan seni bina.

Kesimpulan

Percubaan melebihi semua jangkaan saya: [sekurang-kurangnya] Kubernetes "vanila" dengan asas yang diperlukan terasa baik pada ARM, dan hanya beberapa nuansa yang timbul dengan konfigurasinya.

Raspberry Pi 3B+ sendiri menyimpan beban pada CPU, tetapi kad SD mereka adalah halangan yang jelas. Rakan sekerja mencadangkan bahawa dalam beberapa versi adalah mungkin untuk boot dari USB, di mana anda boleh menyambungkan SSD: maka kemungkinan besar keadaan akan menjadi lebih baik.

Berikut ialah contoh beban CPU semasa memasang Grafana:

Lengkapkan Kubernetes dari awal pada Raspberry Pi

Untuk eksperimen dan "mencubanya", pada pendapat saya, kluster Kubernetes pada "raspberi" menyampaikan perasaan operasi jauh lebih baik daripada Minikube yang sama, kerana semua komponen kluster dipasang dan berfungsi "seperti orang dewasa".

Pada masa hadapan, terdapat idea untuk menambah kepada kluster keseluruhan kitaran CI/CD, dilaksanakan sepenuhnya pada Raspberry Pi. Saya juga akan gembira jika seseorang berkongsi pengalaman mereka dalam menyediakan K8 pada AWS Gravitons.

PS Ya, "pengeluaran" mungkin lebih dekat daripada yang saya fikirkan:

Lengkapkan Kubernetes dari awal pada Raspberry Pi

PPS

Baca juga di blog kami:

Sumber: www.habr.com

Beli pengehosan yang boleh dipercayai untuk tapak dengan perlindungan DDoS, pelayan VPS VDS 🔥 Beli pengehosan laman web yang boleh dipercayai dengan perlindungan DDoS, pelayan VPS VDS | ProHoster