GNU/Linux >> Linux Esercitazione >  >> Linux

Cluster Kubernetes che utilizza K3S con Multipass di Canonical

Questa è un'altra voce del taccuino relativa a Kubernetes in cui documenterò la procedura per configurare un cluster Kubernetes utilizzando K3S in macchine virtuali create con Multipass di Canonical. Inoltre, descriverò come configurare kubectl, lo strumento di gestione del cluster della riga di comando di Kubernetes per gestire il cluster K3S dall'esterno delle macchine virtuali in cui verrà eseguito il cluster.

Multipass può essere eseguito in Windows, Mac OS X e Linux, quindi la procedura descritta in questo articolo dovrebbe applicarsi a tutti gli ambienti sopra menzionati anche se l'ho testato solo in Mac OS X.

Sfondo

Il lettore astuto ricorderà un mio recente articolo in cui ho descritto come eseguire un cluster Kubernetes in Docker e potrebbe chiedersi perché ora sono passato a K3S invece di Kind.
Ci sono due ragioni per questo:

  • K3S afferma di essere pronto per la produzione.
    Forse non è pronto per la produzione su scala Google, ma sospetto abbastanza per le mie esigenze.
  • K3S è più simile a un vero cluster Kubernetes.
    Durante il breve tempo in cui ho lavorato con Kind, ho riscontrato due problemi che mi hanno fatto dare un'occhiata a K3S:
  • – Impossibile riavviare il cluster Kind.
  • – Kind non supporta il tipo LoadBalancer.

Prerequisiti

Per prepararmi a K3S, installerò un paio di strumenti di cui avrò bisogno e quindi creerò le macchine virtuali in cui verrà eseguito K3S.

Strumenti

Prima di installare K3S, è necessario installare i seguenti strumenti sul computer che fungerà da host per le macchine virtuali:

  • Multipasso
    La macchina virtuale di Canonical in cui è possibile eseguire istanze di Ubuntu.
    Le istruzioni su come installare Multipass sono disponibili qui.
  • kubectl
    Come prima, kubectl è lo strumento di gestione del cluster della riga di comando di Kubernetes.
    Le istruzioni su come installare kubectl sono disponibili qui.

Macchine virtuali

Creerò un cluster Kubernetes composto da due nodi; un maestro e un agente. Per questo avrò bisogno di due macchine virtuali.

Dopo aver installato Multipass, apri una finestra di terminale:

  • Crea e avvia la macchina virtuale del nodo master:
multipass launch --name k3s-master --mem 4G --disk 5G 18.04
multipass launch --name k3s-agent --mem 4G --disk 5G 18.04
  • Verifica le due macchine virtuali:
multipass list

L'output dovrebbe essere simile al seguente:

Name                    State             IPv4             Image
k3s-agent               Running           192.168.64.10    Ubuntu 18.04 LTS
k3s-master              Running           192.168.64.7     Ubuntu 18.04 LTS

Prendere nota dell'indirizzo IP del k3s-master:sarà necessario in seguito durante l'installazione di K3S sul nodo dell'agente.

Installa K3S

Di seguito viene descritto come installare K3S sui nodi master e agent.

Installa K3S sul nodo principale

In questo passaggio installeremo K3S sul nodo master e recupereremo il token del nodo master di cui avremo bisogno in seguito per creare un nodo K3S che dovrà essere gestito dal gestore.

  • Apri una finestra di terminale, se necessario.
  • Apri una shell sulla VM k3s-master:
multipass shell k3s-master
curl -sfL https://get.k3s.io | sh -

Nella console dovrebbe apparire un output simile al seguente:

[INFO]  Finding latest release
[INFO]  Using v1.17.4+k3s1 as release
[INFO]  Downloading hash https://github.com/rancher/k3s/releases/download/v1.17.4+k3s1/sha256sum-amd64.txt
[INFO]  Downloading binary https://github.com/rancher/k3s/releases/download/v1.17.4+k3s1/k3s
[INFO]  Verifying binary download
[INFO]  Installing k3s to /usr/local/bin/k3s
chcon: can't apply partial context to unlabeled file '/usr/local/bin/k3s'
[INFO]  Creating /usr/local/bin/kubectl symlink to k3s
[INFO]  Creating /usr/local/bin/crictl symlink to k3s
[INFO]  Creating /usr/local/bin/ctr symlink to k3s
[INFO]  Creating killall script /usr/local/bin/k3s-killall.sh
[INFO]  Creating uninstall script /usr/local/bin/k3s-uninstall.sh
[INFO]  env: Creating environment file /etc/systemd/system/k3s.service.env
[INFO]  systemd: Creating service file /etc/systemd/system/k3s.service
[INFO]  systemd: Enabling k3s unit
Created symlink /etc/systemd/system/multi-user.target.wants/k3s.service → /etc/systemd/system/k3s.service.
[INFO]  systemd: Starting k3s

Verifica l'installazione di K3S:

k3s -version

quindi l'output del comando precedente è simile a questo:

k3s version v1.17.4+k3s1 (3eee8ac3)

Recupera il token del nodo principale:

sudo cat /var/lib/rancher/k3s/server/node-token
K103a5c4b22b4de5715dff39d58b1325c38e84217d40146c0f65249d439cab1a531::server:271a74dadde37a98053a984a8dc676f8

Esci dalla shell della VM k3s-master:

exit

Installa K3S sul nodo agente

Con l'indirizzo IP e il token del nodo del master K3S, sono ora pronto per installare K3S sul nodo dell'agente:

  • Apri una finestra di terminale, se necessario.
  • Apri una shell sulla VM dell'agente k3s:
multipass shell k3s-agent
  • Installa l'ultima versione di K3S per un nodo agente.
    Sostituisci l'indirizzo IP del k3s-master nella variabile K3S_URL e il token del nodo nella variabile K3S_TOKEN:
curl -sfL https://get.k3s.io | K3S_URL="https://192.168.64.7:6443" K3S_TOKEN="K103a5c4b22b4de5715dff39d58b1325c38e84217d40146c0f65249d439cab1a531::server:271a74dadde37a98053a984a8dc676f8" sh -

Un output simile a questo dovrebbe apparire nella console:

[INFO]  Finding latest release
[INFO]  Using v1.17.4+k3s1 as release
[INFO]  Downloading hash https://github.com/rancher/k3s/releases/download/v1.17.4+k3s1/sha256sum-amd64.txt
[INFO]  Downloading binary https://github.com/rancher/k3s/releases/download/v1.17.4+k3s1/k3s
[INFO]  Verifying binary download
[INFO]  Installing k3s to /usr/local/bin/k3s
chcon: can't apply partial context to unlabeled file '/usr/local/bin/k3s'
[INFO]  Creating /usr/local/bin/kubectl symlink to k3s
[INFO]  Creating /usr/local/bin/crictl symlink to k3s
[INFO]  Creating /usr/local/bin/ctr symlink to k3s
[INFO]  Creating killall script /usr/local/bin/k3s-killall.sh
[INFO]  Creating uninstall script /usr/local/bin/k3s-agent-uninstall.sh
[INFO]  env: Creating environment file /etc/systemd/system/k3s-agent.service.env
[INFO]  systemd: Creating service file /etc/systemd/system/k3s-agent.service
[INFO]  systemd: Enabling k3s-agent unit
Created symlink /etc/systemd/system/multi-user.target.wants/k3s-agent.service → /etc/systemd/system/k3s-agent.service.
[INFO]  systemd: Starting k3s-agent

Esci dalla shell della macchina virtuale dell'agente k3s:

exit

Verifica il cluster

Prima di configurare kubectl nell'host Multipass VM (o altrove, al di fuori delle macchine virtuali K3S), voglio verificare rapidamente che il cluster K3S sia impostato correttamente.

  • Apri una finestra di terminale, se necessario.
  • Apri una shell sulla VM k3s-master:
multipass shell k3s-master

Elenca i nodi nel cluster:

sudo kubectl get nodes -o wide

Nel mio caso, l'elenco dei nodi è simile a questo:

NAME         STATUS   ROLES    AGE     VERSION        INTERNAL-IP     EXTERNAL-IP   OS-IMAGE             KERNEL-VERSION      CONTAINER-RUNTIME
k3s-agent    Ready    <none>   5m31s   v1.17.4+k3s1   192.168.64.10   <none>        Ubuntu 18.04.4 LTS   4.15.0-91-generic   containerd://1.3.3-k3s2
k3s-master   Ready    master   39m     v1.17.4+k3s1   192.168.64.7    <none>        Ubuntu 18.04.4 LTS   4.15.0-91-generic   containerd://1.3.3-k3s2
exit

Configura kubectl esterno

Con il cluster K3S attivo e funzionante, configurerò kubectl che ho installato nell'host della macchina virtuale, che è il mio computer di sviluppo, per poter gestire il cluster K3S.

Recupera la configurazione kubectl del nodo principale

Per poter configurare uno strumento di gestione kubectl esterno per la gestione del cluster K3S appena creato, copio la configurazione di kubectl dal nodo master e successivamente apporto alcune modifiche:

  • Apri una finestra di terminale, se necessario.
  • Apri una shell sulla VM k3s-master:

multipass shell k3s-master

  • Visualizza la configurazione kubectl del nodo master:

sudo kubectl config view

Nel mio caso, si presenta così:

apiVersion: v1
clusters:
- cluster:
    certificate-authority-data: DATA+OMITTED
    server: https://127.0.0.1:6443
  name: default
contexts:
- context:
    cluster: default
    user: default
  name: default
current-context: default
kind: Config
preferences: {}
users:
- name: default
  user:
    password: ea3527757bd8c5c9ae8dbb00fef7595c
    username: admin

Nota che il tuo file di configurazione non sarà identico a quello sopra, ad esempio la password sarà diversa.

  • Esci dalla shell della VM k3s-master:

exit

Sostituisci configurazione kubectl

Ora posso sostituire la configurazione kubectl nell'host VM con una versione modificata della configurazione kubectl dal nodo master:

  • Apri una finestra di terminale, se necessario.
  • Modifica, o crea se non esiste, la configurazione kubectl locale:

vi ~/.kube/config

  • Sostituisci il contenuto, se presente, con la configurazione kubectl dal nodo master.
  • Cambia l'indirizzo IP del cluster con l'indirizzo IP della macchina virtuale k3s-master e configura per saltare la verifica TLS.
    Il risultato sarà simile al seguente, con le righe 4 e 5 modificate:
apiVersion: v1
clusters:
- cluster:
    insecure-skip-tls-verify: true
    server: https://192.168.64.7:6443
  name: default
contexts:
- context:
    cluster: default
    user: default
  name: default
current-context: default
kind: Config
preferences: {}
users:
- name: default
  user:
    password: ea3527757bd8c5c9ae8dbb00fef7595c
    username: admin
  • Salva la configurazione ed esci da vi:
    :wq
  • Verifica la configurazione:

kubectl get nodes

Ora dovrebbero essere elencati anche gli stessi nodi elencati dall'interno del nodo master, sebbene in un elenco più compatto:

NAME         STATUS   ROLES    AGE   VERSION
k3s-master   Ready    master   66m   v1.17.4+k3s1
k3s-agent    Ready    <none>   32m   v1.17.4+k3s1

Riavvia un cluster K3S

Come nell'introduzione, uno dei motivi per passare da Kind a K3S è la possibilità di poter riavviare un cluster K3S. Se devo interrompere il mio lavoro relativo a Kubernetes, spengo semplicemente il mio computer, quello che è l'host delle macchine virtuali K3S. Quando in seguito riavvio il computer, tutto ciò che devo fare per riavviare il cluster K3S e riportarlo allo stato precedente è riavviare le macchine virtuali del cluster con i seguenti due comandi:

multipass start k3s-master

multipass start k3s-agent


Linux
  1. Cos'è Kubernetes? Guida completa

  2. Come configurare un cluster Kubernetes con Rancher

  3. Come distribuire il cluster Redis su Kubernetes

  4. Come distribuire il tuo primo pod su un cluster Kubernetes

  5. Imposta il cluster Kubernetes con Rancher

Come creare un cluster Kubernetes con AWS CLI

Come distribuire il cluster Kubernetes su AWS con Amazon EKS

Inizia a imparare Kubernetes dalla tua macchina locale

Creazione di un singolo cluster Kubernetes del piano di controllo con kubeadm

Utilizzo di Grafana &Prometheus Kubernetes Cluster Monitoring

Come installare il cluster Kubernetes su CentOS 8