您可以通过几种方式发布新的应用程序版本,有必要选择适合您需求的版本。 我会推荐以下之一:
的 斜坡 - 慢速展开 强>
斜坡部署更新了容器中的容器 滚动更新 时尚,使用新版本的应用程序创建辅助ReplicaSet,然后减少旧版本的副本数量,并增加新版本,直到达到正确的副本数量。
spec: replicas: 3 strategy: type: RollingUpdate rollingUpdate: maxSurge: 2 # how many pods we can add at a time maxUnavailable: 0 # maxUnavailable define how many pods can be unavailable # during the rolling update
可以找到完整的示例和步骤 这里 。
的 蓝/绿 - 最好避免API版本问题 强>
蓝色/绿色部署与渐变部署不同,因为应用程序的“绿色”版本与“蓝色”版本一起部署。在测试新版本满足要求后,我们更新扮演负载均衡器角色的Kubernetes服务对象,通过替换选择器字段中的版本标签将流量发送到新版本。
apiVersion: v1 kind: Service metadata: name: my-app labels: app: my-app spec: type: NodePort ports: - name: http port: 8080 targetPort: 8080 # Note here that we match both the app and the version. # When switching traffic, we update the label “version” with # the appropriate value, ie: v2.0.0 selector: app: my-app version: v1.0.0
的 金丝雀 - 用于测试 强>
金丝雀部署包括将用户子集路由到新功能。在Kubernetes中,可以使用两个具有常见pod标签的Deploy来完成canary部署。新版本的一个副本与旧版本一起发布。然后在一段时间后如果没有检测到错误,请扩展新版本的副本数量并删除旧部署。 使用此ReplicaSet技术需要根据需要启动尽可能多的pod以获得正确的流量百分比。也就是说,如果你想将1%的流量发送到版本B,你需要有一个运行版本B的pod和99个运行版本A的pod。如果你正在寻找更好的托管,那么管理起来非常不方便流量分配,看看负载均衡器等 HAProxy的 或服务网格像 Linkerd ,提供更好的流量控制。
金丝雀部署包括将用户子集路由到新功能。在Kubernetes中,可以使用两个具有常见pod标签的Deploy来完成canary部署。新版本的一个副本与旧版本一起发布。然后在一段时间后如果没有检测到错误,请扩展新版本的副本数量并删除旧部署。
使用此ReplicaSet技术需要根据需要启动尽可能多的pod以获得正确的流量百分比。也就是说,如果你想将1%的流量发送到版本B,你需要有一个运行版本B的pod和99个运行版本A的pod。如果你正在寻找更好的托管,那么管理起来非常不方便流量分配,看看负载均衡器等 HAProxy的 或服务网格像 Linkerd ,提供更好的流量控制。
版本A的清单:
spec: replicas: 3
版本B的清单:
spec: replicas: 1
你也可以玩 交互式教程 - 更新您的应用程序 在Kubernetes。
我建议阅读 使用Helm在Kubernetes上部署,扩展和升级应用程序 。