garutilorenzo.ansible-role-linux-kubernetes

GitHub-Issues GitHub GitHub-Forks GitHub-Stars

Installation und Konfiguration eines hochverfügbaren Kubernetes-Clusters

Diese Ansible-Rolle installiert und konfiguriert ein hochverfügbares Kubernetes-Cluster. Dieses Repository automatisiert den Installationsprozess von Kubernetes mit kubeadm.

Dieses Repository ist nur ein Beispiel, wie man die Automatisierung von Ansible nutzen kann, um ein Kubernetes-Cluster zu installieren und zu konfigurieren. Für eine Produktionsumgebung verwenden Sie bitte Kubespray.

Voraussetzungen

Installieren Sie Ansible, ipaddr und netaddr:

pip install -r requirements.txt

Laden Sie die Rolle von GitHub herunter:

ansible-galaxy install git+https://github.com/garutilorenzo/ansible-role-linux-kubernetes.git

Rollenvariablen

Diese Rolle akzeptiert folgende Variablen:

Var Erforderlich Standard Beschreibung
kubernetes_subnet ja 192.168.25.0/24 Subnetz, in dem Kubernetes bereitgestellt wird. Wenn die VM oder der Bare-Metal-Server mehr als eine Schnittstelle hat, wird Ansible die Schnittstelle filtern, die von Kubernetes basierend auf dem Schnittstellensubnetz verwendet wird.
disable_firewall nein nein Wenn auf ja gesetzt, wird Ansible die Firewall deaktivieren.
kubernetes_version nein 1.25.0 Zu installierende Kubernetes-Version
kubernetes_cri nein containerd Zu installierendes Kubernetes CRI.
kubernetes_cni nein flannel Zu installierendes Kubernetes CNI.
kubernetes_dns_domain nein cluster.local Standard-DNS-Domain für Kubernetes
kubernetes_pod_subnet nein 10.244.0.0/16 Pod-Subnetz von Kubernetes
kubernetes_service_subnet nein 10.96.0.0/12 Service-Subnetz von Kubernetes
kubernetes_api_port nein 6443 kubeapi-Listener-Port
setup_vip nein nein Setup kubernetes VIP-Adresse mit kube-vip
kubernetes_vip_ip nein 192.168.25.225 Erforderlich, wenn setup_vip auf ja gesetzt ist. Vip-IP-Adresse für die Steuerungsebene
kubevip_version nein v0.4.3 Version des kube-vip-Containers
install_longhorn nein nein Installieren Sie Longhorn, einen cloud-nativen verteilen Blockspeicher für Kubernetes.
longhorn_version nein v1.3.1 Longhorn-Version.
install_nginx_ingress nein nein Installieren Sie den nginx ingress controller
nginx_ingress_controller_version nein controller-v1.3.0 Version des nginx ingress controllers
nginx_ingress_controller_http_nodeport nein 30080 NodePort, der vom nginx-ingress-Controller für den eingehenden HTTP-Verkehr verwendet wird
nginx_ingress_controller_https_nodeport nein 30443 NodePort, der vom nginx-ingress-Controller für den eingehenden HTTPS-Verkehr verwendet wird
enable_nginx_ingress_proxy_protocol nein nein Aktivieren Sie den Proxy-Protokollmodus des nginx-ingress-Controllers
enable_nginx_real_ip nein nein Aktivieren Sie das Real-IP-Modul des nginx-ingress-Controllers
nginx_ingress_real_ip_cidr nein 0.0.0.0/0 Erforderlich, wenn enable_nginx_real_ip auf ja gesetzt ist. Vertrauenswürdiges Subnetz für das Real-IP-Modul
nginx_ingress_proxy_body_size nein 20m Maximalgröße des Proxy-Körpers des nginx-ingress-Controllers
sans_base nein [Liste von Werten, siehe defaults/main.yml] Liste von IP-Adressen oder FQDN, die zur Signierung des kube-api-Zertifikats verwendet werden

Zusätzliche Variablen

Diese Rolle akzeptiert eine zusätzliche Variable kubernetes_init_host. Diese Variable wird verwendet, wenn der Cluster zum ersten Mal eingerichtet wird. Der Wert dieser Variable muss der Hostname eines der Masterknoten sein. Wenn Ansible auf dem entsprechenden Host ausgeführt wird, wird Kubernetes initialisiert.

Bereitgestellte Cluster-Ressourcen

Mit dieser Rolle werden der Nginx-ingress-Controller und Longhorn installiert.

Nginx Ingress Controller

Der Nginx Ingress Controller wird als Ingress-Controller verwendet.

Die Installation erfolgt über Bare Metal, dann wird der Ingress-Controller über einen NodePort-Service bereitgestellt. Sie können die vom NodePort-Service bereitgestellten Ports anpassen, indem Sie die Rollenvariablen ändern.

Longhorn

Longhorn ist ein leichtgewichtiges, zuverlässiges und leistungsstarkes verteiltes Blockspeichersystem für Kubernetes.

Longhorn implementiert den verteilten Blockspeicher mithilfe von Containern und Mikrodiensten. Longhorn erstellt einen dedizierten Speichercontroller für jedes Blockgeräte-Volume und repliziert das Volume synchron über mehrere Replikate, die auf mehreren Knoten gespeichert sind. Der Speichercontroller und die Replikate werden selbst mit Kubernetes orchestriert.

Vagrant

Um diese Rolle zu testen, können Sie Vagrant und Virtualbox verwenden, um eine Beispielinfrastruktur aufzubauen. Sobald Sie dieses Repository heruntergeladen haben, verwenden Sie Vagrant, um die virtuellen Maschinen zu starten:

vagrant up

Im Vagrantfile können Sie Ihren öffentlichen SSH-Schlüssel direkt in die authorized_keys des Vagrant-Benutzers einfügen. Sie müssen den CHANGE_ME-Platzhalter im Vagrantfile ändern. Sie können auch die Anzahl der bereitgestellten VMs anpassen, indem Sie die Variable NNODES ändern (Standard: 6).

Verwendung dieser Rolle

Um diese Rolle zu verwenden, folgen Sie dem Beispiel im Verzeichnis examples/. Passen Sie die hosts.ini-Datei mit Ihren Hosts an und führen Sie das Playbook aus:

lorenzo@mint-virtual:~$ ansible-playbook -i hosts-ubuntu.ini site.yml -e kubernetes_init_host=k8s-ubuntu-0

Jetzt haben wir ein Kubernetes-Cluster im hochverfügbaren Modus bereitgestellt. Wir können den Status des Clusters überprüfen:

root@k8s-ubuntu-0:~# kubectl get nodes
NAME           STATUS   ROLES           AGE    VERSION
k8s-ubuntu-0   Ready    control-plane   139m   v1.24.3
k8s-ubuntu-1   Ready    control-plane   136m   v1.24.3
k8s-ubuntu-2   Ready    control-plane   136m   v1.24.3
k8s-ubuntu-3   Ready    <none>          117m   v1.24.3
k8s-ubuntu-4   Ready    <none>          117m   v1.24.3
k8s-ubuntu-5   Ready    <none>          117m   v1.24.3

Überprüfen Sie den Status der Pods:

root@k8s-ubuntu-0:~# kubectl get pods --all-namespaces
NAMESPACE         NAME                                           READY   STATUS      RESTARTS       AGE
ingress-nginx     ingress-nginx-admission-create-tsc8p           0/1     Completed   0              135m
ingress-nginx     ingress-nginx-admission-patch-48tpn            0/1     Completed   0              135m
ingress-nginx     ingress-nginx-controller-6dc865cd86-kfq88      1/1     Running     0              135m
kube-flannel      kube-flannel-ds-fm4s6                          1/1     Running     0              117m
kube-flannel      kube-flannel-ds-hhvxx                          1/1     Running     0              117m
kube-flannel      kube-flannel-ds-ngdtc                          1/1     Running     0              117m
...

Wir sehen Longhorn, Nginx Ingress und alle Kube-System-Pods.

Wir können auch den Dienst des Nginx Ingress-Controllers inspizieren:

root@k8s-ubuntu-0:~# kubectl get svc -n ingress-nginx
NAME                                    TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)                      AGE
ingress-nginx-controller                NodePort    10.111.203.177   <none>        80:30080/TCP,443:30443/TCP   136m

Wir sehen, dass der Nginx Ingress Controller auf dem HTTP-Port 30080 und dem HTTPS-Port 30443 lauscht. Von einem externen Rechner aus können wir den Ingress-Controller testen:

lorenzo@mint-virtual:~$ curl -v http://192.168.25.110:30080
*   Trying 192.168.25.110:30080...
* TCP_NODELAY gesetzt
* Verbindung zu 192.168.25.110 (192.168.25.110) Port 30080 hergestellt (#0)
> GET / HTTP/1.1
> Host: 192.168.25.110:30080
> User-Agent: curl/7.68.0
> Accept: */*
< HTTP/1.1 404 Not Found
< Date: Wed, 17 Aug 2022 12:26:17 GMT
< Content-Type: text/html
< Content-Length: 146
< Connection: keep-alive
< 
<html>
<head><title>404 Not Found</title></head>
<body>
<center><h1>404 Not Found</h1></center>
<hr><center>nginx</center>
</body>
</html>
* Verbindung #0 zum Host 192.168.25.110 bleibt geöffnet.
Über das Projekt

Install and configure a high available Kubernetes cluster

Installieren
ansible-galaxy install garutilorenzo.ansible-role-linux-kubernetes
Lizenz
gpl-3.0
Downloads
24
Besitzer
☁️ Multi Cloud solution architect • 🖥️ Linux system engineer • 🚀 DevOps • 👨‍💻Software developer