kubernetes.core.kubectl 连接 – 在 Kubernetes 上运行的 Pod 中执行任务。

注意

此连接插件是 kubernetes.core 集合 (版本 5.0.0) 的一部分。

如果您使用的是 ansible 包,则可能已安装此集合。它不包含在 ansible-core 中。要检查是否已安装,请运行 ansible-galaxy collection list

要安装它,请使用:ansible-galaxy collection install kubernetes.core。您需要其他要求才能使用此连接插件,有关详细信息,请参阅 要求

要在 playbook 中使用它,请指定:kubernetes.core.kubectl

概要

  • 使用 kubectl exec 命令在 Kubernetes 容器平台上运行的任务中运行任务,或将文件放入/获取到 Pod 中。

要求

以下要求是在执行此连接的本地控制器节点上需要的。

  • kubectl(go 二进制文件)

参数

参数

注释

ca_cert

别名:kubectl_ssl_ca_cert

字符串

用于与 API 进行身份验证的 CA 证书的路径。

默认值: ""

配置

  • 环境变量:K8S_AUTH_SSL_CA_CERT

  • 变量:ansible_kubectl_ssl_ca_cert

  • 变量:ansible_kubectl_ca_cert

client_cert

别名:kubectl_cert_file

字符串

用于与 API 进行身份验证的证书的路径。

默认值: ""

配置

  • 环境变量:K8S_AUTH_CERT_FILE

  • 变量:ansible_kubectl_cert_file

  • 变量:ansible_kubectl_client_cert

client_key

别名:kubectl_key_file

字符串

用于与 API 进行身份验证的密钥文件的路径。

默认值: ""

配置

  • 环境变量:K8S_AUTH_KEY_FILE

  • 变量:ansible_kubectl_key_file

  • 变量:ansible_kubectl_client_key

kubectl_container

字符串

容器名称。

当 Pod 包含多个容器时,这是必需的。

默认值: ""

配置

kubectl_context

字符串

在 K8s 配置文件中找到的上下文的名称。

默认值: ""

配置

kubectl_extra_args

字符串

要传递给 kubectl 命令行的额外参数。

请注意,这会直接在命令行上传递信息,可能会泄露敏感数据。

默认值: ""

配置

kubectl_host

字符串

访问 API 的 URL。

默认值: ""

配置

kubectl_kubeconfig

字符串

kubectl 配置文件的路径。默认为 *~/.kube/config*

配置可以作为字典提供。在 2.4.0 版本中添加。

默认值: ""

配置

  • 环境变量:K8S_AUTH_KUBECONFIG

  • 变量:ansible_kubectl_kubeconfig

  • 变量:ansible_kubectl_config

kubectl_local_env_vars

字典

在 kubernetes.core 3.1.0 中添加

要本地传递到 kubectl 命令行的本地环境变量。

请注意,这会直接在命令行上传递信息,可能会泄露敏感数据。

默认值: {}

配置

  • 变量:ansible_kubectl_local_env_vars

kubectl_namespace

字符串

Pod 的命名空间

默认值: ""

配置

kubectl_password

字符串

提供用于与 API 进行身份验证的密码。

请注意,这会直接在命令行上传递信息,可能会泄露敏感数据。我们建议改用基于文件的身份验证选项。

默认值: ""

配置

kubectl_pod

字符串

Pod 名称。

当主机名与 Pod 名称不匹配时,这是必需的。

默认值: ""

配置

kubectl_token

字符串

API 身份验证令牌。

请注意,这会直接在命令行上传递信息,可能会泄露敏感数据。我们建议改用基于文件的身份验证选项。

配置

kubectl_username

字符串

提供用于与 API 进行身份验证的用户名。

默认值: ""

配置

  • 环境变量:K8S_AUTH_USERNAME

  • 变量:ansible_kubectl_username

  • 变量:ansible_kubectl_user

validate_certs

别名:kubectl_verify_ssl

字符串

是否验证 API 服务器的 SSL 证书。默认为 *true*。

默认值: ""

配置

  • 环境变量:K8S_AUTH_VERIFY_SSL

  • 变量:ansible_kubectl_verify_ssl

  • 变量:ansible_kubectl_validate_certs

示例

- name: Run a command in a pod using local kubectl with kubeconfig file ~/.kube/config
  hosts: localhost
  gather_facts: no
  vars:
    ansible_connection: kubernetes.core.kubectl
    ansible_kubectl_namespace: my-namespace
    ansible_kubectl_pod: my-pod
    ansible_kubectl_container: my-container
  tasks:
    # be aware that the command is executed as the user that started the container
    # and requires python to be installed in the image
    - name: Run a command in a pod
      ansible.builtin.command: echo "Hello, World!"

- name: Run a command in a pod using local kubectl with inventory variables
  # Example inventory:
  # k8s:
  #   hosts:
  #     foo.example.com:
  #       ansible_connection: kubernetes.core.kubectl
  #       ansible_kubectl_kubeconfig: /root/.kube/foo.example.com.config
  #       ansible_kubectl_pod: my-foo-pod
  #       ansible_kubectl_container: my-foo-container
  #       ansible_kubectl_namespace: my-foo-namespace
  #     bar.example.com:
  #       ansible_connection: kubernetes.core.kubectl
  #       ansible_kubectl_kubeconfig: /root/.kube/bar.example.com.config
  #       ansible_kubectl_pod: my-bar-pod
  #       ansible_kubectl_container: my-bar-container
  #       ansible_kubectl_namespace: my-bar-namespace
  hosts: k8s
  gather_facts: no
  tasks:
    # be aware that the command is executed as the user that started the container
    # and requires python to be installed in the image
    - name: Run a command in a pod
      ansible.builtin.command: echo "Hello, World!"

- name: Run a command in a pod using dynamic inventory
  hosts: localhost
  gather_facts: no
  vars:
    kubeconfig: /root/.kube/config
    namespace: my-namespace
    my_app: my-app
  tasks:
    - name: Get My App pod info based on label
      kubernetes.core.k8s_info:
        kubeconfig: "{{ kubeconfig }}"
        namespace: "{{ namespace }}"
        kind: Pod
        label_selectors: app.kubernetes.io/name = "{{ my_app }}"
      register: my_app_pod

    - name: Get My App pod name
      ansible.builtin.set_fact:
        my_app_pod_name: "{{ my_app_pod.resources[0].metadata.name }}"

    - name: Add My App pod to inventory
      ansible.builtin.add_host:
        name: "{{ my_app_pod_name }}"
        ansible_connection: kubernetes.core.kubectl
        ansible_kubectl_kubeconfig: "{{ kubeconfig }}"
        ansible_kubectl_pod: "{{ my_app_pod_name }}"
        ansible_kubectl_namespace: "{{ namespace }}"

    - name: Run a command in My App pod
      # be aware that the command is executed as the user that started the container
      # and requires python to be installed in the image
      ansible.builtin.command: echo "Hello, World!"
      delegate_to: "{{ my_app_pod_name }}"

作者

  • xuxinkun (@xuxinkun)

提示

每种条目类型的配置项具有从低到高的优先级顺序。例如,列表中较低的变量将覆盖较高的变量。