lablabs.rke2
RKE2 Ansible Rolle
Diese Ansible Rolle installiert ein RKE2 Kubernetes Cluster. RKE2 wird mit der Tarball-Methode installiert.
Die Rolle kann RKE2 in 3 Modi installieren:
RKE2 Einzelknoten
RKE2 Cluster mit einem Server (Master) Knoten und einem oder mehreren Agenten (Worker) Knoten
RKE2 Cluster mit Server (Master) im Hochverfügbarkeitsmodus und null oder mehr Agenten (Worker) Knoten. Im HA-Modus sollten Sie eine ungerade Anzahl (drei empfohlen) von Server (Master) Knoten haben, die etcd, die Kubernetes API (Keepalived VIP oder Kube-VIP Adresse) und andere Steuerungsebenen-Dienste ausführen.
- Zusätzlich ist es möglich, das RKE2 Cluster (alle 3 Modi) im Air-Gapped-Modus mit lokalen Artefakten zu installieren.
Es ist möglich, RKE2 zu aktualisieren, indem Sie die Variable
rke2_version
ändern und das Playbook mit dieser Rolle erneut ausführen. Während des Upgrade Prozesses wird der RKE2 Dienst auf den Knoten nacheinander neu gestartet. Die Ansible Rolle prüft, ob der Knoten, auf dem der Dienst neu gestartet wurde, im Bereit-Zustand ist, und fährt erst dann mit dem Neustart des Dienstes auf einem weiteren Kubernetes Knoten fort.
Anforderungen
- Ansible 2.10+
Getestet auf
- Rocky Linux 9
- Ubuntu 24.04 LTS
Rollen Variablen
Dies ist eine Kopie von defaults/main.yml
---
# Der Knotentyp - Server oder Agent
rke2_type: server
# Steuerungsebene im HA-Modus bereitstellen
rke2_ha_mode: false
# Keepalived auf Server Knoten installieren und konfigurieren
# Kann deaktiviert werden, wenn Sie einen vordefinierten Load Balancer verwenden
rke2_ha_mode_keepalived: true
# kube-vip LB und VIP für das Cluster installieren und konfigurieren
# rke2_ha_mode_keepalived muss false sein
rke2_ha_mode_kubevip: false
# Kubernetes API und RKE2 Registrierungs-IP-Adresse. Die Standardadresse ist die IPv4-Adresse des Server/Master Knotens.
# Im HA-Modus wählen Sie eine statische IP, die als VIP in Keepalived gesetzt wird.
# Oder wenn Keepalived deaktiviert ist, verwenden Sie die IP-Adresse Ihres LB.
rke2_api_ip: "{{ hostvars[groups[rke2_servers_group_name].0]['ansible_default_ipv4']['address'] }}"
# optionale Option für RKE2 Server, um an einer privaten IP-Adresse auf Port 9345 zu lauschen
# rke2_api_private_ip:
# optionale Option für kubevip IP Subnetz
# rke2_api_cidr: 24
# optionale Option für kubevip
# rke2_interface: eth0
# optionale Option für IPv4/IPv6-Adressen, die für den Knoten beworben werden sollen
# rke2_bind_address: "{{ hostvars[inventory_hostname]['ansible_' + rke2_interface]['ipv4']['address'] }}"
# kubevip Load Balancer IP-Bereich
rke2_loadbalancer_ip_range: {}
# bereich-global: 192.168.1.50-192.168.1.100
# cidr-finance: 192.168.0.220/29,192.168.0.230/29
# kubevip Cloud-Provider installieren, falls rke2_ha_mode_kubevip true ist
rke2_kubevip_cloud_provider_enable: true
# kube-vip aktivieren, um Dienste vom Typ LoadBalancer zu überwachen
rke2_kubevip_svc_enable: true
# Bild für den kube-vip Container angeben
rke2_kubevip_image: ghcr.io/kube-vip/kube-vip:v0.6.4
# Bild für den kube-vip Cloud-Provider Container angeben
rke2_kubevip_cloud_provider_image: ghcr.io/kube-vip/kube-vip-cloud-provider:v0.0.4
# kube-vip IPVS Load Balancer für die Steuerungsebene aktivieren
rke2_kubevip_ipvs_lb_enable: false
# Aktivieren Sie das Load Balancing der Schicht 4 für die Steuerungsebene unter Verwendung des IPVS-Kernelmoduls
# Muss kube-vip Version 0.4.0 oder später verwenden
rke2_kubevip_service_election_enable: true
# Standardmäßig bietet der ARP-Modus eine HA-Implementierung einer VIP (Ihre Dienst-IP-Adresse), die den Datenverkehr am kube-vip-Leiter empfängt.
# Um dies zu umgehen, hat kube-vip eine neue Funktion implementiert, die "Wahlen pro Dienst" ist,
# anstatt dass ein Knoten der Leiter für alle Dienste wird, wird eine Wahl über alle kube-vip-Instanzen gehalten und der Leiter dieser Wahl wird der Inhaber dieses Dienstes.
# Letztendlich bedeutet dies, dass jeder Dienst beim Erstellen theoretisch auf einem anderen Knoten enden kann, was einen Engpass beim ersten Deployment verhindert.
# minimale kube-vip Version 0.5.0
# (Optional) Eine Liste von kube-vip-Flags
# Alle Flags finden Sie hier https://kube-vip.io/docs/installation/flags/
# rke2_kubevip_args: []
# - param: lb_enable
# value: true
# - param: lb_port
# value: 6443
# Prometheus-Metriken-Port für kube-vip
rke2_kubevip_metrics_port: 2112
# Weitere SANs im k8s API TLS-Zertifikat hinzufügen
rke2_additional_sans: []
# Cluster-Domain konfigurieren
# rke2_cluster_domain: cluster.example.net
# Zielport des API-Servers
rke2_apiserver_dest_port: 6443
# Taints der Serverknoten
rke2_server_node_taints: []
# - 'CriticalAddonsOnly=true:NoExecute'
# Taints der Agenten-Knoten
rke2_agent_node_taints: []
# Vorgegebenes Geheimnis, das von anderen Server- oder Agenten-Knoten verwendet wird, um sich mit dem Cluster zu verbinden
rke2_token: defaultSecret12345
# RKE2 Version
rke2_version: v1.25.3+rke2r1
# URL zum RKE2-Repository
rke2_channel_url: https://update.rke2.io/v1-release/channels
# URL zum RKE2 Installations-Bash-Skript
# z.B. rancher chinesischer Spiegel http://rancher-mirror.rancher.cn/rke2/install.sh
rke2_install_bash_url: https://get.rke2.io
# Lokales Datenverzeichnis für RKE2
rke2_data_path: /var/lib/rancher/rke2
# Standard-URL zum Abrufen von Artefakten
rke2_artifact_url: https://github.com/rancher/rke2/releases/download/
# Lokaler Pfad zum Speichern von Artefakten
rke2_artifact_path: /rke2/artifact
# Für Airgap erforderliche Artefakte
rke2_artifact:
- sha256sum-{{ rke2_architecture }}.txt
- rke2.linux-{{ rke2_architecture }}.tar.gz
- rke2-images.linux-{{ rke2_architecture }}.tar.zst
# Ändert die Bereitstellungsstrategie, um lokal basierte Artefakte zu installieren
rke2_airgap_mode: false
# Implementierungsart im Airgap - herunterladen, kopieren oder existiert
# - 'download' lädt die Artefakte auf jedem Knoten herunter,
# - 'copy' überträgt lokale Dateien in 'rke2_artifact' auf die Knoten,
# - 'exists' geht davon aus, dass die Dateien in 'rke2_artifact' bereits im 'rke2_artifact_path' gespeichert sind
rke2_airgap_implementation: download
# Lokaler Quellpfad, in dem Artefakte gespeichert sind
rke2_airgap_copy_sourcepath: local_artifacts
# Tarball-Bilder für zusätzliche Komponenten, die von rke2_airgap_copy_sourcepath auf die Knoten kopiert werden sollen
# (Dateierweiterungen in der Liste und auf den echten Dateien müssen beibehalten werden)
rke2_airgap_copy_additional_tarballs: []
# Zielort für zusätzliche Bilder-Tarballs im Airgap (siehe https://docs.rke2.io/install/airgap/#tarball-method)
rke2_tarball_images_path: "{{ rke2_data_path }}/agent/images"
# Architektur, die heruntergeladen werden soll, derzeit gibt es Releases für amd64 und s390x
rke2_architecture: amd64
# Zielverzeichnis für das Installationsskript von RKE2
rke2_install_script_dir: /var/tmp
# RKE2 Kanal
rke2_channel: stable
# Keine gepackten Komponenten bereitstellen und alle bereitgestellten Komponenten löschen
# Gültige Elemente: rke2-canal, rke2-coredns, rke2-ingress-nginx, rke2-metrics-server
rke2_disable:
# Option zum Deaktivieren von kube-proxy
disable_kube_proxy: false
# Option zum Deaktivieren des integrierten Cloud-Controllers - hauptsächlich für On-Premise
rke2_disable_cloud_controller: false
# Cloud-Provider, der für das Cluster verwendet werden soll (aws, azure, gce, openstack, vsphere, external)
# gilt nur, wenn rke2_disable_cloud_controller true ist
rke2_cloud_provider_name: "external"
# Pfad zu benutzerdefinierten Manifests, die während der RKE2-Installation bereitgestellt werden
# Es ist möglich, Jinja2-Templating in den Manifests zu verwenden
rke2_custom_manifests:
# Pfad zu statischen Pods, die während der RKE2-Installation bereitgestellt werden
rke2_static_pods:
# Benutzerdefinierten Containerd Registry konfigurieren
rke2_custom_registry_mirrors: []
# - name:
# endpoint: {}
# rewrite: '"^rancher/(.*)": "mirrorproject/rancher-images/$1"'
# Benutzerdefinierte Containerd Registry zusätzliche Konfiguration
rke2_custom_registry_configs: []
# - endpoint:
# config:
# Pfad zur Konfigurationsdatei für die Container-Registry-Vorlage
rke2_custom_registry_path: templates/registries.yaml.j2
# Pfad zur RKE2-Konfigurationsdatei-Vorlage
rke2_config: templates/config.yaml.j2
# Quelle für Snapshots von Etcd
rke2_etcd_snapshot_source_dir: etcd_snapshots
# Dateiname für Etcd-Snapshot.
# Wenn der Dateiname definiert ist, wird das Etcd bei der ersten Ausführung von Ansible wiederhergestellt.
# Das Etcd wird nur während des ersten Durchlaufs wiederhergestellt, sodass es beim nächsten Durchlauf unberührt bleibt.
# Sie können entweder dies verwenden oder Optionen in `rke2_etcd_snapshot_s3_options` festlegen
rke2_etcd_snapshot_file:
# Speicherort für den Etcd-Snapshot
rke2_etcd_snapshot_destination_dir: "{{ rke2_data_path }}/server/db/snapshots"
# S3-Optionen für Etcd-Snapshots
# Setzen Sie entweder alle diese Werte oder `rke2_etcd_snapshot_file` und `rke2_etcd_snapshot_source_dir`
# rke2_etcd_snapshot_s3_options:
# s3_endpoint: "" # erforderlich
# access_key: "" # erforderlich
# secret_key: "" # erforderlich
# bucket: "" # erforderlich
# snapshot_name: "" # erforderlich.
# skip_ssl_verify: false # optional
# endpoint_ca: "" # optional. Kann weggelassen werden, wenn die Standardeinstellungen verwendet werden
# region: "" # optional - standardmäßig us-east-1
# folder: "" # optional - standardmäßig auf der obersten Ebene des Buckets
# Standard-Containerd-Snapshooter überschreiben
rke2_snapshooter: overlayfs
# RKE2 mit dem Standard-CNI-Kanal bereitstellen
rke2_cni: canal
# Systemkonfiguration gegen den ausgewählten Benchmark validieren
# (Unterstützter Wert ist "cis-1.23" oder gegebenenfalls "cis-1.6", wenn Sie RKE2 vor 1.25 ausführen)
rke2_cis_profile: ""
# Kubernetes-Konfigurationsdatei auf den Ansible-Controller herunterladen
rke2_download_kubeconf: false
# Name der Kubernetes-Konfigurationsdatei, die auf den Ansible-Controller heruntergeladen wird
rke2_download_kubeconf_file_name: rke2.yaml
# Zielverzeichnis, in dem die Kubernetes-Konfigurationsdatei auf den Ansible-Controller heruntergeladen wird
rke2_download_kubeconf_path: /tmp
# Standard-Ansible-Inventargruppenname für das RKE2-Cluster
rke2_cluster_group_name: k8s_cluster
# Standard-Ansible-Inventargruppenname für RKE2-Server
rke2_servers_group_name: masters
# Standard-Ansible-Inventargruppenname für RKE2-Agenten
rke2_agents_group_name: workers
# (Optional) Eine Liste von Flags für den Kubernetes API-Server
# Alle Flags finden Sie hier https://kubernetes.io/docs/reference/command-line-tools-reference/kube-apiserver
# rke2_kube_apiserver_args: []
# (Optional) Liste von Knoten-Labels
# k8s_node_label: []
# (Optional) Zusätzliche Konfigurationsoptionen für RKE2-Server
# Die Flags finden Sie unter https://docs.rke2.io/reference/server_config
# rke2_server_options:
# - "option: value"
# - "node-ip: {{ rke2_bind_address }}" # z.B. (agent/networking) IPv4/IPv6-Adressen, die für den Knoten beworben werden sollen
# (Optional) Zusätzliche Konfigurationsoptionen für RKE2-Agenten
# Die Flags finden Sie unter https://docs.rke2.io/reference/linux_agent_config
# rke2_agent_options:
# - "option: value"
# - "node-ip: {{ rke2_bind_address }}" # z.B. (agent/networking) IPv4/IPv6-Adressen, die für den Knoten beworben werden sollen
# (Optional) Proxy konfigurieren
# Alle Flags finden Sie hier https://docs.rke2.io/advanced#configuring-an-http-proxy
# rke2_environment_options: []
# - "option=value"
# - "HTTP_PROXY=http://your-proxy.example.com:8888"
# (Optional) Standardeinstellungen für kube-controller-manager-Argumente anpassen
# Mit dieser Funktion können Sie das Argument hinzufügen, wenn es standardmäßig nicht vorhanden ist, oder es ersetzen, wenn es bereits vorhanden ist.
# rke2_kube_controller_manager_arg:
# - "bind-address=0.0.0.0"
# (Optional) Standardeinstellungen für kube-scheduler-Argumente anpassen
# Mit dieser Funktion können Sie das Argument hinzufügen, wenn es standardmäßig nicht vorhanden ist, oder es ersetzen, wenn es bereits vorhanden ist.
# rke2_kube_scheduler_arg:
# - "bind-address=0.0.0.0"
# (Optional) Nginx über HelmChartConfig konfigurieren: https://docs.rke2.io/networking/networking_services#nginx-ingress-controller
# rke2_ingress_nginx_values:
# controller:
# config:
# use-forwarded-headers: "true"
rke2_ingress_nginx_values: {}
# Knoten, der aktualisiert wird, cordon, drain. Den Knoten nach dem RKE2-Upgrade uncordon.
rke2_drain_node_during_upgrade: false
# Warten Sie nach dem Neustart des rke2-Dienstes während des rollierenden Neustarts darauf, dass alle Pods bereit sind.
rke2_wait_for_all_pods_to_be_ready: false
# Debug-Modus aktivieren (rke2-Dienst)
rke2_debug: false
# (Optional) Standardeinstellungen für kubelet-Argumente anpassen
# rke2_kubelet_arg:
# - "--system-reserved=cpu=100m,memory=100Mi"
# (Optional) Standardeinstellungen für kube-proxy-Argumente anpassen
# rke2_kube_proxy_arg:
# - "proxy-mode=ipvs"
# Der Wert für das Konfigurationselement node-name
rke2_node_name: "{{ inventory_hostname }}"
# Das Netzwerk, das für Pods verwendet werden soll.. Standardmäßig auf '10.42.0.0/16' gesetzt.
rke2_cluster_cidr:
- 10.42.0.0/16
# Das Netzwerk, das für ClusterIP-Dienste verwendet werden soll. Standardmäßig auf '10.43.0.0/16' gesetzt.
rke2_service_cidr:
- 10.43.0.0/16
Beispiel der Inventardatei
Diese Rolle setzt eine Verteilung der Knoten in die Inventargruppen masters
und workers
voraus. Die RKE2 Kubernetes Master/Server Knoten müssen zur Gruppe masters
gehören, und die Worker/Agent Knoten müssen Mitglieder der Gruppe workers
sein. Beide Gruppen müssen Kinder der Gruppe k8s_cluster
sein.
[masters]
master-01 ansible_host=192.168.123.1 rke2_type=server
master-02 ansible_host=192.168.123.2 rke2_type=server
master-03 ansible_host=192.168.123.3 rke2_type=server
[workers]
worker-01 ansible_host=192.168.123.11 rke2_type=agent
worker-02 ansible_host=192.168.123.12 rke2_type=agent
worker-03 ansible_host=192.168.123.13 rke2_type=agent
[k8s_cluster:children]
masters
workers
Beispiel von Playbook
Dieses Playbook wird RKE2 auf einem einzelnen Knoten installieren, der sowohl als Server als auch als Agent fungiert.
- name: RKE2 bereitstellen
hosts: node
become: yes
roles:
- role: lablabs.rke2
Dieses Playbook wird RKE2 in einem Cluster mit einem Server (Master) und mehreren Agenten (Worker) Knoten bereitstellen.
- name: RKE2 bereitstellen
hosts: all
become: yes
roles:
- role: lablabs.rke2
Dieses Playbook wird RKE2 in einem Cluster mit einem Server (Master) und mehreren Agenten (Worker) Knoten im Air-Gapped-Modus bereitstellen. Es wird Multus und Calico als CNI verwenden.
- name: RKE2 bereitstellen
hosts: all
become: yes
vars:
rke2_airgap_mode: true
rke2_airgap_implementation: download
rke2_cni:
- multus
- calico
rke2_artifact:
- sha256sum-{{ rke2_architecture }}.txt
- rke2.linux-{{ rke2_architecture }}.tar.gz
- rke2-images.linux-{{ rke2_architecture }}.tar.zst
rke2_airgap_copy_additional_tarballs:
- rke2-images-multus.linux-{{ rke2_architecture }}
- rke2-images-calico.linux-{{ rke2_architecture }}
roles:
- role: lablabs.rke2
Dieses Playbook wird RKE2 in einem Cluster mit HA Server (Master) Steuerungsebene und mehreren Agenten (Worker) Knoten bereitstellen. Die Server (Master) Knoten werden mit Taints versehen, sodass die Arbeitslast nur auf den Agenten (Worker) Knoten verteilt wird. Die Rolle wird auch Keepalived auf den Steuerungsknoten installieren und eine VIP-Adresse einrichten, unter der die Kubernetes API erreichbar ist. Außerdem wird die Kubernetes-Konfigurationsdatei auf die lokale Maschine heruntergeladen.
- name: RKE2 bereitstellen
hosts: all
become: yes
vars:
rke2_ha_mode: true
rke2_api_ip : 192.168.123.100
rke2_download_kubeconf: true
rke2_server_node_taints:
- 'CriticalAddonsOnly=true:NoExecute'
roles:
- role: lablabs.rke2
Separate Token für Agent-Knoten verwenden
Laut der Serverkonfigurationsdokumentation ist es möglich, ein Agent-Token zu definieren, das von Agent-Knoten verwendet wird, um sich mit dem Cluster zu verbinden und ihnen weniger Zugriff auf den Cluster zu geben, als die Server-Knoten haben. Folgende Anpassungen an der obigen Konfiguration wären notwendig:
- Entfernen Sie
rke2_token
aus den globalen Variablen - Fügen Sie zu
group_vars/masters.yml
hinzu:
rke2_token: defaultSecret12345
rke2_agent_token: agentSecret54321
- Fügen Sie zu
group_vars/workers.yml
hinzu:
rke2_token: agentSecret54321
Während es problematisch ist, das Server-Token zu ändern, kann das Agent-Token nach Belieben gewechselt werden, solange Server und Agenten den gleichen Wert haben und die Dienste
(rke2-server
und rke2-agent
, wie angemessen) neu gestartet wurden, um sicherzustellen, dass die Prozesse den neuen Wert verwenden.
Fehlersuche
Playbook hängt beim Starten des RKE2-Dienstes auf Agenten
Wenn das Playbook beim Start RKE2-Dienst auf den übrigen Knoten
-Aufgabe hängen bleibt und dann bei der Warten auf verbleibende Knoten, um bereitzustellen
-Aufgabe fehlschlägt, haben Sie möglicherweise einige Einschränkungen in den Netzwerken Ihrer Knoten.
Bitte überprüfen Sie die erforderlichen Eingehenden Regeln für RKE2-Serverknoten unter folgendem Link: https://docs.rke2.io/install/requirements/#networking.
Lizenz
MIT
Autoreninformation
Erstellt im Jahr 2021 von Labyrinth Labs
This Ansible Role will deploy Rancher RKE2 Kubernetes
ansible-galaxy install lablabs.rke2