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