首页 > 其他分享 >【Azure K8S】AKS升级 Kubernetes version 失败问题的分析与解决

【Azure K8S】AKS升级 Kubernetes version 失败问题的分析与解决

时间:2023-06-06 19:45:50浏览次数:51  
标签:Kubernetes AKS PDB 升级 -- version aks pdb

问题描述

创建Azure Kubernetes Service服务后,需要升级AKS集群的 kubernetes version。在AKS页面的 Cluster configuration 页面中,选择新的版本 1.25.5,确认升级。等待50分钟左右,却等到了升级失败的消息:

Failed to save Kubernetes service 'xxxx-aks3'. Error: Drain of aks-agentpool-xxxxxxxx-vmss00000j did not complete: Too many req pod aks-helloworld-one-9df87f7df-zxnbq on node aks-agentpool-xxxxxxxx-vmss00000j: ingress-basic/aks-helloworld-one-9df87f7df-zxnbq blocked by pdb pdbforhelloworldone with unready pods []. See  http://aka.ms/aks/debugdrainfailures

 

问题解答

查看错误消息,其中提到 “... blocked by pdb pdbforhelloworldone with unready pods ... ” ,所以需要检查AKS集群中PDB(Pod Disruption Budget:Pod中断预算 --  https://kubernetes.io/docs/tasks/run-application/configure-pdb/#create-the-pdb-object). 

 

第一步:查看AKS集群中的事件,检查错误内容

使用指令:kubectl get event , 得到错误信息 :Eviction blocked by too many Requests ( usually a pdb)

 

第二步:查看AKS集群中PDB的配置信息

使用指令  kubectl get pdb -A , 查看到其中一个配置为 MIN AVAILABLE : 100%, ALLOWED DISRUPTIONS: 0

MIN AVAILABLE 为 100%, 说明POD都需要处于活跃状态,不能中断。

ALLOWED DISRUPTIONS为0,也表明POD可以中断的数量为0,即全部的POD都不能中断。

所以,升级失败的根源就是PDB策略的阻挡,升级的时候POD需要中断替换,而PDB策略不允许有POD中断,所以无法完成升级。

 

解决方案:

方案一:修改PDB设置,根据情况改变MIN AVAILABLE和ALLOWED DISRUPITIONS的值。

方案二:(当不能修改PDB设置时),可以先把PDB保存到本地,然后删除它,在执行升级,当升级完成后,恢复PDB设置即可。

第一种方式很简单,修改POD YAML中的配置即可。而本文中主要使用的是第二种方式:

 

1)保存PDB配置到本地(如pdb.yaml)

使用命令:kubectl get pdb <the block pdb name> -o yaml --namespace <the pdb namespace> 

然后把输出的内容复制到文件 pdb.yaml 中

 

2)删除阻挡升级操作的PDB设置

使用命令删除pdb:kubectl delete pdb <your pdb name> --namespace <right namespace>

 

 

3)执行升级操作

因为在门户上,先前的升级操作报错,锁定了页面上的升级操作(即无法继续在页面中执行升级), 并且ASK 控制层面(Control panel)的版本升级已经完成,只是Node的升级是失败的。所以可以通过az aks nodepool upgrade 指令,执行对NodePool的升级。

az aks nodepool upgrade -g <group name> --cluster-name <name> --name <node name> --kubernetes-version 1.25.5 --no-wait

 

升级过程中,节点由2个 变为 3个,然后节点的kubernetes Version也在改变中

 

升级完成后, 节点数恢复为2,kubernetes Version都变为新的 1.25.5 

完成此步后,整个AKS集群的升级表示完成,下一步就是根据第一步保存的pdb.yaml,重新创建PDB

4)恢复原有的PDB设置

使用指令

kubectl apply -f pdb.yaml --namespace <the pdb namespace>

kubectl get pdb -A

 

 


参考资料

Specifying a Disruption Budget for your Application :  https://kubernetes.io/docs/tasks/run-application/configure-pdb/#create-the-pdb-object

排查“PodDrainFailure”错误代码 :  https://learn.microsoft.com/zh-cn/troubleshoot/azure/azure-kubernetes/error-code-poddrainfailure

 

标签:Kubernetes,AKS,PDB,升级,--,version,aks,pdb
From: https://www.cnblogs.com/lulight/p/17461532.html

相关文章

  • MySQL server version for the right syntax to use near 'OPTION SQL_SELECT_LIMIT=D
    hive删除表时报错如下:hive>droptableaaa;FAILED:ExecutionError,returncode1fromorg.apache.hadoop.hive.ql.exec.DDLTask.MetaException(message:javax.jdo.JDODataStoreException:YouhaveanerrorinyourSQLsyntax;checkthemanualthatcorrespondstoyou......
  • Kubernetes(k8s)服务service:service的发现和service的发布
    目录一.系统环境二.前言三.Kubernetesservice简介四.使用hostPort向外界暴露应用程序4.1创建deploy4.2使用hostPort向外界暴露pod的端口五.使用service服务向外界暴露应用程序5.1使用service服务向外界暴露pod5.1.1创建service服务5.1.2测试svc的负载均衡六.service服务的发......
  • 理解kubernetes网络模型
    本文将探讨Kubernetes中的网络模型,以及对各种网络模型进行分析。UnderlayNetworkModel什么是UnderlayNetwork底层网络UnderlayNetwork顾名思义是指网络设备基础设施,如交换机,路由器,DWDM使用网络介质将其链接成的物理网络拓扑,负责网络之间的数据包传输。underlaynetwork......
  • Json解析字符串报错syntax error, expect {, actual string, pos 0, fastjson-version
    ExpectedBEGIN_OBJECTbutwasSTRINGatline1column2path$syntaxerror,expect{,actualstring,pos0,fastjson-version1.2.62syntaxerror,expect{,actualstring,pos0,fastjson-version1.2.62以上的报错都是Json字符串格式错误,比如缺少{},比如两头多了......
  • Kubernetes 的不同大版本之间有许多重大的区别
    Kubernetes的不同大版本之间有许多重大的区别。以下是一些主要的区别:v1.0-v1.6:这是Kubernetes最初的几个版本,这些版本相对较简单,并且缺乏一些现在已经成为核心特性的功能,例如StatefulSet和DaemonSet。v1.7-v1.12:这些版本引入了一些重要的新功能,例如StatefulSet、......
  • Kubernetes架构:构建容器化应用的可扩展管理平台
    摘要:Kubernetes是一款用于容器编排和管理的开源工具,其架构设计具有高度可扩展性和弹性。本文将介绍Kubernetes的架构,包括Master节点和Worker节点的角色和功能,以及它们之间的交互方式,帮助读者更好地理解Kubernetes的工作原理。引言:在当今的云原生应用开发环境中,容器化技术的普及......
  • CentOS7 规划搭建 kubernetes 集群
    前言容器始于OS,OS就是它的土壤。操作系统(OperatingSystem,简称OS)是管理计算机硬件与软件资源的计算机程序,并且为软件运行提供通用服务的系统软件。容器这个技术,不是一个新技术,它其实早就有了,虽然最近这几年才火爆,但是容器完全是一个新瓶装旧酒的玩意,感兴趣的小伙伴们可以更深入去......
  • Kubernetes API
    KubernetesAPI(应用程序编程接口)是一组规则和协议,允许应用程序与Kubernetes集群进行交互和通信。它为开发人员提供了一种管理和控制Kubernetes环境中各种资源和组件的方式。KubernetesAPI遵循RESTful设计模式,意味着它使用诸如GET、POST、PUT和DELETE等HTTP方法来对资源执行操作......
  • 【cpluplus教程翻译】类型转换(Type conversions)
    隐式类型转换(implicitconversion)如果一个值被拷贝到另一个兼容类型中,隐式类型转换会自动执行(注意对象指针引用的区别)。比如shorta=2000;intb;b=a;a的值从short被提升到int,这个过程不需要显式的转换,这被称为标准转换(standardconversion),标准转换针对的是基础数据类型,数......
  • Slik-Subversion使用命令行或者Ant获得本地svn的版本号码
    使用命令行Subversion访问项目源文件[url]https://www.open.collab.net/nonav/scdocs/ddUsingSVN_command-line.html.zh-cn[/url]Slik-Subversion安装包地址[url]https://sliksvn.com/pub/[/url]1.安装Slik-Subversion-1.7.19-x64.msi[url]https://sli......