tcharl.kubernetes
Ansible Rolle: Kubernetes
Eine Ansible Rolle, die Kubernetes auf Linux installiert.
Anforderungen
Benötigt eine kompatible Container-Laufzeit; empfohlene Rolle für die CRI-Installation: geerlingguy.containerd
.
Rollenvariablen
Verfügbare Variablen sind unten aufgeführt, zusammen mit Standardwerten (siehe defaults/main.yml
):
kubernetes_packages:
- name: kubelet
state: present
- name: kubectl
state: present
- name: kubeadm
state: present
- name: kubernetes-cni
state: present
Kubernetes-Pakete, die auf dem Server installiert werden sollen. Sie können entweder eine Liste von Paketnamen bereitstellen oder name
und state
setzen, um mehr Kontrolle darüber zu haben, ob das Paket present
, absent
, latest
usw. ist.
kubernetes_version: '1.25'
kubernetes_version_rhel_package: '1.25.1'
Die Minor-Version von Kubernetes, die installiert werden soll. Die einfache kubernetes_version
wird verwendet, um eine apt-Paketversion auf Debian festzulegen und als die Kubernetes-Version, die in den Befehl kubeadm init
übergeben wird (siehe kubernetes_version_kubeadm
). Die Variable kubernetes_version_rhel_package
muss eine spezifische Kubernetes-Version sein und wird verwendet, um die Version auf Red Hat / CentOS-Servern festzulegen.
kubernetes_role: control_plane
Ob der bestimmte Server als Kubernetes control_plane
(Standard) oder node
dienen wird. Der Control-Plane-Server wird kubeadm init
ausführen, um die gesamte K8s-Control-Plane zu initialisieren, während nodes
kubeadm join
ausführen werden, um sich mit der control_plane
zu verbinden.
Variablen zur Konfiguration von kubeadm und kubelet mit kubeadm init
über eine Konfigurationsdatei (empfohlen)
Mit dieser Rolle wird kubeadm init
mit --config <DATEI>
ausgeführt.
kubernetes_kubeadm_kubelet_config_file_path: '/etc/kubernetes/kubeadm-kubelet-config.yaml'
Pfad für <DATEI>
. Wenn das Verzeichnis nicht existiert, wird es durch diese Rolle erstellt.
Die folgenden Variablen werden als Optionen für apiVersion
, kind
) der Konfigurationsdatei wird von dieser Rolle erstellt, definieren Sie sie daher nicht in den Variablen. (Siehe templates/kubeadm-kubelet-config.j2
).
kubernetes_config_init_configuration:
localAPIEndpoint:
advertiseAddress: "{{ kubernetes_apiserver_advertise_address | default(ansible_default_ipv4.address, true) }}"
Definiert die Optionen unter kind: InitConfiguration
. Das Einfügen von kubernetes_apiserver_advertise_address
hier dient der rückwärtskompatibilität zu älteren Versionen dieser Rolle, in denen kubernetes_apiserver_advertise_address
mit einer Befehlszeilen-Option verwendet wurde.
kubernetes_config_cluster_configuration:
networking:
podSubnet: "{{ kubernetes_pod_network.cidr }}"
kubernetesVersion: "{{ kubernetes_version_kubeadm }}"
Optionen unter kind: ClusterConfiguration
. Das Einfügen von kubernetes_pod_network.cidr
und kubernetes_version_kubeadm
hier dient der Rückwärtskompatibilität zu älteren Versionen dieser Rolle, in denen sie mit Befehlszeilen-Optionen verwendet wurden.
kubernetes_config_kubelet_configuration:
cgroupDriver: systemd
Optionen zur Konfiguration von kubelet auf allen Knoten in Ihrem Cluster über den Prozess kubeadm init
. Um Syntaxoptionen zu lesen, siehe die kubelet-Konfigurationsdatei und die kubelet-Integration Dokumentation.
HINWEIS: Dies ist der empfohlene Weg zur kubelet-Konfiguration. Die meisten Befehlszeilen-Optionen sind veraltet.
HINWEIS: Der empfohlene cgroupDriver hängt von Ihrer Container-Laufzeit ab. Wenn Sie diese Rolle mit Docker anstelle von containerd verwenden, sollte dieser Wert auf cgroupfs
geändert werden.
kubernetes_config_kube_proxy_configuration: {}
Optionen zur Konfiguration der Proxy-Konfiguration von kubelet im Abschnitt KubeProxyConfiguration
der kubelet-Konfiguration.
Variablen zur Konfiguration von kubeadm und kubelet über Befehlszeilen-Optionen
kubernetes_kubelet_extra_args: ""
kubernetes_kubelet_extra_args_config_file: /etc/default/kubelet
Zusätzliche Argumente, die beim Start von kubelet
übergeben werden sollen. Zum Beispiel, um kubelet
zu erlauben, zu starten, auch wenn Swap auf Ihrem Server aktiviert ist, setzen Sie dies auf: "--fail-swap-on=false"
. Oder um die von kubelet
beworbene Node-IP zu spezifizieren, setzen Sie dies auf "--node-ip={{ ansible_host }}"
. Diese Option ist veraltet. Bitte verwenden Sie stattdessen kubernetes_config_kubelet_configuration
.
kubernetes_kubeadm_init_extra_opts: ""
Zusätzliche Argumente, die beim Initialisieren der K8s-Control-Plane an kubeadm init
übergeben werden sollen. Zum Beispiel, um zusätzliche alternative Namen für das API-Server-Zertifikat zu spezifizieren, setzen Sie dies auf: "--apiserver-cert-extra-sans my-custom.host"
kubernetes_join_command_extra_opts: ""
Zusätzliche Argumente, die dem generierten kubeadm join
Befehl während der K8s-Knoteninitialisierung übergeben werden sollen. Zum Beispiel, um bestimmte Vorbedingungen wie aktiviertes Swap zu ignorieren, setzen Sie dies auf: --ignore-preflight-errors=Swap
Zusätzliche Variablen
kubernetes_allow_pods_on_control_plane: true
Ob der Taint entfernt werden soll, der es Pod verweigert, auf der Kubernetes-Control-Plane bereitgestellt zu werden. Wenn Sie einen Cluster mit nur einem Knoten haben, sollte dies definitiv True
sein. Andernfalls setzen Sie es auf False
, wenn Sie eine dedizierte Kubernetes-Control-Plane haben möchten, die keine anderen Pods ausführt.
kubernetes_pod_network:
# Flannel CNI.
cni: 'flannel'
cidr: '10.244.0.0/16'
#
# Calico CNI.
# cni: 'calico'
# cidr: '192.168.0.0/16'
#
# Weave CNI.
# cni: 'weave'
# cidr: '192.168.0.0/16'
Diese Rolle unterstützt derzeit flannel
(Standard), calico
oder weave
für die Netzwerkverbindung von Pods im Cluster. Wählen Sie nur eine für Ihren Cluster; ein Wechsel zwischen ihnen erfolgt nicht automatisch und könnte zu Verbindungsproblemen führen; wenn Sie von einer zur anderen wechseln müssen, sollte dies außerhalb dieser Rolle erfolgen.
kubernetes_apiserver_advertise_address: ''`
kubernetes_version_kubeadm: 'stable-{{ kubernetes_version }}'`
kubernetes_ignore_preflight_errors: 'all'
Optionen, die beim Initialisieren der Kubernetes-Control-Plane an kubeadm init
übergeben werden. Die kubernetes_apiserver_advertise_address
hat den Standardwert ansible_default_ipv4.address
, wenn sie leer gelassen wird.
kubernetes_apt_release_channel: main
kubernetes_apt_repository: "deb http://apt.kubernetes.io/ kubernetes-xenial {{ kubernetes_apt_release_channel }}"
kubernetes_apt_ignore_key_error: false
Apt-Repository-Optionen für die Kubernetes-Installation.
kubernetes_yum_arch: x86_64
kubernetes_yum_base_url: "https://packages.cloud.google.com/yum/repos/kubernetes-el7-{{ kubernetes_yum_arch }}"
kubernetes_yum_gpg_key:
- https://packages.cloud.google.com/yum/doc/yum-key.gpg
- https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
kubernetes_yum_gpg_check: true
kubernetes_yum_repo_gpg_check: true
Yum-Repository-Optionen für die Kubernetes-Installation. Sie können kubernetes_yum_gpg_key
auf eine andere URL ändern, wenn Sie hinter einer Firewall sind oder einen vertrauenswürdigen Spiegel angeben. Meistens in Kombination mit der Änderung von kubernetes_yum_base_url
.
kubernetes_flannel_manifest_file: https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
Flannel-Manifeste, die auf den Kubernetes-Cluster angewendet werden, um das Netzwerk zu aktivieren. Sie können auch eigene Dateien auf Ihren Server kopieren und diese anwenden, wenn Sie die Flannel-Netzwerkkonfiguration anpassen müssen.
kubernetes_calico_manifest_file: https://projectcalico.docs.tigera.io/manifests/calico.yaml
Calico-Manifeste, die auf den Kubernetes-Cluster angewendet werden (wenn Calico anstelle von Flannel verwendet wird).
Abhängigkeiten
Keine.
Beispiel-Playbooks
Single-Node-Cluster (nur Control-Plane)
- hosts: all
vars:
kubernetes_allow_pods_on_control_plane: true
roles:
- geerlingguy.docker
- geerlingguy.kubernetes
Zwei oder mehr Knoten (einzelne Control-Plane) Cluster
Control-Plane-Inventarvariablen:
kubernetes_role: "control_plane"
Knoten-Inventarvariablen:
kubernetes_role: "node"
Playbook:
- hosts: all
vars:
kubernetes_allow_pods_on_control_plane: true
roles:
- geerlingguy.docker
- geerlingguy.kubernetes
Loggen Sie sich dann in die Kubernetes-Control-Plane ein und führen Sie als Root kubectl get nodes
aus, und Sie sollten eine Liste aller Server sehen.
Lizenz
MIT / BSD
Autor Informationen
Diese Rolle wurde 2018 von Jeff Geerling erstellt, Autor von Ansible for DevOps.
Kubernetes for Linux.
ansible-galaxy install tcharl.kubernetes