对于这个示例,我在具有 2 个副本的部署中运行“echoheaders”Nginx。当我删除 1 个 pod 时,有时会出现大约 40 秒的缓慢响应和错误。
我们在 Kubernetes 中运行我们的 API 网关,并且需要能够允许 Kubernetes 调度程序按照它认为合适的方式处理 Pod。
我们最近想引入会话亲和性,为此,我们想迁移到新的闪亮的 NEG:网络端点组: https ://cloud.google.com/load-balancing/docs/negs/
使用 NEG 时,我们会在故障转移期间遇到问题。没有NEG,我们很好。
部署.yaml
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: echoheaders
labels:
app: echoheaders
spec:
replicas: 2
selector:
matchLabels:
app: echoheaders
template:
metadata:
labels:
app: echoheaders
spec:
containers:
- image: brndnmtthws/nginx-echo-headers
imagePullPolicy: Always
name: echoheaders
readinessProbe:
httpGet:
path: /
port: 8080
lifecycle:
preStop:
exec:
# Hack: wait for kube-proxy to remove endpoint before exiting, and
# gracefully shut down
command: ["bash", "-c", "sleep 10; nginx -s quit; sleep 40"]
restartPolicy: Always
terminationGracePeriodSeconds: 60
服务.yaml
api版本:v1 种类:服务 元数据: 名称:回声头 标签: 应用程序:回声头 注释: cloud.google.com/neg: '{"ingress": true}' 规格: 端口: - 端口:80 协议:TCP 目标端口:8080 选择器: 应用程序:回声头
入口.yaml
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
annotations:
kubernetes.io/ingress.global-static-ip-name: echoheaders-staging
name: echoheaders-staging
spec:
backend:
serviceName: echoheaders
servicePort: 80
删除 pod 时出现错误,如下图所示
$ httping -G -K 35.190.69.21
(https://i.imgur.com/u14MvHN.png)
这是使用 NEG 时的新行为。禁用 NEG 会使旧的行为具有正常的故障转移。
有什么方法可以在 pod 删除期间使用 Google LB、ingress、NEG 和 Kubernetes 而不会出错?