Kubernetes ClusterIP 服务初始延迟或活跃度

标签 kubernetes google-cloud-platform

我在 GCP 上有一个 Kubernetes 部署和一个 ClusterIP 服务来发现这个部署中的 pod。部署包含多个副本集 pod,它们根据我们的水平 pod 标量配置(基于 CPU 利用率)来来去去。

现在,当创建新的副本集 pod 时,应用程序需要一些时间才能开始服务。但是 ClusterIP 在应用程序准备好之前已经开始将请求分发到新的副本集 pod,这导致请求没有被服务。

ClusterIP 服务 yaml:

apiVersion: v1
kind: Service
metadata:
  labels:
    app: service-name
    tier: backend
    environment: "dev"
    creator: internal
  name: service-name
spec:
  clusterIP: None
  ports:
  - name: https
    protocol: TCP
    port: 7070
    targetPort: 7070
  selector:
    app: dep-name
    tier: "backend"
    environment: "dev"
    creator: "ME"
  type: ClusterIP

应用程序启动后,如何通知 ClusterIP 开始向新 pod 分发请求?可以为此目的设置任何初始延迟或 active 探测吗?

最佳答案

Kubernetes 为它提供了就绪探测。使用就绪探测,Kubernetes 不会在探测成功之前将流量发送到 Pod。更新部署时,它还将使旧副本保持运行,直到对新副本的探测成功。这意味着如果您的新 pod 以某种方式损坏,它们将永远看不到流量,您的旧 pod 将继续为部署提供所有流量。

您需要使用以下就绪探测更新部署文件:

readinessProbe:
  exec:
    command:
    - cat
    - /tmp/healthy
  initialDelaySeconds: 5
  periodSeconds: 5

如果您的应用程序有 http 探测,那么您也可以在 HTTP 模式下设置就绪探测。

有关如何使用就绪探针的更多信息,请参阅:

https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-probes/#define-readiness-probes

关于Kubernetes ClusterIP 服务初始延迟或活跃度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57456027/

相关文章:

google-api - Google Translate API 是否支持占位符?

kubernetes - 使用RBAC授予对Kubernetes中单个Pod的访问权限

docker - Docker Swarm上的Hadoop集群-数据节点无法连接到Namenode

kubernetes - Helm的历史规模是否受到限制?

containers - kubectl 连接 : Unable to use a TTY - container es-node did not allocate one

google-cloud-platform - 尝试使用 Cloud Shell 连接到 Cloud SQL 实例时出错

google-cloud-platform - GCP Notebook AI——具有写入权限的 SSH?

kubernetes - 为什么我的Dask客户端显示零工作人员,核心和内存?

kubernetes - 如何监控 `preStop` 命令的执行?

kubernetes - 除非给出完整的 FQDN,否则指向其他命名空间中服务的 ExternalName 不会解析