geerlingguy.k8s_manifests

Ansible Rolle: K8s Manifeste

CI

Eine Ansible Rolle, die Kubernetes-Manifeste (entweder als Vorlage oder direkt) auf Kubernetes-Cluster anwendet.

Voraussetzungen

  • Pip-Paket: openshift
  • Wenn Sie lokal (z.B. mit connection: local) arbeiten, müssen Sie möglicherweise ansible_python_interpreter: "{{ ansible_playbook_python }}" setzen, damit die Rolle korrekt funktioniert.

Rollenvariablen

Verfügbare Variablen sind unten aufgeführt, zusammen mit Standardwerten (siehe defaults/main.yml):

k8s_manifests:
  # Kann ein Pfad innerhalb des `k8s_manifests_base_dir` sein.
  - monitoring/prometheus

  # Verwenden Sie eine `file`-Abfrage, wenn Sie die Manifestdatei nicht als Vorlage nutzen möchten.
  - dir: monitoring/grafana-configmap
    lookup_type: 'file'

  # Sie können einen Namespace pro Manifest festlegen (vorlagisiert auf `manifest_namespace`).
  - dir: docker-registry
    namespace: registry

Eine Liste von Kubernetes-Manifestverzeichnissen, die auf ein Kubernetes-Cluster angewendet werden sollen. Diese Liste kann entweder aus Rohverzeichnispfaden oder Ordnernamen bestehen oder ein Wörterbuch mit dir (dem Verzeichnispfad/Ordnernamen), optionalem lookup_type (dem verwendeten Ansible-Abfragetyp für die manifest.yml-Datei) und optionalem namespace (vorlagisiert auf manifest_namespace) sein.

Diese Rolle sucht dann im angegebenen Verzeichnis nach jedem Manifest und wendet die Datei manifest.yml (und deren Inhalte) mit dem Ansible k8s Modul an.

Wenn Sie die Datei als Vorlage verwenden müssen, stellt diese Rolle standardmäßig die manifest.yml-Datei als Vorlage zur Verfügung (und fügt automatisch Variablen aus einer vars.yml-Datei neben der manifest.yml-Datei hinzu). Sie können jedoch auch die Vorlagenverarbeitung deaktivieren und das Manifest direkt anwenden, indem Sie lookup_type: file setzen.

k8s_manifests_base_dir: '' # mit abschließendem /, z.B. 'base_dir/'

Wenn gesetzt, wird dieser String jedem Manifest dir/Pfad, der in k8s_manifests angegeben ist, vorangestellt. Dies ist nützlich, wenn Sie alle Ihre Kubernetes-Manifeste in einem Verzeichnis außerhalb des Ansible-Playbook-Verzeichnisses speichern, sodass Sie nicht den vollständigen Pfad in jedem definierten Element der k8s_manifests-Liste angeben müssen.

k8s_manifests_state: present

Ob der state für das k8s Modul present oder absent sein soll. Beachten Sie, dass die Verwendung von absent nicht immer alle Kubernetes-Ressourcen löscht, die in einem Manifest definiert sind.

k8s_force: false

Wenn auf true gesetzt und k8s_manifests_state auf present gesetzt ist, wird ein vorhandenes Objekt ersetzt. Andernfalls ist das standardmäßige Verhalten des Ansible k8s Moduls und von Kubernetes selbst (z.B. bei Verwendung von apply), die Ressource zu patchen.

k8s_kubeconfig: ~/.kube/config

Der Pfad zur kubeconfig-Datei, die verwendet wird, um eine Verbindung zum Kubernetes-Cluster herzustellen.

k8s_resource_namespace: ''
k8s_manage_namespace: true

Standardmäßig geht diese Rolle davon aus, dass Sie Ressourcen in einen bestimmten Namespace bereitstellen. Wenn Sie k8s_resource_namespace auf das Namespace setzen, in dem Sie arbeiten, stellt die Rolle sicher, dass dieses Namespace existiert, bevor sie Manifeste anwendet. Sie können das Namespace-Management dieser Rolle deaktivieren (z.B. wenn das anzuwendende Manifest nicht namespaced sein sollte oder wenn Sie Namespace pro Manifest anwenden), indem Sie k8s_manage_namespace: false setzen.

k8s_no_log: true

Ob die Details der Anwendung jedes Manifests im Cluster in der Ansible-Ausgabe protokolliert werden sollen. Geheimnisse und andere sensible Daten könnten Teil eines Manifests sein, daher ist dies standardmäßig sicher eingestellt. Setzen Sie es auf false für Debugging-Zwecke.

Abhängigkeiten

Keine.

Beispiel-Playbooks

Einfaches Beispiel - Ausführung auf localhost

---
- hosts: localhost
  connection: local
  gather_facts: no

  vars:
    ansible_python_interpreter: "{{ ansible_playbook_python }}"
    k8s_kubeconfig: ~/.kube/config-my-cluster
    k8s_manifests_base_dir: k8s-manifests/
    k8s_manifests:
      - storageclass

  roles:
    - role: geerlingguy.k8s_manifests

Siehe das Verzeichnis k8s-manifests und seine README für ein Beispiel-Layout eines vorlagenbasierten Manifests mit einer definierten Vars-Datei daneben.

Ausführung als Teil eines größeren Plays

---
- hosts: k8s_cluster
  become: true

  vars:
    ansible_python_interpreter: python
    k8s_manage_namespace: false
    k8s_no_log: false
    k8s_manifests_base_dir: k8s-manifests/
    k8s_manifests:
      - storageclass
      - dir: docker-registry
        namespace: registry

  tasks:
    - name: Setze den Python-Interpreter angemessen.
      set_fact:
        ansible_python_interpreter: "{{ ansible_playbook_python }}"

    - import_role:
        name: geerlingguy.k8s_manifests
      tags: ['kubernetes', 'nfs', 'drupal', 'registry']
      delegate_to: localhost
      become: false
      run_once: true

Lizenz

MIT / BSD

Autorinformationen

Diese Rolle wurde 2018 von Jeff Geerling erstellt, Autor von Ansible for DevOps.

Über das Projekt

Kubernetes manifest management role.

Installieren
ansible-galaxy install geerlingguy.k8s_manifests
Lizenz
mit
Downloads
15.2k
Besitzer
Father, author, developer, maker. Sometimes called "an inflammatory enigma". #stl #drupal #ansible #k8s #raspberrypi #crohns