kubernetes.core.k8s_drain 模块 – 在 Kubernetes 集群中驱逐、隔离或取消隔离节点

注意

此模块是 kubernetes.core 集合 (版本 5.0.0) 的一部分。

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

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

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

kubernetes.core 2.2.0 中的新增功能

概要

  • 准备维护时驱逐节点,与 kubectl drain 相同。

  • 隔离会将节点标记为不可调度。

  • 取消隔离会将节点标记为可调度。

  • 给定的节点将被标记为不可调度,以防止新的 Pod 到达。

  • 然后,驱逐会删除所有 Pod,除了镜像 Pod(无法通过 API 服务器删除)。

注意

此模块具有相应的 action 插件

要求

执行此模块的主机需要以下要求。

  • python >= 3.9

  • kubernetes >= 24.2.0

参数

参数

注释

api_key

字符串

用于对 API 进行身份验证的令牌。也可以通过 K8S_AUTH_API_KEY 环境变量指定。

ca_cert

别名:ssl_ca_cert

路径

用于对 API 进行身份验证的 CA 证书的路径。必须提供完整的证书链,以避免证书验证错误。也可以通过 K8S_AUTH_SSL_CA_CERT 环境变量指定。

client_cert

别名:cert_file

路径

用于对 API 进行身份验证的证书的路径。也可以通过 K8S_AUTH_CERT_FILE 环境变量指定。

client_key

别名:key_file

路径

用于对 API 进行身份验证的密钥文件的路径。也可以通过 K8S_AUTH_KEY_FILE 环境变量指定。

context

字符串

配置文件中找到的上下文名称。也可以通过 K8S_AUTH_CONTEXT 环境变量指定。

delete_options

字典

指定删除 Pod 的选项。

此选项仅在 state 设置为 *drain* 时有效。

默认值: {}

delete_emptydir_data

布尔值

kubernetes.core 2.3.0 中新增

即使存在使用 emptyDir 的 Pod(在节点被驱逐时将被删除的本地数据),也要继续。

选项

  • false ← (默认)

  • true

disable_eviction

布尔值

强制驱逐使用删除而不是驱逐。

选项

  • false ← (默认)

  • true

force

布尔值

即使存在未由 ReplicationController、Job 或 DaemonSet 管理的 Pod,也要继续。

选项

  • false ← (默认)

  • true

ignore_daemonsets

布尔值

忽略 DaemonSet 管理的 Pod。

选项

  • false ← (默认)

  • true

terminate_grace_period

整数

指定强制终止前等待的秒数。

如果未指定,则将使用对象类型的默认宽限期。

值为零表示立即删除。

wait_sleep

整数

检查之间休眠的秒数。

如果未设置 wait_timeout,则忽略。

默认值: 5

wait_timeout

整数

等待 Pod 删除的秒数,超过此时间则放弃,零表示无限。

host

字符串

提供用于访问 API 的 URL。也可以通过 K8S_AUTH_HOST 环境变量指定。

impersonate_groups

列表 / 元素=字符串

kubernetes.core 2.3.0 中新增

要为操作模拟的组。

也可以通过 K8S_AUTH_IMPERSONATE_GROUPS 环境变量指定。例如:Group1,Group2

impersonate_user

字符串

kubernetes.core 2.3.0 中新增

要为操作模拟的用户名。

也可以通过 K8S_AUTH_IMPERSONATE_USER 环境变量指定。

kubeconfig

任意

现有 Kubernetes 配置文件的路径。如果没有提供,并且没有提供其他连接选项,Kubernetes 客户端将尝试从 ~/.kube/config 加载默认配置文件。也可以通过 K8S_AUTH_KUBECONFIG 环境变量指定。

可以使用分隔符“;” (Windows 平台)或“:”(其他平台)提供多个 Kubernetes 配置文件。

Kubernetes 配置可以作为字典提供。此功能需要 python kubernetes 客户端版本 >= 17.17.0。在 2.2.0 版本中添加。

name

字符串 / 必需

节点的名称。

no_proxy

字符串

kubernetes.core 2.3.0 中新增

不应该通过代理的 host/domain/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 环境变量指定。

请阅读username选项的描述,了解此选项适用的情况。

persist_config

布尔值

是否保存 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

选项

  • false

  • true

pod_selectors

别名:label_selectors

列表 / 元素=字符串

kubernetes.core 2.5.0 中添加

标签选择器,用于过滤节点上的 Pod。

此选项仅在 state 设置为 *drain* 时有效。

proxy

字符串

用于连接的 HTTP 代理的 URL。也可以通过 K8S_AUTH_PROXY 环境变量指定。

请注意,此模块不会从环境中获取典型的代理设置(例如 HTTP_PROXY)。

proxy_headers

字典

kubernetes.core 2.0.0 中添加

basic_auth

字符串

用于基本身份验证标头的冒号分隔的用户名:密码。

也可以通过 K8S_AUTH_PROXY_HEADERS_BASIC_AUTH 环境变量指定。

proxy_basic_auth

字符串

用于代理基本身份验证标头的冒号分隔的用户名:密码。

也可以通过 K8S_AUTH_PROXY_HEADERS_PROXY_BASIC_AUTH 环境变量指定。

user_agent

字符串

表示所需用户代理的字符串,例如 foo/1.0。

也可以通过 K8S_AUTH_PROXY_HEADERS_USER_AGENT 环境变量指定。

state

字符串

确定是 drain、cordon 还是 uncordon 节点。

选项

  • "cordon"

  • "drain" ← (默认)

  • "uncordon"

username

字符串

提供用于与 API 进行身份验证的用户名。也可以通过 K8S_AUTH_USERNAME 环境变量指定。

请注意,这仅适用于配置为使用 HTTP 基本身份验证的集群。如果您的集群使用其他形式的身份验证(例如 OpenShift 中的 OAuth2),则此选项将无法按预期工作,您应该查看community.okd.k8s_auth 模块,因为它可能满足您的需求。

validate_certs

别名:verify_ssl

布尔值

是否验证 API 服务器的 SSL 证书。也可以通过 K8S_AUTH_VERIFY_SSL 环境变量指定。

选项

  • false

  • true

注释

注意

  • validate_certsTrue 时,为避免 SSL 证书验证错误,必须通过ca_cert或 kubeconfig 文件提供 API 服务器的完整证书链。

示例

- name: Drain node "foo", even if there are pods not managed by a ReplicationController, Job, or DaemonSet on it.
  kubernetes.core.k8s_drain:
    state: drain
    name: foo
    force: yes

- name: Drain node "foo", but abort if there are pods not managed by a ReplicationController, Job, or DaemonSet, and use a grace period of 15 minutes.
  kubernetes.core.k8s_drain:
    state: drain
    name: foo
    delete_options:
      terminate_grace_period: 900

- name: Mark node "foo" as schedulable.
  kubernetes.core.k8s_drain:
    state: uncordon
    name: foo

- name: Mark node "foo" as unschedulable.
  kubernetes.core.k8s_drain:
    state: cordon
    name: foo

- name: Drain node "foo" using label selector to filter the list of pods to be drained.
  kubernetes.core.k8s_drain:
    state: drain
    name: foo
    pod_selectors:
    - 'app!=csi-attacher'
    - 'app!=csi-provisioner'

返回值

常见的返回值已在此处记录,以下是此模块特有的字段

描述

result

字符串

节点状态和已删除的 Pod 数量。

返回:success

作者

  • Aubin Bikouo (@abikouo)