在 Kubernetes 中进行滚动更新时,避免服务中断是确保应用高可用性的关键。以下是一些最佳实践和策略,可以帮助你实现这一目标:
使用 Readiness Probes
Readiness Probes 用于检测 Pod 是否已经准备好接收流量。只有在 Readiness Probe 返回成功之后,Kubernetes 才会将流量路由到新的 Pod。
apiVersion: v1
kind: Pod
metadata:
name: nginx
spec:
containers:
- name: nginx
image: nginx
readinessProbe:
httpGet:
path: /healthz
port: 80
initialDelaySeconds: 5
periodSeconds: 10
使用 PreStop Hook
apiVersion: v1
kind: Pod
metadata:
name: nginx
spec:
containers:
- name: nginx
image: nginx
lifecycle:
preStop:
exec:
command: ["/bin/sh", "-c", "sleep 10"]
具体执行的命令可根据业务环境来指定
配置适当的 maxUnavailable
和 maxSurge
在 Deployment 中配置 strategy
字段来控制滚动更新的行为。例如,设置 maxUnavailable
为 0 确保在更新过程中不会有任何 Pod 不可用。
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-deployment
spec:
replicas: 3
strategy:
type: RollingUpdate
rollingUpdate:
maxUnavailable: 0
maxSurge: 1
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx