有没有一种方法可以使用kubectl应用目录中的所有文件?

69

我正在编写一个ansible playbook,用于在kubernetes中部署docker化的应用程序。 但出于模块化目的,我宁愿不硬编码需要在运行kompose convert -f docker-compose.yaml --volumes hostPath后应用的文件。是否有一种方法可以应用目录中的所有文件?


将文件夹作为参数传递,但文件名对于应用顺序很重要。 - ferhatelmas
2
这个是不是类似于:kubectl apply -f {{folder}} - James Ukilin
5个回答

150

您可以使用以下方法应用文件夹中的所有文件:

kubectl apply -f <folder> 

您可能也对使用Kustomize 对清单文件进行参数化感兴趣,例如在生产命名空间中使用比测试命名空间中更多的副本。您可以使用 Kustomize 应用参数化的清单文件。

kubectl apply -k <folder>

59
添加 --recursive 将会递归地对所有子文件夹中的文件应用相同的操作。 - Rashack
24
"-R" 是 "--recursive" 的别名。 :) - Witt
在实践中,“kubectl apply -f 。”我刚刚发现了“kompose”。太棒了,我喜欢它;) - 只是浏览了页面:Greyman-Sacedo已经回答了这个问题。 - catch22

20

如果你想将给定目录中的所有文件应用程序,则将上述命令将目录作为"-f"选项的一个选项传递是完美的。

以下内容应用于当前目录中与给定条件匹配的yaml文件(例如,这里是以test开头的所有yaml文件)。

kubectl apply $(ls test*.yaml | awk ' { print " -f " $1 } ')

10
这对我很有帮助 >> kubectl apply -f .

6
一个特定于ansible的答案,使用ansible k8s模块,如下所示:
      - 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位于相同路径下。


0
移动到包含所有yaml文件的文件夹。
现在运行kubectl apply -f .
记得在-f标志后面指定.点。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接