【问题标题】:how to run cmd kubectl apply using Ansible properly如何正确使用 Ansible 运行 cmd kubectl apply
【发布时间】:2022-01-07 05:21:05
【问题描述】:
我正在尝试自动化以下操作:
- 应用物理卷
- kubectl apply -f food-pv.yaml
- kubectl apply -f bar-pv.yaml
- 应用物理卷声明
- kubectl apply -f foo.yaml
- kubectl apply -f bar.yaml
- 应用服务
- kubectl apply -f this-service.yaml
- kubectl apply -f that-nodeport.yaml
- 应用部署
- kubectl apply -f something.yaml
现在我可以将 cmds 作为 shell 命令运行,但我认为这不是正确的方法。我一直在阅读 Ansible 文档,但我没有看到我需要为此做些什么。有没有更好的方法来应用这些 yaml 文件而不使用一系列 shell cmd?
提前致谢
【问题讨论】:
标签:
kubernetes
ansible
kubectl
【解决方案1】:
最好的方法是使用 ansible kubernetes.core 集合https://github.com/ansible-collections/kubernetes.core
文件示例:
- name: Create a Deployment by reading the definition from a local file
kubernetes.core.k8s:
state: present
src: /testing/deployment.yml
因此,您可以使用 state: present 从包含对象的 yaml 定义的不同文件夹中循环访问
【解决方案2】:
我目前没有正在运行的 kube 集群来测试它,但您基本上应该能够使用 kubernetes.core.k8s module 循环在单个任务中运行所有这些
这是我认为应该满足您的要求的内容(前提是您对 kube 实例的访问权限已在您的环境中配置并正常,并且您按照文档中的说明安装了上述集合)
- name: install my kube objects
hosts: localhost
gather_facts: false
vars:
obj_def_path: /path/to/your/obj_def_dir/
obj_def_list:
- food-pv.yaml
- bar-pv.yaml
- foo.yaml
- bar.yaml
- this-service.yaml
- that-nodeport.yaml
- something.yaml
tasks:
- name: Install all objects from def files
k8s:
src: "{{ obj_def_path }}/{{ item }}"
state: present
apply: true
loop: "{{ obj_def_list }}"