首页
技术小册
AIGC
面试刷题
技术文章
MAGENTO
云计算
视频课程
源码下载
PDF书籍
「涨薪秘籍」
登录
注册
Kubernetes IP Masquerade Agent 用户指南
Kubernetes云管理控制器
Kubernetes安全地清空一个节点
Kubernetes保护集群
Kubernetes调试DNS问题
Kubernetes改变默认 StorageClass
Kubernetes更改PersistentVolume的回收策略
Kubernetes关键插件Pod的调度保证
Kubernetes静态加密Secret数据
Kubernetes开发云控制器管理器
Kubernetes控制节点上的CPU管理策略
Kubernetes控制节点上的拓扑管理策略
Kubernetes名字空间演练
Kubernetes配置API对象配额
启用/禁用 Kubernetes API
Kubernetes迁移多副本的控制面
Kubernetes升级集群
Kubernetes声明网络策略
Kubernetes使用CoreDNS进行服务发现
Kubernetes使用KMS驱动进行数据加密
使用Kubernetes API访问集群
Kubernetes使用NUMA感知的内存管理器
Kubernetes通过名字空间共享集群
Kubernetes通过配置文件设置Kubelet参数
为Kubernetes运行etcd集群
Kubernetes为节点发布扩展资源
Kubernetes限制存储使用量
Kubernetes验证已签名容器镜像
以非root用户身份运行Kubernetes节点组件
在Kubernetes集群中使用NodeLocal DNSCache
在Kubernetes集群中使用sysctl
Kubernetes在集群中使用级联删除
在运行中的集群上重新配置节点的 kubelet
Kubernetes自定义DNS服务
Kubernetes自动扩缩集群DNS服务
当前位置:
首页>>
技术小册>>
Kubernetes中文教程(五)
小册名称:Kubernetes中文教程(五)
本页展示了如何在确保 PodDisruptionBudget 的前提下, 安全地清空一个。 ## 此任务假定你已经满足了以下先决条件: * 使用的 Kubernetes 版本 >= 1.5。 * 以下两项,具备其一: 1. 在节点清空期间,不要求应用程序具有高可用性 2. 你已经了解了 [PodDisruptionBudget 的概念], 并为需要它的应用程序[配置了 PodDisruptionBudget]。 ## (可选)配置干扰预算 为了确保你的负载在维护期间仍然可用,你可以配置一个 [PodDisruptionBudget]。 如果可用性对于正在清空的该节点上运行或可能在该节点上运行的任何应用程序很重要, 首先 [配置一个 PodDisruptionBudgets] 并继续遵循本指南。 建议为你的 PodDisruptionBudgets 设置 `AlwaysAllow` [不健康 Pod 驱逐策略], 以在节点清空期间支持驱逐异常的应用程序。 默认行为是等待应用程序的 Pod 变为 [健康]后, 才能进行清空操作。 ## 使用 `kubectl drain` 从服务中删除一个节点 在对节点执行维护(例如内核升级、硬件维护等)之前, 可以使用 `kubectl drain` 从节点安全地逐出所有 Pod。 安全的驱逐过程允许 Pod 的容器[体面地终止], 并确保满足指定的 `PodDisruptionBudgets`。 默认情况下,`kubectl drain` 将忽略节点上不能杀死的特定系统 Pod; 有关更多细节,请参阅 [kubectl drain] 文档。 `kubectl drain` 的成功返回,表明所有的 Pod(除了上一段中描述的被排除的那些), 已经被安全地逐出(考虑到期望的终止宽限期和你定义的 PodDisruptionBudget)。 然后就可以安全地关闭节点, 比如关闭物理机器的电源,如果它运行在云平台上,则删除它的虚拟机。 首先,确定想要清空的节点的名称。可以用以下命令列出集群中的所有节点: ```shell kubectl get nodes ``` 接下来,告诉 Kubernetes 清空节点: ```shell kubectl drain --ignore-daemonsets <节点名称> ``` 如果存在 DaemonSet 管理的 Pod,你将需要为 `kubectl` 设置 `--ignore-daemonsets` 以成功地清空节点。 `kubectl drain` 子命令自身实际上不清空节点上的 DaemonSet Pod 集合: DaemonSet 控制器(作为控制平面的一部分)会立即用新的等效 Pod 替换缺少的 Pod。 DaemonSet 控制器还会创建忽略不可调度污点的 Pod,这种污点允许在你正在清空的节点上启动新的 Pod。 一旦它返回(没有报错), 你就可以下线此节点(或者等价地,如果在云平台上,删除支持该节点的虚拟机)。 如果要在维护操作期间将节点留在集群中,则需要运行: ```shell kubectl uncordon <node name> ``` 然后告诉 Kubernetes,它可以继续在此节点上调度新的 Pod。 ## 并行清空多个节点 `kubectl drain` 命令一次只能发送给一个节点。 但是,你可以在不同的终端或后台为不同的节点并行地运行多个 `kubectl drain` 命令。 同时运行的多个 drain 命令仍然遵循你指定的 `PodDisruptionBudget`。 例如,如果你有一个三副本的 StatefulSet, 并设置了一个 `PodDisruptionBudget`,指定 `minAvailable: 2`。 如果所有的三个 Pod 处于[健康(healthy)]状态, 并且你并行地发出多个 drain 命令,那么 `kubectl drain` 只会从 StatefulSet 中逐出一个 Pod, 因为 Kubernetes 会遵守 PodDisruptionBudget 并确保在任何时候只有一个 Pod 不可用 (最多不可用 Pod 个数的计算方法:`replicas - minAvailable`)。 任何会导致处于[健康(healthy)] 状态的副本数量低于指定预算的清空操作都将被阻止。 ## 驱逐 API 如果你不喜欢使用 [kubectl drain] (比如避免调用外部命令,或者更细化地控制 Pod 驱逐过程), 你也可以用驱逐 API 通过编程的方式达到驱逐的效果。 更多信息,请参阅 [API 发起的驱逐]。 ## * 执行[配置 PDB] 中的各个步骤, 保护你的应用。
上一篇:
Kubernetes云管理控制器
下一篇:
Kubernetes保护集群
该分类下的相关小册推荐:
Kubernets合辑14-日志收集
Kubernets合辑11-持续集成
Kubernetes中文教程(三)
Kubernetes中文教程(四)
Kubernets合辑9-资源约束
云原生-K8S入门实战
Kubernets合辑10-网络
Kubernetes合辑1-安装Kubernetes
Kubernetes中文教程(二)
Kubernetes中文教程(六)
Kubernets合辑13-集群监控
Kubernets合辑12-配置中心