【问题标题】:Is there a way to kubectl apply all the files in a directory?有没有办法 kubectl 应用目录中的所有文件?
【发布时间】:2020-04-16 20:49:20
【问题描述】:

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

【问题讨论】:

  • 将文件夹作为参数,但文件名对应用顺序很重要
  • 会不会像:kubectl apply -f {{folder}}?

标签: kubernetes kubectl


【解决方案1】:

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

kubectl apply -f <folder> 

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

kubectl apply -k <folder>

【讨论】:

  • ...添加--recursive 也将递归应用子文件夹中的所有文件。
  • -R--recursive 的别名:)
【解决方案2】:

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

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

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

【讨论】:

    【解决方案3】:

    使用 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 位于同一路径中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-06
      • 1970-01-01
      相关资源
      最近更新 更多