Kubernetes 服务 select pods 基于启动时间

Kubernetes service select pods based on start time

我有一个 K8s 服务定义为:

apiVersion: v1
kind: Service
metadata:
  labels:
    name: myapp
  name: myapp
  namespace: myapps

spec:
  ports:
    - name: ui
      port: 8081
      protocol: TCP
      targetPort: 8081
  selector:
    my-app: myapp
    my-deployment-type: jobmanager
  type: ClusterIP

此服务用作入口的后端。

现在在蓝绿部署期间有两个应用程序 运行 即两组 pods 匹配上面指定的选择器: 我的应用程序:myapp 我的部署类型:jobmanager

而且我观察到它会选择两个 pods,即随机选择两个应用程序版本,直到旧应用程序 pods 被杀死。

有没有办法确保服务只会选择新应用程序 pods?即除了选择器之外,还有一个选择器还取决于 pods 的“开始时间”吗?

Is there a way to ensure that the service will just choose the new app pods? i.e Have a selector to also depend on the "Start Time" of the pods apart from the selector?

Kubernetes 中没有这样的功能来过滤服务选择器块中的 pod 启动时间。

official k8s documentation 表示服务对象的标签选择器在 json 或使用映射的 yaml 文件中定义,仅支持 equality-based 需求选择器¨.

因此,在您的情况下,最好的选择是:

  • 为绿色部署(新应用版本)创建一个带有新标签的新 k8s 部署
  • 为绿色部署创建一个新的 ClusterIP 服务
  • 然后通过更改后端服务名称将您的 Ingress 切换到此绿色部署。

如果出现问题,您可以快速切换回您的蓝色部署(以前的应用程序版本)。