gpt4 book ai didi

kubernetes - Kubernetes-滚动更新可以杀死旧的pod而不产生新的pod

转载 作者:行者123 更新时间:2023-12-04 10:14:32 27 4
gpt4 key购买 nike

我目前正在使用Deployments管理我的K8S集群中的Pod。

我的某些部署需要2个Pod /副本,一些部署需要3个Pod /副本,而有些部署只需要1个Pod /副本。我遇到的问题是只有一个 pods /副本的那个。

我的YAML文件是:

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: user-management-backend-deployment
spec:
replicas: 1
strategy:
type: RollingUpdate
rollingUpdate:
maxUnavailable: 1
maxSurge: 2
selector:
matchLabels:
name: user-management-backend
template:
metadata:
labels:
name: user-management-backend
spec:
containers:
- name: user-management-backend
image: proj_csdp/user-management_backend:3.1.8
imagePullPolicy: IfNotPresent
ports:
- containerPort: 8080
livenessProbe:
httpGet:
port: 8080
path: /user_management/health
initialDelaySeconds: 300
timeoutSeconds: 30
readinessProbe:
httpGet:
port: 8080
path: /user_management/health
initialDelaySeconds: 10
timeoutSeconds: 5
volumeMounts:
- name: nfs
mountPath: "/vault"
volumes:
- name: nfs
nfs:
server: kube-nfs
path: "/kubenfs/vault"
readOnly: true

我有一个运行良好的旧版本。
# kubectl get po | grep  user-management-backend-deployment
user-management-backend-deployment-3264073543-mrrvl 1/1 Running 0 4d

现在我要更新图像:
# kubectl set image deployment  user-management-backend-deployment  user-management-backend=proj_csdp/user-management_backend:3.2.0

现在,根据RollingUpdate设计,K8S应该在保持旧的Pod正常工作的同时启动新Pod,只有在新的Pod准备好进行通信时,才应删除旧Pod。但是我看到的是,旧的Pod立即被删除,而新的Pod被创建,然后花一些时间开始进行流量处理,这意味着我必须减少流量。
# kubectl get po | grep  user-management-backend-deployment
user-management-backend-deployment-3264073543-l93m9 0/1 ContainerCreating 0 1s

# kubectl get po | grep user-management-backend-deployment
user-management-backend-deployment-3264073543-l93m9 1/1 Running 0 33s

我使用了 maxSurge: 2maxUnavailable: 1,但这似乎不起作用。

任何想法为什么这不起作用?

最佳答案

它似乎是maxUnavailable: 1;通过设置该值,我可以轻松重现您的体验,并通过将其设置为maxUnavailable: 0来轻松实现正确的体验

这是我的“伪证明”,表明调度程序如何实现您遇到的行为:

因为是replicas: 1,所以k8s的期望状态恰好是Ready中的一个Pod。在滚动更新操作(这是您要求的策略)期间,它将创建一个新的Pod,使总数达到2。但是您授予k8s许可,使一个Pod保持不可用状态,并指示它保持所需的数量。 Pod为1。因此,它满足了所有这些约束:1 Pod,RU策略允许的所需计数,处于不可用状态。

通过将maxUnavailable设置为零,您可以正确地将k8定向为从不让任何Pod不可用,即使这意味着在短时间内将pod超过replica的数量激增

关于kubernetes - Kubernetes-滚动更新可以杀死旧的pod而不产生新的pod,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46369100/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com