Kubernetes pods 在节点池升级期间变为 0/2,即使中断预算设置为 50% 的最小值。为什么?

Kubernetes pods went to 0/2 during a node pool upgrade even though disruption budgets were set to min of 50%. Why?

我正在为一个应用程序升级一些 AKS 集群,并且一直在测试 az aks nodepool upgrade --max-surge 标志以加快该过程。我们的生产环境有 50 多个节点,按照我在低端看到的每个节点的时钟速度,我估计生产需要 9 个多小时才能完成。在一个较低的升级中,我 运行 最大激增 50%,这确实对速度有一点帮助,并且所有部署都保持最小可用 pods 的 50%。

对于这次最新升级,我尝试了 100% 的最大激增。它在正确的版本上启动了 6 个新节点(池中的 6 个当前节点)....但随后它同时迁移了每个 deployment/pod 并将所有内容降低到 0/2 pods。在我开始这个过程之前,我确保为每个单独的部署设置一个 pod 中断预算,最小可用率为 50%。这对我所有的其他升级都有效,除了这个,对我来说这意味着 100% 的激增是原因。

我只是想不通为什么我的最低可用百分比被忽略了。以下是示例 PDB 和相应部署的描述。

Pod 中断预算:

Name:           myapp-admin                                                                                            
Namespace:      front-svc                                                                                               
Min available:  50%                                                                                                     
Selector:       role=admin                                                                                              
Status:                                                                                                                 
    Allowed disruptions:  1                                                                                             
    Current:              2                                                                                             
    Desired:              1                                                                                             
    Total:                2                                                                                             
Events:   

部署(片段):

Name:                   myapp-admin                                                                                   
Namespace:              front-svc                                                                                      
CreationTimestamp:      Wed, 26 May 2021 16:17:00 -0500                                                                
Labels:                 <none>                                                                                         
Annotations:            deployment.kubernetes.io/revision: 104                                                         
Selector:               agency=myorg,app=myapp,env=uat,organization=myorg,role=admin                                      
Replicas:               2 desired | 2 updated | 2 total | 2 available | 0 unavailable                                  
StrategyType:           RollingUpdate                                                                                  
MinReadySeconds:        15                                                                                             
RollingUpdateStrategy:  25% max unavailable, 1 max surge                                                               
Pod Template:                                                                                                          
  Labels:       agency=myorg                                                                                             
                app=myapp                                                                                             
                buildnumber=1234                                                                               
                env=uat                                                                                                
                organization=myorg                                                                                       
                role=admin                                                                                             
  Annotations:  kubectl.kubernetes.io/restartedAt: 2022-03-12T09:00:11Z                                                
  Containers:                                                                                                          
   myapp-admin-ctr: 

这里有什么明显的错误吗?

... a max surge value of 100% provides the fastest possible upgrade process (doubling the node count) but also causes all nodes in the node pool to be drained simultaneously.

来自官方documentation。您可能需要考虑降低最大激增。