首页 > 其他分享 >第二章 Pod驱逐策略、更新策略、服务回滚

第二章 Pod驱逐策略、更新策略、服务回滚

时间:2022-11-12 10:00:11浏览次数:70  
标签:驱逐 回滚 策略 deploy nginx deployment Pod 节点

Pod驱逐策略

节点压力驱逐是由各kubelet进程主动终止pod,以回收节点上的内存、磁盘空间等资源的过程,kubelet监控当前node节点的CPU、内存、磁盘空间和文件系统的inde等资源,当这些资源中的一个或者多个达到特定的消耗水平,kubelet就会主动地将节点上一个或者多个pod强制驱逐,以防止当前node节点资源无法正常分配而引发的OOM(OutOfMermory)

官网:​​https://kubernetes.io/zh-cn/docs/concepts/scheduling-eviction/node-pressure-eviction/​

1、Kube-controller-manager: 周期性检查所有节点状态,当节点处于 NotReady 状态超过一段时间后,驱逐该节点上所有 pod。停掉kubelet

  • ​pod-eviction-timeout​​:NotReady 状态节点超过该时间后,执行驱逐,默认 5 min

2、Kubelet: 周期性检查本节点资源,当资源不足时,按照优先级驱逐部分 pod

vim /var/lib/kubelet/config.yaml

evictionHard:

 imagefs.available: 15%       镜像存储盘的可用空间

 memory.available: 300Mi    节点可用内存

 nodefs.available: 10%        节点根盘可用存储空间

 nodefs.inodesFree: 5%       节点inodes可用数量

kubelet 驱逐时 Pod 的选择

如果 kubelet 回收节点级资源的尝试没有使驱逐信号低于条件, 则 kubelet 开始驱逐最终用户 Pod。

kubelet 使用以下参数来确定 Pod 驱逐顺序:

  1. Pod 的资源使用是否超过其请求
  2. ​Pod 优先级​
  3. Pod 相对于请求的资源使用情况

因此,kubelet 按以下顺序排列和驱逐 Pod:

  1. 首先考虑资源使用量超过其请求的 ​​BestEffort​​ 或 ​​Burstable​​ Pod。 这些 Pod 会根据它们的优先级以及它们的资源使用级别超过其请求的程度被逐出。
  2. 资源使用量少于请求量的 ​​Guaranteed​​ Pod 和 ​​Burstable​​ Pod 根据其优先级被最后驱逐。

Kubernetes基于是QoS(服务质量等级)驱逐Pod , Qos等级包括目前包括以下三个:

Guaranteed、Burstable、BestEffort

Guaranteed: #limits和request的值相等,等级最高、最后被驱逐

resources:

limits:

cpu: 500m

memory: 256Mi

requests:

cpu: 500m

memory: 256Mi

Burstable: #limit和request不相等,等级折中、中间被驱逐

resources:

limits:

cpu: 500m

memory: 256Mi

requests:

cpu: 256m

memory: 128Mi

BestEffort: #没有限制,即resources为空,等级最低、最先被驱逐

POD更新策略

...
spec:
replicas: 2 #指定Pod副本数
selector: #指定Pod的选择器
matchLabels:
app: myblog
strategy:
rollingUpdate:
maxSurge: 25%
maxUnavailable: 25%
type: RollingUpdate #指定更新方式为滚动更新,默认策略,通过get deploy yaml查看
...更新策略

第二章 Pod驱逐策略、更新策略、服务回滚_取整

策略控制:

  • maxSurge:最大激增数, 指更新过程中, 最多可以比replicas预先设定值多出的pod数量, 可以为固定值或百分比,默认为desired Pods数的25%。计算时向上取整(比如3.4,取4),更新过程中最多会有replicas + maxSurge个pod
  • maxUnavailable: 指更新过程中, 最多有几个pod处于无法服务状态 , 可以为固定值或百分比,默认为desired Pods数的25%。计算时向下取整(比如3.6,取3)

在Deployment rollout时,需要保证Available(Ready) Pods数不低于 desired pods number - maxUnavailable; 保证所有的非异常状态Pods数不多于 desired pods number + maxSurge

以myblog为例,使用默认的策略,更新过程:

  1. maxSurge 25%,2个实例,向上取整,则maxSurge为1,意味着最多可以有2+1=3个Pod,那么此时会新创建1个ReplicaSet,RS-new,把副本数置为1,此时呢,副本控制器就去创建这个新的Pod
  2. 同时,maxUnavailable是25%,副本数2*25%,向下取整,则为0,意味着,滚动更新的过程中,不能有少于2个可用的Pod,因此,旧的Replica(RS-old)会先保持不动,等RS-new管理的Pod状态Ready后,此时已经有3个Ready状态的Pod了,那么由于只要保证有2个可用的Pod即可,因此,RS-old的副本数会有2个变成1个,此时,会删掉一个旧的Pod
  3. 删掉旧的Pod的时候,由于总的Pod数量又变成2个了,因此,距离最大的3个还有1个Pod可以创建,所以,RS-new把管理的副本数由1改成2,此时又会创建1个新的Pod,等RS-new管理了2个Pod都ready后,那么就可以把RS-old的副本数由1置为0了,这样就完成了滚动更新

服务回滚

通过滚动升级的策略可以平滑的升级Deployment,若升级出现问题,需要最快且最好的方式回退到上一次能够提供正常工作的版本。为此K8S提供了回滚机制。

revision:更新应用时,K8S都会记录当前的版本号,即为revision,当升级出现问题时,可通过回滚到某个特定的revision,默认配置下,K8S只会保留最近的几个revision,可以通过Deployment配置文件中的spec.revisionHistoryLimit属性增加revision数量,默认是10。

查看当前:

[root@k8s-deploy ~]# kubectl -n test rollout history deploy nginx-deployment ##CHANGE-CAUSE为空 
deployment.apps/nginx-deployment
REVISION CHANGE-CAUSE
2 <none>
3 <none>

记录回滚

[root@k8s-deploy ~]# kubectl -n test set image deploy nginx-deployment nginx-test=nginx:1.16.1 --record=true
Flag --record has been deprecated, --record will be removed in the future
deployment.apps/nginx-deployment image updated

查看deployment更新历史

[root@k8s-deploy ~]# kubectl -n test rollout history deploy nginx-deployment                                      
deployment.apps/nginx-deployment
REVISION CHANGE-CAUSE
2 <none>
3 kubectl set image deploy nginx-deployment nginx-deployment=nginx:1.16.1 --namespace=test --record=true
4 kubectl set image deploy nginx-deployment nginx-test=nginx:1.16.1 --namespace=test --record=true

回滚到具体的REVISION

[root@k8s-deploy ~]# kubectl -n test rollout undo deploy nginx-deployment --to-revision=3
deployment.apps/nginx-deployment rolled back



标签:驱逐,回滚,策略,deploy,nginx,deployment,Pod,节点
From: https://blog.51cto.com/yht1990/5846541

相关文章

  • hadoop单个数据节点的不同存储路径的存储策略源码分析。
    产生问题于数据集群的数节点存储磁盘大小不同,造成使用一段时间以后容量小的磁盘空间紧张。其实,早期配置了磁盘使用存储策略,就能解决该问题,部分网来上说这个策略无效,再hadoop......
  • Git 分支管理策略汇总
    原文链接:Git分支管理策略最近,团队新入职了一些小伙伴,在开发过程中,他们问我Git分支是如何管理的,以及应该怎么提交代码?我大概说了一些规则,但仔细想来,好像也并没有形成......
  • 防火墙策略配置
    #定义服务Ipservice-setTCP_10104typeobjectService0protocoltcpdestination-port10104Ipservice-setTCP_10105typeobjectService0......
  • Java多线程 ThreadPoolExecutor-RejectedExecutionHandler拒绝执行策略
    目录​​一、说明​​​​二、理解​​​​三、实现​​​​1.AbortPolicy​​​​2.DiscardPolicy​​​​3.DiscardOldestPolicy​​​​4.CallerRunsPolicy​​​​5.自......
  • 台式电脑购买策略
    自己组装说明:自己组装缺点在于大概需要自学装机。可以根据这个视频学习,非常详细。优点在于可以灵活搭配配件,同等价格能够获得较好的配置。装机视频1装机视频2装机视......
  • 计算器之策略
    设计模式是面向对象的具体表现和实践。或许哪天感觉面向对象理解差不多了,嘴里也不用记挂着设计模式这个玩意儿,我只能通过反复学习设计模式以加深理解面向对象。下面复习策......
  • 关于file:///mnt/repodata/repomd.xml: [Errno 14] curl#37 - "Couldn't open file /m
    安装smaba套件的时候看某视频里的centos的安装命令为yum-yinstallsmaba 结果自己在Redhat打的命令就报错,其实我自己Redhat7.4正确的命令是yuminstall-ysmaba(可能R......
  • 23.策略模式
    [实验任务一]:旅行方式的选择旅游的出行方式有乘坐飞机旅行、乘火车旅行和自行车游,不同的旅游方式有不同的实现过程,客户可以根据自己的需要选择一种合适的旅行方式。代码......
  • Pod Security Admission
    Kubernetes Pod安全性标准(SecurityStandards) 为Pod定义不同的隔离级别。这些标准能够让你以一种清晰、一致的方式定义如何限制Pod行为。作为一项Beta功能特性,Ku......
  • Pod安全
    一Pod安全1.1PodSecurityPolicy启用为了更精细地控制Pod对资源的使用方式,Kubernetes从1.4版本开始引入了PodSecurityPolicy资源对象对Pod的安全策略进行管理,并在1.......