kubernetes - 如何从 Ansible 将变量传递到 Kubernetes YAML 文件?

标签 kubernetes ansible

我试图将变量从 Ansible 传递到 kubernetes YAML 文件,但不知何故,值没有被填充。

这是我的剧本:

- hosts: master
  gather_facts: no
  vars:
    logstash_port: 5044
  tasks:
   - name: Creating kubernetes pod
     command: kubectl create -f logstash.yml

logstash.yml:

apiVersion: v1
kind: Pod
metadata: logstash
spec:
  containers:
  - name: logstash
    image: logstash
    ports:
      - containerPort: {{ logstash_port }}

是否有更好的方法将参数传递给使用命令任务调用的 Kubernetes YAML 文件?

最佳答案

你正在尝试做的事情没有机会成功。 Kubernetes(kubectl 命令)与 Jinja2 语法无关,您尝试在 logstash.yml 中使用该语法,并且它没有访问 Ansible 对象(出于多种原因)。


相反,请使用 k8s_raw module管理 Kubernetes 对象。

您可以将 Kubernetes 的 list 直接包含在 definition 声明中,然后您可以使用 Jinja2 模板:

- k8s_raw:
    state: present
    definition:
      apiVersion: v1
      kind: Pod
      metadata: logstash
      spec:
        containers:
          - name: logstash
            image: logstash
            ports:
              - containerPort: "{{ logstash_port }}"

或者您可以保留 logstash.yml 不变,并使用模板查找插件提供它:

- k8s_raw:
    state: present
    definition: "{{ lookup('template', 'path/to/logstash.yml') | from_yaml }}"

注意,如果您在 Ansible 代码中直接使用 Jinja2 模板,则必须引用它。模板插件不需要。

关于kubernetes - 如何从 Ansible 将变量传递到 Kubernetes YAML 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50806103/

相关文章:

ansible - 如何按值对字典进行排序

kubernetes - Kubernetes NodePort Type Service 如何负载均衡到 pod

kubernetes - 如何配置 Istio 虚拟服务目标协议(protocol)

ansible - 排除排序列表的前三个项目

docker - 通过 Ansible 执行 docker-compose pull

Ansible 在库存中使用变量

ansible - 如何在 Ansible 中交替替换多个列表的元素?

kubernetes - 如何将二进制文件注入(inject) v1.7 pod

kubernetes - 从 GitLab CI 作业向 Kubernetes Pod 发送信号

docker - 如何将 Kubernetes 或 Docker Swarm 服务置于防火墙后面