kubernetes.core.k8s_drain 模块 – 排空、隔离或取消隔离 k8s 集群中的节点
注意
此模块是 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 除外(镜像 Pod 无法通过 API 服务器删除)。
注意
此模块具有相应的 操作插件。
要求
执行此模块的主机需要以下要求。
python >= 3.9
kubernetes >= 24.2.0
参数
参数 |
注释 |
---|---|
用于与 API 进行身份验证的令牌。也可以通过 K8S_AUTH_API_KEY 环境变量指定。 |
|
用于与 API 进行身份验证的 CA 证书的路径。必须提供完整的证书链以避免证书验证错误。也可以通过 K8S_AUTH_SSL_CA_CERT 环境变量指定。 |
|
用于与 API 进行身份验证的证书的路径。也可以通过 K8S_AUTH_CERT_FILE 环境变量指定。 |
|
用于与 API 进行身份验证的密钥文件的路径。也可以通过 K8S_AUTH_KEY_FILE 环境变量指定。 |
|
配置文件中找到的上下文的名称。也可以通过 K8S_AUTH_CONTEXT 环境变量指定。 |
|
指定删除 Pod 的选项。 仅当 默认值: |
|
即使有 Pod 正在使用 emptyDir(在节点排空时将被删除的本地数据),也继续操作。 选项
|
|
强制排空使用删除而不是驱逐。 选项
|
|
即使存在不由 ReplicationController、Job 或 DaemonSet 管理的 Pod,也继续操作。 选项
|
|
忽略 DaemonSet 管理的 Pod。 选项
|
|
指定在强制终止之前等待多少秒。 如果未指定,将使用对象类型的默认宽限期。 值零表示立即删除。 |
|
检查之间休眠的秒数。 如果未设置 默认值: |
|
等待 Pod 被删除的最大时间(以秒为单位),零表示无限等待。 |
|
提供用于访问 API 的 URL。也可以通过 K8S_AUTH_HOST 环境变量指定。 |
|
要模拟操作的组。 也可以通过 K8S_AUTH_IMPERSONATE_GROUPS 环境变量指定。示例:Group1,Group2 |
|
要模拟操作的用户名。 也可以通过 K8S_AUTH_IMPERSONATE_USER 环境变量指定。 |
|
现有 Kubernetes 配置文件的路径。如果未提供,并且没有提供其他连接选项,则 Kubernetes 客户端将尝试从 ~/.kube/config 加载默认配置文件。也可以通过 K8S_AUTH_KUBECONFIG 环境变量指定。 可以使用分隔符“;”(对于 Windows 平台)或“:”(对于其他平台)提供多个 Kubernetes 配置文件。 Kubernetes 配置可以作为字典提供。此功能需要 python kubernetes 客户端版本 >= 17.17.0。在 2.2.0 版本中添加。 |
|
节点的名称。 |
|
不应通过代理的以逗号分隔的主机/域/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 身份验证)时,令牌将由 k8s python 客户端库刷新,但默认情况下不会保存。因此,旧的刷新令牌可能会过期,并且下一次身份验证可能会失败。将此标志设置为 true 将告诉 k8s python 客户端将新的刷新令牌保存到 kube 配置文件中。 默认为 false。 请注意,当前版本的 k8s python 客户端库尚不支持将此标志设置为 True。 此 k8s python 库的修复程序在此处:https://github.com/kubernetes-client/python-base/pull/169 选项
|
|
用于过滤节点上 Pod 的标签选择器。 仅当 |
|
用于连接的 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 环境变量指定。 |
|
确定是排空、隔离还是取消隔离节点。 选项
|
|
提供用于 API 身份验证的用户名。也可以通过 K8S_AUTH_USERNAME 环境变量指定。 请注意,这仅适用于配置为使用 HTTP 基本身份验证的集群。如果您的集群具有不同的身份验证形式(例如 OpenShift 中的 OAuth2),则此选项将无法按预期工作,您应该查看 community.okd.k8s_auth 模块,因为它可能会满足您的需求。 |
|
是否验证 API 服务器的 SSL 证书。也可以通过 K8S_AUTH_VERIFY_SSL 环境变量指定。 选项
|
注释
注意
为了避免在
validate_certs
为 True 时出现 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'
返回值
通用返回值已在此处记录 此处,以下是此模块独有的字段
键 |
描述 |
---|---|
节点状态和已删除的 Pod 数量。 返回: 成功 |