tcharl.kubernetes

Ansible Rolle: Kubernetes

CI

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 interpretiert. Um die Syntax zu verstehen, siehe kubelet-integration und kubeadm-config-file. Das Grundgerüst (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.

Installieren
ansible-galaxy install tcharl.kubernetes
GitHub Repository
Lizenz
mit
Downloads
407
Besitzer
Osgiliath frameworks and all stuff from the Osgiliath corp!