kubectl drain
简介
腾空节点以准备维护。
给定节点将被标记为不可调度,以防止新的 Pod 调度到此。
如果 API 服务器支持 Eviction,
则 "drain" 会驱逐 Pod。否则,它将使用常规的 DELETE 来删除 Pod。
"drain" 会驱逐或删除除镜像 Pod(无法通过 API 服务器删除)之外的所有 Pod。
如果存在 DaemonSet 管理的 Pod,若没有 --ignore-daemonsets
,"drain" 将不会继续执行,
无论如何,"drain" 操作都不会删除 Daemonset 所管理的任何 Pod,因为这些 Pod 会立即被 DaemonSet 控制器替换,
如果有 Pod 既不是镜像 Pod,也不是由 ReplicationController、ReplicaSet、DaemonSet、StatefulSet 或 Job 管理,
则 "drain" 不会删除此 Pod,除非你使用 --force。如果一个或多个 Pod 的管理资源丢失,--force 还将允许继续删除。
"drain" 等待体面终止。在命令完成之前,不应在机器上进行操作。
当你准备好将节点重新投入使用时,请使用 kubectl uncordon
,这将使节点再次可调度。
kubectl drain NODE
示例
# 腾空节点 "foo",即使上面有不受 ReplicationController、ReplicaSet、Job、DaemonSet
# 或 StatefulSet 管理的 Pod
kubectl drain foo --force
# 与上条命令类似,但如果存在不受 ReplicationController、ReplicaSet、Job、DaemonSet
# 或 StatefulSet 管理的 Pod,则中止,并使用 15 分钟的宽限期
kubectl drain foo --grace-period=900
选项
--chunk-size int 默认值:500 | |
以块的形式返回大的列表,而不是一次性全部返回。设为 0 表示禁用。 此标志处于 Beta 阶段,未来可能会有变更。 |
|
--delete-emptydir-data | |
即使存在使用 emptyDir(腾空节点时将被删除的本地数据)的 Pod,也要继续。 |
|
--disable-eviction | |
强制使用删除操作来进行节点腾空,即使系统支持驱逐操作。 这种设置将绕过检查 PodDisruptionBudget 约束,请谨慎使用。 |
|
--dry-run string[="unchanged"] 默认值:"none" | |
必须是 "none"、"server" 或 "client"。如果是 client 策略,仅打印将要发送的对象,而不实际发送。 如果是 server 策略,提交服务器端请求而不持久化资源。 |
|
--force | |
即使存在未声明控制器的 Pod,也要继续。 |
|
--grace-period int 默认值:-1 | |
给予每个 Pod 体面终止的时间段长度(以秒为单位)。如果为负,则将使用 Pod 中指定的默认值。 |
|
-h, --help | |
关于 drain 的帮助信息。 |
|
--ignore-daemonsets | |
忽略 DaemonSet 所控制的 Pod。 |
|
--pod-selector string | |
用于过滤节点上 Pod 的标签选择器。 |
|
-l, --selector string | |
过滤所用的选择算符(标签查询),支持 '='、'=='、'!='、'in' 和 'notin'。
(例如 |
|
--skip-wait-for-delete-timeout int | |
如果 Pod 的 DeletionTimestamp 比当前时间早 N 秒,那么跳过等待该 Pod 的过程。 秒数必须大于 0 才能跳过等待。 |
|
--timeout duration | |
在放弃之前等待的时间长度,为 0 表示无限等待。 |
Parent Options Inherited
--as string | |
操作所用的伪装用户名。用户可以是常规用户或命名空间中的服务账号。 |
|
--as-group strings | |
操作所用的伪装用户组,此标志可以被重复设置以指定多个组。 |
|
--as-uid string | |
操作所用的伪装 UID。 |
|
--cache-dir string Default: "$HOME/.kube/cache" | |
默认缓存目录。 |
|
--certificate-authority string | |
证书机构的证书文件的路径。 |
|
--client-certificate string | |
TLS 客户端证书文件的路径。 |
|
--client-key string | |
TLS 客户端密钥文件的路径。 |
|
--cluster string | |
要使用的 kubeconfig 中集群的名称。 |
|
--context string | |
要使用的 kubeconfig 上下文的名称。 |
|
--disable-compression | |
如果为 true,则对服务器所有请求的响应不再压缩。 |
|
--insecure-skip-tls-verify | |
如果为 true,则不检查服务器证书的有效性。这将使你的 HTTPS 连接不安全。 |
|
--kubeconfig string | |
CLI 请求要使用的 kubeconfig 文件的路径。 |
|
--kuberc string | |
用于偏好设置的 kuberc 文件的路径。可以通过导出 KUBECTL_KUBERC=false 特性门控或关闭 KUBERC=off 特性门控来禁用此功能。 |
|
--match-server-version | |
要求服务器版本与客户端版本匹配。 |
|
-n, --namespace string | |
如果存在,则是此 CLI 请求的命名空间范围。 |
|
--profile string 默认值:"none" | |
要记录的性能分析信息。可选值为(none|cpu|heap|goroutine|threadcreate|block|mutex)。 |
|
--profile-output string 默认值:"profile.pprof" | |
性能分析信息要写入的目标文件的名称。 |
|
--request-timeout string 默认值:"0" | |
在放弃某个服务器请求之前等待的时长。非零值应包含相应的时间单位(例如 1s、2m、3h)。 值为零表示请求不会超时。 |
|
-s, --server string | |
Kubernetes API 服务器的地址和端口。 |
|
--storage-driver-buffer-duration duration 默认值:1m0s | |
对存储驱动的写入操作将被缓存的时长;缓存的操作会作为一个事务提交给非内存后端。 |
|
--storage-driver-db string 默认值:"cadvisor" | |
数据库名称。 |
|
--storage-driver-host string 默认值:"localhost:8086" | |
数据库 host:port。 |
|
--storage-driver-password string 默认值:"root" | |
数据库密码。 |
|
--storage-driver-secure | |
使用与数据库的安全连接。 |
|
--storage-driver-table string 默认值:"stats" | |
表名。 |
|
--storage-driver-user string 默认值:"root" | |
数据库用户名。 |
|
--tls-server-name string | |
服务器证书验证所用的服务器名称。如果未提供,则使用与服务器通信所用的主机名。 |
|
--token string | |
向 API 服务器进行身份验证的持有者令牌。 |
|
--user string | |
要使用的 kubeconfig 用户的名称。 |
|
--username string | |
对 API 服务器进行基本身份验证时所用的用户名。 |
|
--version version[=true] | |
--version, --version=raw 打印版本信息并退出;--version=vX.Y.Z... 设置报告的版本。 |
|
--warnings-as-errors | |
将从服务器收到的警告视为错误,并以非零退出码退出。 |
另请参见
- kubectl - kubectl 控制 Kubernetes 集群管理器
Feedback
Was this page helpful?
Glad to hear it! Please tell us how we can improve.
Sorry to hear that. Please tell us how we can improve.