garutilorenzo.ansible-role-linux-kubernetes
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.
Install and configure a high available Kubernetes cluster
ansible-galaxy install garutilorenzo.ansible-role-linux-kubernetes