Dies ist ein weiterer Kubernetes-bezogener Notebook-Eintrag, in dem ich das Verfahren zum Einrichten eines Kubernetes-Clusters mit K3S in virtuellen Maschinen dokumentieren werde, die mit Canonicals Multipass erstellt wurden. Außerdem werde ich beschreiben, wie kubectl konfiguriert wird, das Kubernetes-Befehlszeilen-Clusterverwaltungstool, um den K3S-Cluster von außerhalb der virtuellen Maschinen zu verwalten, in denen der Cluster ausgeführt wird.
Multipass kann unter Windows, Mac OS X und Linux ausgeführt werden, daher sollte das in diesem Artikel beschriebene Verfahren für alle oben genannten Umgebungen gelten, obwohl ich es nur unter Mac OS X getestet habe.
Hintergrund
Der aufmerksame Leser wird sich an einen kürzlich erschienenen Artikel von mir erinnern, in dem ich beschrieben habe, wie man einen Kubernetes-Cluster in Docker betreibt, und sich vielleicht fragen, warum ich jetzt zu K3S statt zu Kind gewechselt bin.
Dafür gibt es zwei Gründe:
- K3S behauptet, produktionsbereit zu sein.
Vielleicht nicht für die Produktion im Google-Maßstab geeignet, aber für meine Bedürfnisse ausreichend, vermute ich. - K3S ähnelt eher einem echten Kubernetes-Cluster.
In der kurzen Zeit, in der ich mit Kind arbeite, bin ich auf zwei Probleme gestoßen, die mich veranlasst haben, mir K3S anzusehen: - – Art-Cluster kann nicht neu gestartet werden.
- – Kind unterstützt den LoadBalancer-Typ nicht.
Voraussetzungen
Zur Vorbereitung auf K3S installiere ich einige Tools, die ich benötige, und erstelle dann die virtuellen Maschinen, auf denen K3S ausgeführt wird.
Werkzeuge
Vor der Installation von K3S müssen die folgenden Tools auf dem Computer installiert werden, der als Host für die virtuellen Maschinen fungieren soll:
- Multipass
Die virtuelle Maschine von Canonical, in der Instanzen von Ubuntu ausgeführt werden können.
Eine Anleitung zur Installation von Multipass finden Sie hier. - kubectl
Wie zuvor ist kubectl das Befehlszeilen-Cluster-Verwaltungstool von Kubernetes.
Eine Anleitung zur Installation von kubectl finden Sie hier.
Virtuelle Maschinen
Ich werde einen Kubernetes-Cluster erstellen, der aus zwei Knoten besteht; ein Master und ein Agent. Dafür benötige ich zwei virtuelle Maschinen.
Öffnen Sie nach der Installation von Multipass ein Terminalfenster:
- Erstellen und starten Sie die virtuelle Maschine des Masterknotens:
multipass launch --name k3s-master --mem 4G --disk 5G 18.04
multipass launch --name k3s-agent --mem 4G --disk 5G 18.04
- Überprüfen Sie die beiden virtuellen Maschinen:
multipass list
Die Ausgabe sollte ungefähr so aussehen:
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
Notieren Sie sich die IP-Adresse des k3s-Masters – sie wird später bei der Installation von K3S auf dem Agentenknoten benötigt.
Installieren Sie K3S
Im Folgenden wird beschrieben, wie K3S auf den Master- und Agent-Knoten installiert wird.
Installieren Sie K3S auf dem Master-Knoten
In diesem Schritt installieren wir K3S auf dem Master-Knoten und rufen das Master-Knoten-Token ab, das wir später benötigen, um einen K3S-Knoten zu erstellen, der vom Manager verwaltet werden soll.
- Öffnen Sie bei Bedarf ein Terminalfenster.
- Öffnen Sie eine Shell auf der k3s-master-VM:
multipass shell k3s-master
curl -sfL https://get.k3s.io | sh -
In der Konsole sollte eine Ausgabe ähnlich der folgenden erscheinen:
[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
Überprüfen Sie die K3S-Installation:
k3s -version
die Ausgabe des obigen Befehls sieht also so aus:
k3s version v1.17.4+k3s1 (3eee8ac3)
Rufen Sie das Master-Knoten-Token ab:
sudo cat /var/lib/rancher/k3s/server/node-token
K103a5c4b22b4de5715dff39d58b1325c38e84217d40146c0f65249d439cab1a531::server:271a74dadde37a98053a984a8dc676f8
Beenden Sie die k3s-master-VM-Shell:
exit
Installieren Sie K3S auf dem Agentenknoten
Mit der IP-Adresse und dem Knotentoken des K3S-Masters bin ich nun bereit, K3S auf dem Agentenknoten zu installieren:
- Öffnen Sie bei Bedarf ein Terminalfenster.
- Öffnen Sie eine Shell auf der k3s-Agent-VM:
multipass shell k3s-agent
- Installieren Sie die neueste Version von K3S für einen Agentenknoten.
Ersetzen Sie die IP-Adresse des k3s-Masters in der K3S_URL-Variablen und das Node-Token in der K3S_TOKEN-Variablen:
curl -sfL https://get.k3s.io | K3S_URL="https://192.168.64.7:6443" K3S_TOKEN="K103a5c4b22b4de5715dff39d58b1325c38e84217d40146c0f65249d439cab1a531::server:271a74dadde37a98053a984a8dc676f8" sh -
Eine ähnliche Ausgabe sollte in der Konsole erscheinen:
[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
Beenden Sie die k3s-agent-VM-Shell:
exit
Verifizieren Sie den Cluster
Bevor ich kubectl im Multipass-VM-Host (oder anderswo außerhalb der virtuellen K3S-Maschinen) konfiguriere, möchte ich schnell überprüfen, ob der K3S-Cluster richtig eingerichtet ist.
- Öffnen Sie bei Bedarf ein Terminalfenster.
- Öffnen Sie eine Shell auf der k3s-master-VM:
multipass shell k3s-master
Listen Sie die Knoten im Cluster auf:
sudo kubectl get nodes -o wide
In meinem Fall sieht die Knotenliste so aus:
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
Externes kubectl konfigurieren
Wenn der K3S-Cluster eingerichtet und ausgeführt wird, werde ich jetzt kubectl konfigurieren, das ich auf dem VM-Host installiert habe, der mein Entwicklungscomputer ist, um den K3S-Cluster verwalten zu können.
Kubectl-Konfiguration des Master-Knotens abrufen
Um ein externes kubectl-Verwaltungstool zur Verwaltung des gerade erstellten K3S-Clusters konfigurieren zu können, kopiere ich die kubectl-Konfiguration vom Masterknoten und nehme später einige Änderungen vor:
- Öffnen Sie bei Bedarf ein Terminalfenster.
- Öffnen Sie eine Shell auf der k3s-master-VM:
multipass shell k3s-master
- Sehen Sie sich die kubectl-Konfiguration des Master-Knotens an:
sudo kubectl config view
In meinem Fall sieht es so aus:
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
Beachten Sie, dass Ihre Konfigurationsdatei nicht mit der obigen identisch sein wird – das Passwort wird beispielsweise anders sein.
- Beenden Sie die k3s-master-VM-Shell:
exit
kubectl-Konfiguration ersetzen
Ich kann jetzt die kubectl-Konfiguration im VM-Host durch eine modifizierte Version der kubectl-Konfiguration vom Master-Knoten ersetzen:
- Öffnen Sie bei Bedarf ein Terminalfenster.
- Bearbeiten oder erstellen Sie die lokale kubectl-Konfiguration, falls sie nicht vorhanden ist:
vi ~/.kube/config
- Ersetzen Sie den Inhalt, falls vorhanden, durch die kubectl-Konfiguration vom Master-Knoten.
- Ändern Sie die Cluster-IP-Adresse in die IP-Adresse der k3s-Master-VM und konfigurieren Sie sie so, dass die TLS-Überprüfung übersprungen wird.
Das Ergebnis sieht wie folgt aus, wobei die Zeilen 4 und 5 geändert werden:
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
- Speichern Sie die Konfiguration und verlassen Sie vi:
:wq - Überprüfen Sie die Konfiguration:
kubectl get nodes
Die gleichen Knoten wie innerhalb des Master-Knotens sollten jetzt auch aufgelistet werden, wenn auch in einer kompakteren Liste:
NAME STATUS ROLES AGE VERSION
k3s-master Ready master 66m v1.17.4+k3s1
k3s-agent Ready <none> 32m v1.17.4+k3s1
Starten Sie einen K3S-Cluster neu
Einer der Gründe für den Wechsel von Kind zu K3S ist wie in der Einleitung die Möglichkeit, einen K3S-Cluster neu starten zu können. Wenn ich meine Kubernetes-bezogene Arbeit unterbrechen muss, fahre ich einfach meinen Computer herunter, der der Host der virtuellen K3S-Maschinen ist. Wenn ich später den Computer neu starte, muss ich zum Neustarten des K3S-Clusters und Wiederherstellen des vorherigen Zustands lediglich die virtuellen Maschinen des Clusters mit den folgenden zwei Befehlen neu starten:
multipass start k3s-master
multipass start k3s-agent