我现在正在编写一个 ansible 剧本,在 kubernetes 中部署一个 docker 化的应用程序。但是,出于分子性的目的,我宁愿不对执行后需要应用的文件进行硬编码
kompose convert -f docker-compose.yaml --volumes hostPath
有没有办法应用目录中的所有文件?
您可以应用文件夹中的所有文件
kubectl apply -f <folder>
您可能还对使用 Kustomize 对清单文件进行参数化感兴趣,例如在 prod 命名空间中使用比在 test 命名空间中更多的副本。您可以使用参数化清单文件
kubectl apply -k <folder>
如果您想应用给定目录中的所有文件,上述将目录作为“-f”选项的命令非常有效。
以下内容应应用当前目录中符合给定条件的 yaml 文件(例如,此处所有以 test 开头的 yaml)
kubectl apply $(ls test*.yaml | awk ' { print " -f " $1 } ')
这对我有用>>
kubectl apply -f .
使用 ansible
k8s
模块的特定于 ansible 的答案是:
- name: Apply all manifests in a given folder
k8s:
state: present
definition: "{{ lookup('template', '{{ item }}') }}"
namespace: default
with_fileglob:
- "manifests/*.yaml"
- "manifests/*.j2"
这还允许您对清单进行模板化,并在应用整个文件夹时即时解析它们。
请注意,此 ansible 任务期望
manifests
文件夹与正在运行的 playbook 位于同一路径中。
移至所有 yaml 文件所在的文件夹。
现在运行
kubectl apply -f .
记住在 -f 标志后面指定
.
点