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

Vollständiger Leitfaden für Anfänger zur Kubernetes-Cluster-Bereitstellung auf CentOS (und anderen Linux)

Ich hoffe, Sie sind mit den grundlegenden Kubernetes-Begriffen wie Knoten, Dienst, Cluster vertraut, da ich diese Dinge hier nicht erklären werde.

Dies ist ein schrittweises Tutorial, das Ihnen zeigt, wie Sie einen produktionsbereiten Kubernetes-Cluster bereitstellen.

Produktion bereit? Ja, die Beispiele verwenden eine Beispieldomäne. Wenn Sie also eine Domäne besitzen, können Sie sie auf einer öffentlich zugänglichen Infrastruktur konfigurieren. Sie können es auch für lokale Tests verwenden. Es liegt ganz bei Ihnen.

Ich habe CentOS Linux in den Beispielen verwendet, aber Sie sollten in der Lage sein, andere Linux-Distributionen zu verwenden. Mit Ausnahme der Installationsbefehle sollten die restlichen Schritte auf alle anwendbar sein.

Ich werde diesen einfachen Cluster aus einem Master-/Kontrollknoten und zwei Worker-Knoten verwenden:

Das Tutorial ist in zwei Hauptteile unterteilt.

Der erste Teil ist grundsätzlich Voraussetzung und befasst sich mit der Vorbereitung Ihrer Maschinen, indem Sie die folgenden Dinge tun:

  • Hostnamen auf allen Hosts korrekt konfigurieren
  • Schalten Sie den Swap auf allen Knoten aus
  • Firewall-Regeln hinzufügen
  • IPtables konfigurieren
  • SELinux deaktivieren

Der zweite Teil ist die eigentliche Bereitstellung des Kubernetes-Clusters und besteht aus den folgenden Schritten:

  • Kubernetes-Repository konfigurieren
  • Installieren Sie kubelet, kubeadm, kubectl und docker
  • Aktivieren und starten Sie den Kubelet- und Docker-Dienst
  • Bash-Vervollständigungen aktivieren
  • Cluster mit kubeadm erstellen
  • Pod-Netzwerk einrichten
  • Arbeiterknoten beitreten
  • Testen Sie den Cluster, indem Sie einen Test-Pod erstellen

Teil 1:Vorbereiten Ihrer Systeme für die Kubernetes-Cluster-Bereitstellung

Sie benötigen 3 Server, die auf virtuellen Maschinen oder Bare Metal oder einer Cloud-Plattform wie Linode, DigitalOcean oder Azure laufen.

Ich habe 3 CentOS-VMs mit folgenden Details:

  • Kubernetes-Master-Knoten – 172.42.42.230 kmaster-centos7.example.com/kmaster-centos7
  • Kubernetes-Worker-Knoten 1 – 172.42.42.231 kworker-centos71.example.com/kworker-centos71
  • Kubernetes-Worker-Knoten 2 – 172.42.42.232 kworker-centos72.example.com/kworker-centos72

Bitte überprüfen Sie die IP-Adressen Ihrer Maschinen und ändern Sie sie entsprechend.

Schritt 1. Hostnamen auf allen Systemen korrekt konfigurieren

Sie können die IP und die entsprechenden Subdomain-Informationen hinzufügen, indem Sie die DNS-Einträge Ihrer Domain ändern.

Falls Sie keinen Zugriff auf das DNS haben, aktualisieren Sie die Datei /etc/hosts auf Master- und Worker-Knoten mit den folgenden Informationen:

[[email protected] ~]# cat /etc/hosts
127.0.0.1       kmaster-centos7.example.com     kmaster-centos7
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
172.42.42.230 kmaster-centos7.example.com   kmaster-centos7
172.42.42.231 kworker-centos71.example.com  kworker-centos71
172.42.42.232 kworker-centos72.example.com  kworker-centos72
[[email protected] ~]#

Pingen Sie die Worker-Knoten, um zu überprüfen, ob die Hostdatei-Änderungen einwandfrei funktionieren.

Schritt 2. Deaktivieren Sie den Swap (aus Leistungsgründen)

Der Kubernetes-Scheduler bestimmt den besten verfügbaren Knoten, auf dem neu erstellte Pods bereitgestellt werden. Wenn Speicheraustausch auf einem Hostsystem zulässig ist, kann dies zu Leistungs- und Stabilitätsproblemen in Kubernetes führen.

Aus diesem Grund erfordert Kubernetes, dass Sie Swap auf allen Knoten deaktivieren:

swapoff -a

Schritt 3. Firewallregeln hinzufügen

Die Knoten, Container und Pods müssen in der Lage sein, über den Cluster hinweg zu kommunizieren, um ihre Funktionen auszuführen. Firewalld ist in CentOS standardmäßig aktiviert, daher wäre es ratsam, die erforderlichen Ports zu öffnen.

Auf dem Master-Knoten benötigen Sie diese Ports:

  • 6443 :Kubernetes-API-Server :Wird von allen verwendet
  • 2379–2380 :etcd-Server-Client-API:verwendet von kube-apiserver, etcd
  • 10250 :Kubelet API :Wird von Self verwendet, Steuerungsebene
  • 10251 :kube-scheduler :selbst verwendet
  • 10252 :kube-controller-manager :wird von mir selbst verwendet

Auf Worker-Knoten sind diese Ports erforderlich:

  • 10250 :Kubelet API :Wird von Self verwendet, Steuerungsebene
  • 30000–32767 :NodePort-Dienste :von allen verwendet

Der Befehl firewall-cmd öffnet Port 6443 auf diese Weise:

firewall-cmd --permanent --add-port=6443/tcp

Verwenden Sie auf den Master- und Worker-Knoten den obigen Befehl, um die erforderlichen Ports zu öffnen, die in diesem Abschnitt erwähnt wurden.

Für den Portbereich können Sie die Portnummer durch den Bereich wie firewall-cmd --permanent --add-port=2379-2380/tcp ersetzen .

Nachdem Sie die neuen Firewall-Regeln auf jedem Computer hinzugefügt haben, laden Sie die Firewall neu:

firewall-cmd --reload

Schritt 4. Konfigurieren Sie iptables

Stellen Sie auf Master- und Worker-Knoten sicher, dass der br_netfilter Kernel-Modul geladen. Dies kann durch Ausführen von lsmod | grep br_netfilter . Um es explizit zu laden, rufen Sie sudo modprobe br_netfilter auf .

Legen Sie die net.bridge.bridge-nf-call-iptables fest auf ‚1‘ in Ihrer sysctl-Konfigurationsdatei. Dadurch wird sichergestellt, dass Pakete während der Filterung und Portweiterleitung ordnungsgemäß von IP-Tabellen verarbeitet werden.

[[email protected] ~]# cat <<EOF > /etc/sysctl.d/k8s.conf
> net.bridge.bridge-nf-call-ip6tables = 1
> net.bridge.bridge-nf-call-iptables = 1
> EOF

Führen Sie diesen Befehl aus, damit die Änderungen wirksam werden:

sysctl --system

Schritt 5. Deaktivieren Sie SELinux (für Red Hat und CentOS)

Die zugrunde liegenden Container müssten auf das Host-Dateisystem zugreifen. CentOS wird mit SELinux (Security Enhanced Linux) geliefert, das im Erzwingungsmodus aktiviert ist. Dies könnte den Zugriff auf das Host-Dateisystem blockieren.

Sie können SELinux entweder deaktivieren oder in den Permissive-Modus versetzen, wodurch seine Sicherheitsfunktionen effektiv deaktiviert werden.

[[email protected] ~]# setenforce 0
[[email protected] ~]# sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config
[[email protected] ~]#

Teil 2:Kubernetes-Cluster bereitstellen

Nachdem Sie nun die richtigen Einstellungen auf Ihren Master- und Worker-Knoten konfiguriert haben, ist es an der Zeit, mit der Clusterbereitstellung zu beginnen.

Schritt 1. Kubernetes-Repository konfigurieren

Kubernetes-Pakete sind nicht in offiziellen CentOS 7-Repositories verfügbar. Dieser Schritt muss auf dem Master-Knoten und jedem Worker-Knoten durchgeführt werden.

Geben Sie Folgendes ein und überprüfen Sie es, sobald der Inhalt hinzugefügt wurde.

[[email protected] ~]# cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
EOF

Aktualisieren und überprüfen Sie, ob das Kubernetes-Repository zur Repository-Liste hinzugefügt wurde:

[[email protected] ~]# yum update -y
[[email protected] ~]# yum repolist | grep -i kubernetes
!kubernetes                         Kubernetes                               570

Schritt 2. Kubelet, kubeadm, kubectl und Docker installieren

kubelet, kubeadm, kubectl drei Basispakete zusammen mit der Containerlaufzeit (hier Docker) sind erforderlich, um Kubernetes zu verwenden.

Installieren Sie diese Pakete auf jedem Knoten:

yum install -y kubelet kubeadm kubectl docker

Schritt 3. Aktivieren und starten Sie die Kubelet- und Docker-Dienste

Nachdem Sie nun die erforderlichen Pakete installiert haben, aktivieren Sie (so dass es bei jedem Start automatisch startet) Kubelet und Docker auf jedem Knoten.

Kubelet auf jedem Knoten aktivieren:

[[email protected] ~]# systemctl enable kubelet
Created symlink from /etc/systemd/system/multi-user.target.wants/kubelet.service to /usr/lib/systemd/system/kubelet.service.

Docker auf jedem Knoten aktivieren:

[[email protected] ~]# systemctl enable docker.service
Created symlink from /etc/systemd/system/multi-user.target.wants/docker.service to /usr/lib/systemd/system/docker.service.

Auch diese Dienste sollten Sie starten, damit sie sofort genutzt werden können:


[[email protected] ~]# systemctl start kubelet
[[email protected] ~]# systemctl start docker.service

Schritt 4. Aktivieren Sie die Bash-Vervollständigung (für ein einfacheres Leben mit Kubernetes)

Aktivieren Sie Bash-Vervollständigungen auf allen Knoten, damit Sie nicht alle Befehle vollständig manuell eingeben müssen. Die Registerkarte würde das für Sie erledigen.

[[email protected] ~]# echo "source <(kubectl completion bash)" >> ~/.bashrc
[[email protected] ~]# echo "source <(kubeadm completion bash)" >> ~/.bashrc
[[email protected] ~]# echo "source <(docker completion bash)" >> ~/.bashrc

Schritt 5. Cluster mit kubeadm erstellen

Initialisieren Sie einen Cluster, indem Sie den folgenden Befehl ausführen:

kubeadm init --apiserver-advertise-address=172.42.42.230 --pod-network-cidr=10.244.0.0/16

Hinweis: Es ist immer gut, --apiserver-advertise-address festzulegen insbesondere beim Starten des Kubernetes-Clusters mit kubeadm. Die IP-Adresse, die der API-Server ankündigt, auf der er lauscht. Wenn nicht gesetzt, wird die Standard-Netzwerkschnittstelle verwendet.

Dasselbe gilt für --pod-network-cidr. Geben Sie einen Bereich von IP-Adressen für das Pod-Netzwerk an. Wenn festgelegt, weist die Steuerungsebene jedem Knoten automatisch CIDRs zu.

Weitere Optionen finden Sie unter diesem Link.

Am Ende der Ausgabe des kube-init-Befehls sehen Sie die Schritte zum Ausführen des Clusters:

...
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/
  
Then you can join any number of worker nodes by running the following on each as root:
kubeadm join 172.42.42.230:6443 --token 22m8k4.kajx812tg74199x3 \
    --discovery-token-ca-cert-hash sha256:03baa45e2b2bb74afddc5241da8e84d16856f57b151e450bc9d52e6b35ad8d22
```

**Manage cluster as regular user:
**In the above kube-init command output you can clearly see that to start using your cluster, you need to run the following commands as a regular user:

```bash
[[email protected] ~]# mkdir -p $HOME/.kube
[[email protected] ~]# cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
[[email protected] ~]# chown $(id -u):$(id -g) $HOME/.kube/config
[[email protected] ~]#

Sie sollten diese Befehle nacheinander ausführen, um den Kubernetes-Cluster zu starten:

[[email protected] ~]# mkdir -p $HOME/.kube
[[email protected] ~]# cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
[[email protected] ~]# chown $(id -u):$(id -g) $HOME/.kube/config

Schritt 6. Pod-Netzwerk einrichten

Das Pod-Netzwerk ist das Overlay-Netzwerk zwischen den Worker-Knoten. Beim Pod-Netzwerk kommunizieren die Container auf verschiedenen Knoten miteinander.

Es gibt mehrere verfügbare Kubernetes-Netzwerkoptionen. Verwenden Sie den folgenden Befehl, um das Flanell-Pod-Netzwerk-Add-On zu installieren:

[[email protected] ~]# kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
podsecuritypolicy.policy/psp.flannel.unprivileged created
Warning: rbac.authorization.k8s.io/v1beta1 ClusterRole is deprecated in v1.17+, unavailable in v1.22+; use rbac.authorization.k8s.io/v1 ClusterRole
clusterrole.rbac.authorization.k8s.io/flannel created
Warning: rbac.authorization.k8s.io/v1beta1 ClusterRoleBinding is deprecated in v1.17+, unavailable in v1.22+; use rbac.authorization.k8s.io/v1 ClusterRoleBinding
clusterrolebinding.rbac.authorization.k8s.io/flannel created
serviceaccount/flannel created
configmap/kube-flannel-cfg created
daemonset.apps/kube-flannel-ds created
[[email protected] ~]#

Überprüfen Sie den Cluster-Status und vergewissern Sie sich, dass der Master-Knoten (Steuerungsebene) bereit ist.

[[email protected] ~]# kubectl get nodes
NAME                          STATUS   ROLES    AGE   VERSION
kmaster-centos7.example.com   Ready    master   2m    v1.19.2

Überprüfen Sie auch alle Pods, die in allen Namespaces ausgeführt werden.

kubectl get pods --all-namespaces

Schritt 7. Verbinden Sie Worker-Knoten mit dem Cluster

Sehen Sie sich die Ausgabe an, die Sie in Schritt 5 erhalten haben, und kopieren Sie die empfohlenen Befehle. Führen Sie es auf jedem Worker-Knoten aus, um es mit dem Cluster zu verbinden:

kubeadm join 172.42.42.230:6443 --token 22m8k4.kajx812tg74199x3 \
>     --discovery-token-ca-cert-hash sha256:03baa45e2b2bb74afddc5241da8e84d16856f57b151e450bc9d52e6b35ad8d22

Überprüfen Sie den Cluster-Status erneut, um zu sehen, dass alle Worker-Knoten dem Cluster erfolgreich beigetreten sind und bereit sind, Arbeitslasten zu bedienen.

[[email protected] ~]# kubectl get nodes -o wide
NAME                           STATUS   ROLES    AGE     VERSION   INTERNAL-IP     EXTERNAL-IP   OS-IMAGE                KERNEL-VERSION                CONTAINER-RUNTIME
kmaster-centos7.example.com    Ready    master   9m17s   v1.19.2   172.42.42.230   <none>        CentOS Linux 7 (Core)   3.10.0-1127.19.1.el7.x86_64   docker://1.13.1
kworker-centos71.example.com   Ready    <none>   7m10s   v1.19.2   172.42.42.231   <none>        CentOS Linux 7 (Core)   3.10.0-1127.19.1.el7.x86_64   docker://1.13.1
kworker-centos72.example.com   Ready    <none>   7m8s    v1.19.2   172.42.42.232   <none>        CentOS Linux 7 (Core)   3.10.0-1127.19.1.el7.x86_64   docker://1.13.1

Überprüfen Sie alle Pods, die in allen Namespaces ausgeführt werden:

kubectl get pods -o wide --all-namespaces

Schritt 8. Testen Sie den Cluster, indem Sie einen Test-Pod erstellen

Nachdem Sie nun alles eingerichtet haben, ist es an der Zeit, den Cluster zu testen. Pod erstellen:

[[email protected] ~]# kubectl run mypod1 --image=httpd --namespace=default --port=80 --labels app=fronend
pod/mypod1 created

Überprüfen Sie nun den Pod-Status:

[[email protected] ~]# kubectl get pods  -o wide
NAME     READY   STATUS    RESTARTS   AGE   IP           NODE                           NOMINATED NODE   READINESS GATES
mypod1   1/1     Running   0          29s   10.244.1.2   kworker-centos71.example.com   <none>           <none>
[[email protected] ~]#

Jetzt haben Sie einen voll funktionsfähigen Kubernetes-Cluster, der auf CentOS ausgeführt wird!

Hoffe euch gefällt das Tutorial. Wenn Sie Fragen oder Anregungen haben, hinterlassen Sie bitte einen Kommentar und ich helfe Ihnen gerne weiter.

Und werden Sie ein Linux Handbook-Mitglied, um exklusive Inhalte nur für Mitglieder zu genießen.


Linux
  1. Ein Leitfaden für Anfänger zu Linux-Berechtigungen

  2. Vollständiges Handbuch zur Verwendung von Snap-Paketen in Ubuntu und anderen Linux-Distributionen

  3. Was ist Kubernetes? Vollständiger Leitfaden

  4. Eine Anleitung für Anfänger zu firewalld unter Linux

  5. Der vollständige Leitfaden für Anfänger zu LVM unter Linux

So installieren und verwenden Sie Curl auf Linux-Distributionen:Ein Leitfaden für Anfänger

Anfängerleitfaden für Syslogs unter Linux

Eine vollständige Anleitung zur Installation von Tomcat unter Linux

Linux-Verzeichnisbefehle:Eine vollständige Anleitung

So konfigurieren Sie einen Linux-Cluster mit 2 Knoten auf RedHat und CentOS

So installieren und verwenden Sie FFmpeg unter Linux-Distributionen | Ratgeber für Anfänger