geerlingguy.k8s_manifests
Ansible角色:K8s清单
这是一个将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