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 切换到此绿色部署。
如果出现问题,您可以快速切换回您的蓝色部署(以前的应用程序版本)。
我有一个 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 切换到此绿色部署。
如果出现问题,您可以快速切换回您的蓝色部署(以前的应用程序版本)。