码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 【Azure K8S】AKS升级 Kubernetes version 失败问题的分析与解决


    问题描述

    创建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 -o yaml --namespace  

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

     

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

    使用命令删除pdb:kubectl delete pdb --namespace

     

     

    3)执行升级操作

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

    az aks nodepool upgrade -g  --cluster-name  --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 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

     

  • 相关阅读:
    八臂聚乙二醇硅烷 8ARM-PEG-Silane 8ARM-PEG-Si 八臂PEG硅 的描述
    【node和node-sass版本不一致导致报错】解决sass-loader和node-sass版本冲突问题,本人尝试过,真的解决错误了
    面试官让说出8种创建线程的方式,我只说了4种,然后挂了。。。
    深度学习环境配置(Anaconda+pytorch+pycharm+cuda)
    【JAVA程序设计】基于SSM+VUE前后端分离的物流管理系统
    虚拟机的四种网络模式对比
    2023 年江西省职业院校技能大赛软件测试(高职组)赛项样题
    学习scrapy,发现列表返回为空
    LeetCode刷题---最长回文子串
    Kafka 消息中间件
  • 原文地址:https://www.cnblogs.com/lulight/p/17461532.html
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号