GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Kubernetes-Cluster mit K3S mit Multipass von Canonical

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


Linux
  1. Was ist Kubernetes? Vollständiger Leitfaden

  2. So richten Sie einen Kubernetes-Cluster mit Rancher ein

  3. So stellen Sie Redis-Cluster auf Kubernetes bereit

  4. So stellen Sie Ihren ersten Pod in einem Kubernetes-Cluster bereit

  5. Kubernetes-Cluster mit Rancher einrichten

So erstellen Sie einen Kubernetes-Cluster mit AWS CLI

So stellen Sie Kubernetes-Cluster auf AWS mit Amazon EKS bereit

Lernen Sie Kubernetes von Ihrem lokalen Computer aus

Erstellen eines einzelnen Kubernetes-Clusters auf Steuerungsebene mit kubeadm

Verwendung von Grafana &Prometheus Kubernetes Cluster Monitoring

So installieren Sie Kubernetes-Cluster auf CentOS 8