我在kubernetes中进行了以下部署:
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
labels:
run: hello-node
name: hello-node
namespace: default
spec:
replicas: 2
selector:
matchLabels:
run: hello-node
strategy:
rollingUpdate:
maxSurge: 2
maxUnavailable: 0
type: RollingUpdate
template:
metadata:
creationTimestamp: null
labels:
run: hello-node
spec:
containers:
- image: <image>:<tag>
imagePullPolicy: Always
name: hello-node
livenessProbe:
httpGet:
path: /rest/hello
port: 8081
initialDelaySeconds: 15
timeoutSeconds: 1
ports:
- containerPort: 8081
protocol: TCP
resources:
requests:
cpu: 400m
terminationMessagePath: /dev/termination-log
dnsPolicy: ClusterFirst
restartPolicy: Always
securityContext: {}
terminationGracePeriodSeconds: 30
问题在于,当我更新我的部署以便说出我的图像的新版本时,Kubernetes
将立即使用旧图像杀死两个pod,并带来两个带有新图像的新pod。当新的pod正在启动时,我会遇到服务中断。
由于rollingUpdate
和livenessProbe
我期待Kubernetes
执行以下操作:
livenessProbe
我在这里遗失了什么?
答案 0 :(得分:4)
您需要的是readinessProbe
。
初始延迟之前的默认状态Liveness
为Success
,而初始延迟之前的默认状态Readiness
为Failure
。
如果您希望在探测失败时杀死并重新启动容器,请指定LivenessProbe
和RestartPolicy
Always
或OnFailure
。
如果您只想在探测成功时开始向广告连播发送流量,请指定ReadinessProbe
。
有关详细信息,请参阅container probes。
要获得您描述的滚动更新行为,请将maxSurge
设置为1
(默认值)。这告诉部署一次最多可以扩展一个副本&#34;。有关详细信息,请参阅docs of maxSurge
。