对于K8S中的发布方式,提供了两种传统上的方案
分别是金丝雀发布和蓝绿发布
金丝雀发布即是不断调整新老的项目的流量,最后直到老的代替新的
而蓝绿发布是存在两个环境,首先把需要测试的功能部署在蓝或者绿环境上,然后测试完成进行蓝和绿的环境部署切换
我们首先说下金丝雀部署的基本使用方式
基本上就是存在一个Service
让Service监听某个label的Pod,比如Service监听Label为my-project的
然后创建两个Deployment,去管理拥有这个Label的Pod
不过不同的Deployment可能拥有其他的Label,从而区分不同的Version
我们就演示下如何在K8S上使用金丝雀部署
1. 准备了一个Service
apiVersion: v1
kind: Service metadata: name: canary-test namespace: default spec: selector: app: my-project type: NodePort ### 浏览器可以直接访问 ports: – name: canary-test port: 80 ### targetPort: 80 ### Pod的访问端口 protocol: TCP nodePort: 31666 ### 机器上开的端口,浏览器访问 |
然后准备两个Deployment
apiVersion: apps/v1
kind: Deployment metadata: name: canary-dep namespace: default labels: app: project-depolyment spec: selector: matchLabels: app: my-project version: v1.0 replicas: 2 template: metadata: labels: app: my-project v: v1.0 spec: containers: – name: container01 image: my-container:v1.0 |
apiVersion: apps/v1
kind: Deployment metadata: name: canary-dep namespace: default labels: app: project-depolyment spec: selector: matchLabels: app: my-project version: v2.0 replicas: 1 template: metadata: labels: app: my-project v: v2.0 spec: containers: – name: container01 image: my-container:v1.0 |
然后我们可以进行相关的测试
不断的修改两个Deployment的Replicas
以至于在新的上线完成后,将之前的测试删除