geerlingguy.k8s_manifests

Ansible角色:K8s清单

CI

这是一个将Kubernetes清单(可以是模板化的或直接的)应用到Kubernetes集群的Ansible角色。

需求

  • Pip包:openshift
  • 如果在本地主机上运行(例如,使用connection: local),你可能需要设置ansible_python_interpreter: "{{ ansible_playbook_python }}"以确保角色正常工作。

角色变量

可用变量如下,包含默认值(请查看defaults/main.yml):

k8s_manifests:
  # 可以是`k8s_manifests_base_dir`中的路径。
  - monitoring/prometheus

  # 如果不想模板化清单文件,可以使用`file`查找。
  - dir: monitoring/grafana-configmap
    lookup_type: 'file'

  # 可以为每个清单设置一个命名空间(模板化为`manifest_namespace`)。
  - dir: docker-registry
    namespace: registry

这是一个Kubernetes清单目录的列表,用于应用到Kubernetes集群。这个列表可以是原始目录路径或文件夹名称,也可以是包含dir(目录路径/文件夹名称)、可选lookup_type(用于manifest.yml文件的Ansible查找类型)和可选namespace(模板化为manifest_namespace)的字典。

该角色会在指定目录中查找每个清单,并使用Ansible的k8s模块应用manifest.yml文件(及其所有内容)。

如果需要模板化文件,默认情况下该角色会模板化manifest.yml文件(并自动添加manifest.yml文件旁边的vars.yml中的任何变量)。但你也可以通过设置lookup_type: file来禁用模板化,直接应用清单。

k8s_manifests_base_dir: '' # 包含结尾的 /,例如 'base_dir/'

如果设置,该字符串将被添加到k8s_manifests中每个清单dir/路径前。这在你将所有Kubernetes清单存储在Ansible剧本目录之外的目录时非常有用,这样你就不必在每个定义的k8s_manifests列表项中包含完整路径。

k8s_manifests_state: present

k8s模块的state应该是present还是absent。注意,使用absent并不总是会删除清单中定义的所有Kubernetes资源。

k8s_force: false

如果设置为true,并且k8s_manifests_state设置为present,将替换现有对象。否则,Ansible的k8s模块和Kubernetes本身的默认行为(例如,如果使用apply)是对资源进行_补丁_。

k8s_kubeconfig: ~/.kube/config

用于连接Kubernetes集群的kubeconfig文件的路径。

k8s_resource_namespace: ''
k8s_manage_namespace: true

默认情况下,该角色假设你将资源部署到特定命名空间。因此,如果你将k8s_resource_namespace设置为你正在操作的命名空间,该角色将在应用任何清单之前确保该命名空间存在。你可以通过设置k8s_manage_namespace: false来禁用该角色的命名空间管理(例如,如果你应用的清单不应命名空间化,或者如果你按清单应用命名空间)。

k8s_no_log: true

是否在Ansible输出中记录每个清单应用到集群的详细信息。机密和其他敏感数据可能是清单的一部分,因此默认情况下设置为安全。设置为false以进行调试。

依赖关系

无。

示例剧本

简单示例 - 在本地主机上运行

---
- 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

请查看k8s-manifests目录及其README,以获取带有vars文件定义的示例模板化清单布局。

作为更大剧本的一部分运行

---
- 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: 设置适当的Python解释器。
      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

许可证

MIT / BSD

作者信息

该角色由Jeff Geerling创建于2018年,他是Ansible for DevOps的作者。

安装
ansible-galaxy install geerlingguy.k8s_manifests
许可证
mit
下载
15.2k
拥有者
Father, author, developer, maker. Sometimes called "an inflammatory enigma". #stl #drupal #ansible #k8s #raspberrypi #crohns