有没有办法 kubectl 应用目录中的每个文件?

Jam*_*lin 23 kubernetes kubectl

我现在正在编写一个 ansible playbook,它在 kubernetes 中部署了一个 dockerized 应用程序。但是,出于分子目的,我宁愿不对执行后需要应用的文件进行硬编码kompose convert -f docker-compose.yaml --volumes hostPath 有没有办法应用目录中的所有文件?

Jon*_*nas 44

您可以应用文件夹中的所有文件

kubectl apply -f <folder> 
Run Code Online (Sandbox Code Playgroud)

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

kubectl apply -k <folder>
Run Code Online (Sandbox Code Playgroud)

  • 而 `-R` 是 `--recursive` 的别名:) (24认同)
  • ...添加 `--recursive` 也会递归应用子文件夹中的所有文件。 (11认同)

小智 13

这对我有用>>kubectl apply -f .


pr-*_*pal 8

如果您想应用给定目录中的所有文件,上述将目录作为“-f”选项的命令非常有效。

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

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


iom*_*omv 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"
Run Code Online (Sandbox Code Playgroud)

这还允许您对清单进行模板化,并在应用整个文件夹时即时解析它们。

请注意,此 ansible 任务期望该manifests文件夹与正在运行的 playbook 位于同一路径中。