Kubernetes pod平滑迁移
pod平滑迁移
使用到的命令 (cordon, drain, uncordon)
这三个命令是正式release的1.2新加入的命令,三个命令一起介绍,是因为三个命令配合使用可以实现节点的维护。在1.2之前,因为没有相应的命令支持,如果要维护一个节点,只能stop该节点上的kubelet将该节点退出集群,是集群不在将新的pod调度到该节点上。如果该节点上本生就没有pod在运行,则不会对业务有任何影响。如果该节点上有pod正在运行,kubelet停止后,master会发现该节点不可达,而将该节点标记为notReady状态,不会将新的节点调度到该节点上。同时,会在其他节点上创建新的pod替换该节点上的pod。这种方式虽然能够保证集群的健壮性,但是任然有些暴力,如果业务只有一个副本,而且该副本正好运行在被维护节点上的话,可能仍然会造成业务的短暂中断。
1.2中新加入的这3个命令可以保证维护节点时,平滑的将被维护节点上的业务迁移到其他节点上,保证业务不受影响。如下图所示是一个整个的节点维护的流程(为了方便demo增加了一些查看节点信息的操作):
1)首先查看当前集群所有节点状态,可以看到共六个节点都处于ready状态;

2)查看当前有的pod运行在izj6c6evv00x6w8sbpyokpz 节点上;

3)使用cordon命令将izj6c6evv00x6w8sbpyokpz 标记为不可调度;
[root@cn-hongkong ~]# kubectl cordon izj6c6evv00x6w8sbpyokpz

4)再使用kubectl get nodes查看节点状态,发现izj6c6evv00x6w8sbpyokpz 虽然还处于Ready状态,但是同时还被禁能了调度,这意味着新的pod将不会被调度到izj6c6evv00x6w8sbpyokpz 上。

5)再查看pod状态,没有任何变化,有的副本仍运行在izj6c6evv00x6w8sbpyokpz上;

6)执行drain命令,将运行在izj6c6evv00x6w8sbpyokpz上运行的pod平滑的赶到其他节点上;
kubectl drain izj6c6evv00x6w8sbpyokpz --delete-local-data --ignore-daemonsets --force

7)再查看nginx的状态发现,izj6c6evv00x6w8sbpyokpz 上的副本已经被迁移到k-node1上;这时候就可以对izj6c6evv00x6w8sbpyokpz进行一些节点维护的操作,如升级内核,升级Docker等;

8)节点维护完后,使用uncordon命令解锁izj6c6evv00x6w8sbpyokpz,使其重新变得可调度;
kubectl uncordon izj6c6evv00x6w8sbpyokpz
9)检查节点状态,发现izj6c6evv00x6w8sbpyokpz重新变回Ready状态
Kubernetes pod平滑迁移的更多相关文章
- RDS经典网络平滑迁移到VPC的混访方案
专有网络VPC(Virtual Private Cloud)之间在逻辑上彻底隔离,可以使您在阿里云上构建出一个隔离的网络环境,其安全性及性能都高于经典网络,已成为云上用户首选的网络类型.为满足日益增多 ...
- Kubernetes Pod 驱逐详解
原文链接:Kubernetes Pod 驱逐详解 在 Kubernetes 中,Pod 使用的资源最重要的是 CPU.内存和磁盘 IO,这些资源可以被分为可压缩资源(CPU)和不可压缩资源(内存,磁盘 ...
- Kubernetes Pod 镜像拉取策略
Kubernetes Pod 镜像拉取策略 官方文档:https://kubernetes.io/docs/concepts/containers/images/ • IfNotPresent:默认值 ...
- Kubernetes Pod 资源限制
Kubernetes Pod 资源限制 官方文档:https://kubernetes.io/docs/concepts/configuration/manage-compute-resources- ...
- Kubernetes Pod 调度约束
Kubernetes Pod 调度约束 可以将pod调度到指定的节点Node内 默认:根据节点资源利用率等分配Node节点. nodeName用于将Pod调度到指定的Node名称上 nodeSelec ...
- Kubernetes Pod故障归类与排查方法
Pod概念 Pod是kubernetes集群中最小的部署和管理的基本单元,协同寻址,协同调度. Pod是一个或多个容器的集合,是一个或一组服务(进程)的抽象集合. Pod中可以共享网络和存储(可以简单 ...
- Python Django撸个WebSSH操作Kubernetes Pod(下)- 终端窗口自适应Resize
追求完美不服输的我,一直在与各种问题斗争的路上痛并快乐着 上一篇文章Django实现WebSSH操作Kubernetes Pod最后留了个问题没有解决,那就是terminal内容窗口的大小没有办法调整 ...
- Kubernetes Pod 全面知识
Pod 是在 Kubernetes 中创建和管理的.最小的可部署的计算单元,是最重要的对象之一.一个 Pod 中包含一个或多个容器,这些容器在 Pod 中能够共享网络.存储等环境. 学习 Kubern ...
- 从RabbitMQ平滑迁移到RocketMQ技术实战
作者:vivo 互联网中间件团队- Liu Runyun 大量业务使用消息中间件进行系统间的解耦.异步化.削峰填谷设计实现.公司内部前期基于RabbitMQ实现了一套高可用的消息中间件平台.随着业务的 ...
随机推荐
- 012-MySQL 索引添加以及优化说明
一.索引概述 数据库的索引可以加快查询速度,原因是索引使用特定的数据结构(B-Tree)对特定的列额外组织存放,加快存储引擎(索引是存储引擎实现)查找记录的速度. 如果查询语句使用索引(通常是wher ...
- GPL & LGPL
Reference https://www.cnblogs.com/findumars/p/3556883.html GPL 我 们很熟悉的Linux就是采用了GPL.GPL协议和BSD, Apach ...
- SpringMVC基本
SpringMVC和Struts2的区别 SpringMVC与Struts2区别 对比项目 SrpingMVC Struts2 优势 国内市场情况 有大量用户,一般新项目启动都会选用springmvc ...
- Idea导入maven项目没有识别
选中module的pom.xml,右键,选择" add as maven project",idea会识别该pom的项目
- Linux 提示更新密码
You are required to change your password immediately (password aged)Last login: Thu Aug 22 17:04:01 ...
- django web问题
django生命周期 1. 当用户在浏览器中输入url时,浏览器会生成请求头和请求体发给服务端 请求头和请求体中会包含浏览器的动作(action),这个动作通常为get或者post,体现在url之中. ...
- android问题总结:
1. android:focusableInTouchMode="true" 属性: 控制 子view不获取焦点: <android.support.v4.widget. ...
- Spring Cloud 微服务技术整合
微服务架构风格是一种使用一套小服务来开发单个应用的方式途径,每个服务运行在自己的进程中,并使用轻量级机制通信,通常是HTTP API,这些服务基于业务能力构建,并能够通过自动化部署机制来独立部署,这些 ...
- Python Number(数字)
Python Number 数据类型用于存储数值. 数据类型是不允许改变的,这就意味着如果改变 Number 数据类型的值,将重新分配内存空间. 以下实例在变量赋值时 Number 对象将被创建: A ...
- c++中共享内存原理及实现
共享内存 (也叫内存映射文件) 主要是通过映射机制实现的 , Windows 下进程的地址空间在逻辑上是相互隔离的 , 但在物理上却是重叠的 ; 所谓的重叠是指同一块内存区域可能被多个进程同时使用 , ...