kubernetes.core.k8s 模块 – 管理 Kubernetes (K8s) 对象
注意
此模块是 kubernetes.core 集合 (版本 5.0.0) 的一部分。
如果您使用的是 ansible 包,则可能已安装此集合。它不包含在 ansible-core 中。要检查它是否已安装,请运行 ansible-galaxy collection list。
要安装它,请使用:ansible-galaxy collection install kubernetes.core。您需要其他要求才能使用此模块,有关详细信息,请参阅 要求。
要在 playbook 中使用它,请指定:kubernetes.core.k8s。
概要
- 使用 Kubernetes Python 客户端对 K8s 对象执行 CRUD 操作。 
- 从源文件或内联传递对象定义。有关读取文件以及使用 Jinja 模板或 vault 加密文件的示例,请参见示例。 
- 访问全面的 K8s API。 
- 使用 kubernetes.core.k8s_info 模块获取有关 - kind类型对象的项目列表
- 使用配置文件、证书、密码或令牌进行身份验证。 
- 支持检查模式。 
注意
此模块具有相应的 action 插件。
要求
执行此模块的主机需要以下要求。
- python >= 3.9 
- kubernetes >= 24.2.0 
- PyYAML >= 3.11 
- jsonpatch 
参数
| 参数 | 注释 | 
|---|---|
| 用于向 API 进行身份验证的令牌。也可以通过 K8S_AUTH_API_KEY 环境变量指定。 | |
| 用于指定 API 版本。 用于创建、删除或发现对象,无需提供完整的资源定义。 与 kind、name 和 namespace 结合使用以识别特定对象。 如果提供了 resource definition,则来自 resource_definition 的 apiVersion 值将覆盖此选项。 默认值:  | |
| 是否将哈希值附加到资源名称以实现不变性 仅适用于 ConfigMap 和 Secret 资源 对于其他资源类型,此参数将被静默忽略 需要对象的完整定义才能生成哈希值——这意味着,删除使用 append_hash 创建的对象,只有在使用 state=absent 传递相同对象时才有效(或者,只需使用 state=absent 和包含生成的哈希值的名称以及 append_hash=no) 选项 
 | |
| 
 
 与  选项 
 | |
| 用于向 API 进行身份验证的 CA 证书的路径。必须提供完整的证书链以避免证书验证错误。也可以通过 K8S_AUTH_SSL_CA_CERT 环境变量指定。 | |
| 用于向 API 进行身份验证的证书的路径。也可以通过 K8S_AUTH_CERT_FILE 环境变量指定。 | |
| 用于向 API 进行身份验证的密钥文件的路径。也可以通过 K8S_AUTH_KEY_FILE 环境变量指定。 | |
| 配置文件中找到的上下文名称。也可以通过 K8S_AUTH_CONTEXT 环境变量指定。 | |
| 在定义多个资源时,是否在创建/删除错误时继续。 这对由  选项 
 | |
| 当此选项设置为 true 且 state=absent 时,模块将删除请求的命名空间中指定资源类型的所有资源。 当  使用此选项需要参数  此参数可与  选项 
 | |
| 配置删除对象时的行为。 仅在 state=absent 时使用。 | |
| 指定强制终止之前等待多少秒。 仅适用于 Pod 资源。 如果未指定,将使用对象类型的默认宽限期。 | |
| 指定必须满足才能进行删除的条件。 | |
| 指定目标对象的资源版本。 | |
| 指定目标对象的 UID。 | |
| 用于控制如何删除依赖对象。 如果未指定,将使用对象类型的默认策略。这可能因对象类型而异。 选项 
 | |
| 如果设置为  选项 
 | |
| 用于指定对象名称的基础,服务器将自动添加随机字符以生成唯一名称。 当state未设置为 如果提供了资源定义,则来自resource_definition的metadata.generateName值将覆盖此选项。 如果提供了资源定义且包含metadata.name,则此选项将被忽略。 与 | |
| 隐藏结果中与此选项匹配的字段 例如 仅支持不引用列表项的字段定义(因此 | |
| 提供用于访问API的URL。也可以通过K8S_AUTH_HOST环境变量指定。 | |
| 用于操作的模拟组。 也可以通过K8S_AUTH_IMPERSONATE_GROUPS环境变量指定。例如:Group1,Group2 | |
| 用于操作的模拟用户名。 也可以通过K8S_AUTH_IMPERSONATE_USER环境变量指定。 | |
| 用于指定对象模型。 用于创建、删除或发现对象,无需提供完整的资源定义。 结合api_version、name和namespace来标识特定对象。 如果提供了资源定义,则来自resource_definition的kind值将覆盖此选项。 | |
| 现有Kubernetes配置文件的路径。如果没有提供,并且没有提供其他连接选项,Kubernetes客户端将尝试从~/.kube/config加载默认配置文件。也可以通过K8S_AUTH_KUBECONFIG环境变量指定。 可以使用分隔符“;” (Windows平台) 或 “:” (其他平台) 提供多个Kubernetes配置文件。 Kubernetes配置可以作为字典提供。此功能需要python kubernetes客户端版本>= 17.17.0。在2.2.0版本中添加。 | |
| 用于过滤的筛选器(标签查询)。 | |
| 是否使用特定类型覆盖默认的补丁合并方法。默认情况下,通常会使用策略性合并。 例如,自定义资源定义通常无法通过通常的策略性合并进行更新。如果您看到“不支持战略合并补丁格式”,则可能需要使用 如果给出了多个 与 merge_type=json已在4.0.0版本中移除。请改用kubernetes.core.k8s_json_patch。 选项 
 | |
| 用于指定对象名称。 用于创建、删除或发现对象,无需提供完整的资源定义。 结合api_version、kind和namespace来标识特定对象。 如果提供了资源定义,则来自resource_definition的metadata.name值将覆盖此选项。 | |
| 用于指定对象命名空间。 在不提供完整资源定义的情况下创建、删除或发现对象时很有用。 结合api_version、kind和name来标识特定对象。 如果提供了资源定义,则来自resource_definition的metadata.namespace值将覆盖此选项。 | |
| 不应通过代理的主机/域/IP/CIDR 的逗号分隔列表。也可以通过K8S_AUTH_NO_PROXY环境变量指定。 请注意,此模块不会从环境中获取典型的代理设置(例如NO_PROXY)。 此功能需要kubernetes>=19.15.0。当kubernetes库小于19.15.0时,即使no_proxy设置正确也会失败。 示例值是“localhost,.local,.example.com,127.0.0.1,127.0.0.0/8,10.0.0.0/8,172.16.0.0/12,192.168.0.0/16” | |
| 提供用于通过API进行身份验证的密码。也可以通过K8S_AUTH_PASSWORD环境变量指定。 请阅读 | |
| 是否保存kube config刷新令牌。也可以通过K8S_AUTH_PERSIST_CONFIG环境变量指定。 当k8s上下文使用具有刷新令牌的用户凭据(如oidc或gke/gcloud auth)时,令牌将由k8s python客户端库刷新,但默认情况下不会保存。因此,旧的刷新令牌可能会过期,并且下一次身份验证可能会失败。将此标志设置为true将告诉k8s python客户端将新的刷新令牌保存到kube config文件。 默认为false。 请注意,当前版本的k8s python客户端库尚不支持将此标志设置为True。 k8s python库的此修复程序位于:https://github.com/kubernetes-client/python-base/pull/169 选项 
 | |
| 用于连接的HTTP代理的URL。也可以通过K8S_AUTH_PROXY环境变量指定。 请注意,此模块不会从环境中获取典型的代理设置(例如HTTP_PROXY)。 | |
| 用于基本身份验证标头的冒号分隔的用户名:密码。 也可以通过K8S_AUTH_PROXY_HEADERS_BASIC_AUTH环境变量指定。 | |
| 用于代理基本身份验证标头的冒号分隔的用户名:密码。 也可以通过K8S_AUTH_PROXY_HEADERS_PROXY_BASIC_AUTH环境变量指定。 | |
| 表示您想要的user-agent的字符串,例如foo/1.0。 也可以通过K8S_AUTH_PROXY_HEADERS_USER_AGENT环境变量指定。 | |
| 在创建或更新时,提供对象的有效YAML定义(作为字符串、列表或字典)。 注意:kind、api_version、name和namespace将被提供的resource_definition中找到的相应值覆盖。 | |
| 设置此选项后,apply将在服务器而不是客户端运行。 如果 此选项需要“kubernetes >= 19.15.0”。 | |
| 用于跟踪字段所有权的管理器名称。 | |
| 冲突是一种特殊的状态错误,当服务器端应用操作尝试更改另一个用户也声明要管理的字段时发生。 设置为True时,服务器端应用将强制针对冲突进行更改。 选项 
 | |
| 提供包含要创建或更新的对象或对象的有效YAML定义的文件的路径。与resource_definition互斥。注意:kind、api_version、name和namespace将被从src文件中读取的配置中找到的相应值覆盖。 从本地文件系统读取。要从Ansible控制器的文件系统读取,包括保管库文件,请使用文件查找插件或模板查找插件,结合from_yaml过滤器,并将结果传递给resource_definition。请参见下面的示例。 可用于创建资源的清单文件的URL。在2.4.0版本中添加。 在kubernetes.core.k8s模块的情况下与template互斥。 | |
| 确定是否应创建、修补或删除对象。设置为 
 选项 
 | |
| 在创建或更新时,提供对象的有效YAML模板定义文件。 值可以作为字符串或字典提供。 此参数接受多个模板文件。在2.0.0版本中添加。 与 模板文件需要存在于Ansible控制器的文件系统上。 可以使用字典指定其他参数。 有效的附加参数 - 
 
 
 
 
 
 
 | |
| 提供用于通过API进行身份验证的用户名。也可以通过K8S_AUTH_USERNAME环境变量指定。 请注意,此功能仅适用于配置为使用 HTTP 基本身份验证的集群。如果您的集群使用其他身份验证方式(例如 OpenShift 中的 OAuth2),则此选项将无法按预期工作,您应该查看 community.okd.k8s_auth 模块,因为它可能满足您的需求。 | |
| 如何(如果可以)根据 Kubernetes 模式验证资源定义。需要 kubernetes-validate python 模块。 | |
| 是否在验证错误时失败。 选项 
 | |
| 传递意外属性时是否失败 选项 
 | |
| 要验证的 Kubernetes 版本。默认为 Kubernetes 服务器版本 | |
| 是否验证 API 服务器的 SSL 证书。也可以通过 K8S_AUTH_VERIFY_SSL 环境变量指定。 选项 
 | |
| 是否等待某些资源类型达到所需状态。 默认情况下,一旦 Kubernetes 接收到请求,模块就会退出。 已为  对于没有实现的资源类型,除非设置了  选项 
 | |
| 指定要等待的状态的自定义条件。 如果  | |
| 所需条件中 reason 字段的值 例如,如果  条件中可能的原因特定于 Kubernetes 中的每种资源类型。 请参阅给定资源的状态字段的 API 文档以查看可能的选项。 | |
| 所需条件中 status 字段的值。 例如,如果  选项 
 | |
| 要等待的条件类型。 例如, 如果您正在指定  如果留空,则将忽略  条件的可能类型特定于 Kubernetes 中的每种资源类型。 请参阅给定资源的状态字段的 API 文档以查看可能的选项。 | |
| 检查之间休眠的秒数。 默认值:  | |
| 等待资源达到所需状态的秒数。 如果  默认值:  | 
注释
注意
- 当 - validate_certs为 True 时,为避免 SSL 证书验证错误,必须通过- ca_cert或 kubeconfig 文件提供 API 服务器的完整证书链。
示例
- name: Create a k8s namespace
  kubernetes.core.k8s:
    name: testing
    api_version: v1
    kind: Namespace
    state: present
- name: Create a Service object from an inline definition
  kubernetes.core.k8s:
    state: present
    definition:
      apiVersion: v1
      kind: Service
      metadata:
        name: web
        namespace: testing
        labels:
          app: galaxy
          service: web
      spec:
        selector:
          app: galaxy
          service: web
        ports:
        - protocol: TCP
          targetPort: 8000
          name: port-8000-tcp
          port: 8000
- name: Remove an existing Service object
  kubernetes.core.k8s:
    state: absent
    api_version: v1
    kind: Service
    namespace: testing
    name: web
# Passing the object definition from a file
- name: Create a Deployment by reading the definition from a local file
  kubernetes.core.k8s:
    state: present
    src: /testing/deployment.yml
- name: >-
    Read definition file from the Ansible controller file system.
    If the definition file has been encrypted with Ansible Vault it will automatically be decrypted.
  kubernetes.core.k8s:
    state: present
    definition: "{{ lookup('file', '/testing/deployment.yml') | from_yaml }}"
- name: >-
    (Alternative) Read definition file from the Ansible controller file system.
    In this case, the definition file contains multiple YAML documents, separated by ---.
    If the definition file has been encrypted with Ansible Vault it will automatically be decrypted.
  kubernetes.core.k8s:
    state: present
    definition: "{{ lookup('file', '/testing/deployment.yml') | from_yaml_all }}"
- name: Read definition template file from the Ansible controller file system
  kubernetes.core.k8s:
    state: present
    template: '/testing/deployment.j2'
- name: Read definition template file from the Ansible controller file system that uses custom start/end strings
  kubernetes.core.k8s:
    state: present
    template:
      path: '/testing/deployment.j2'
      variable_start_string: '[['
      variable_end_string: ']]'
- name: Read multiple definition template file from the Ansible controller file system
  kubernetes.core.k8s:
    state: present
    template:
    - path: '/testing/deployment_one.j2'
    - path: '/testing/deployment_two.j2'
      variable_start_string: '[['
      variable_end_string: ']]'
- name: fail on validation errors
  kubernetes.core.k8s:
    state: present
    definition: "{{ lookup('template', '/testing/deployment.yml') | from_yaml }}"
    validate:
      fail_on_error: yes
- name: warn on validation errors, check for unexpected properties
  kubernetes.core.k8s:
    state: present
    definition: "{{ lookup('template', '/testing/deployment.yml') | from_yaml }}"
    validate:
      fail_on_error: no
      strict: yes
# Download and apply manifest
- name: Download metrics-server manifest to the cluster.
  ansible.builtin.get_url:
    url: https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml
    dest: ~/metrics-server.yaml
    mode: '0664'
- name: Apply metrics-server manifest to the cluster.
  kubernetes.core.k8s:
    state: present
    src: ~/metrics-server.yaml
# Wait for a Deployment to pause before continuing
- name: Pause a Deployment.
  kubernetes.core.k8s:
    definition:
      apiVersion: apps/v1
      kind: Deployment
      metadata:
        name: example
        namespace: testing
      spec:
        paused: True
    wait: yes
    wait_condition:
      type: Progressing
      status: Unknown
      reason: DeploymentPaused
# Patch existing namespace : add label
- name: add label to existing namespace
  kubernetes.core.k8s:
    state: patched
    kind: Namespace
    name: patch_namespace
    definition:
      metadata:
        labels:
          support: patch
# Create object using generateName
- name: create resource using name generated by the server
  kubernetes.core.k8s:
    state: present
    generate_name: pod-
    definition:
      apiVersion: v1
      kind: Pod
      spec:
        containers:
        - name: py
          image: python:3.7-alpine
          imagePullPolicy: IfNotPresent
# Server side apply
- name: Create configmap using server side apply
  kubernetes.core.k8s:
    namespace: testing
    definition:
      apiVersion: v1
      kind: ConfigMap
      metadata:
        name: my-configmap
    apply: yes
    server_side_apply:
      field_manager: ansible
# Delete all Deployment from specified namespace
- name: Delete all Deployment from specified namespace
  kubernetes.core.k8s:
    api_version: apps/v1
    namespace: testing
    kind: Deployment
    delete_all: true
返回值
常见的返回值已在 此处 记录,以下是此模块特有的字段
| 键 | 描述 | 
|---|---|
| 已创建、已修补或其他存在的对象。在删除情况下将为空。 已返回:成功 | |
| 对象的此表示形式的版本化模式。 已返回:成功 | |
| 任务的经过时间(秒) 已返回:当  示例:  | |
| 尝试创建/删除对象时的错误。 已返回:错误 | |
| 仅当将多个 yaml 文档传递给 src 或 resource_definition 时返回 已返回:当 resource_definition 或 src 包含对象列表时 | |
| 表示此对象所代表的 REST 资源。 已返回:成功 | |
| 标准对象元数据。包括名称、命名空间、注释、标签等。 已返回:成功 | |
| 对象的特定属性。将根据api_version 和 kind 而有所不同。 已返回:成功 | |
| 对象的当前状态详细信息。 已返回:成功 | 
