-
创建初始 Deployment 和 Service:
- 首先,创建一个基本的 Deployment,它包含旧版本的应用容器。同时创建一个对应的 Service,将流量路由到这个 Deployment。
- 例如:
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-app
spec:
replicas: 3
selector:
matchLabels:
app: my-app
template:
metadata:
labels:
app: my-app
spec:
containers:
- name: my-app-container
image: old-version-image
---
apiVersion: v1
kind: Service
metadata:
name: my-app-service
spec:
selector:
app: my-app
ports:
- protocol: TCP
port: 80
targetPort: 8080
-
创建新的 Deployment 进行金丝雀发布:
- 创建一个新的 Deployment,其中包含新版本的应用容器。可以设置较少的副本数,比如 1 个副本,作为金丝雀版本。
- 例如:
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-app-canary
spec:
replicas: 1
selector:
matchLabels:
app: my-app-canary
template:
metadata:
labels:
app: my-app-canary
spec:
containers:
- name: my-app-container
image: new-version-image
-
修改 Service 以包含金丝雀 Deployment:
- 修改 Service 的 selector,使其同时选择旧版本和金丝雀版本的 Pod。这样,一部分流量会被路由到金丝雀版本的 Pod。
- 例如:
apiVersion: v1
kind: Service
metadata:
name: my-app-service
spec:
selector:
app: my-app
ports:
- protocol: TCP
port: 80
targetPort: 8080
修改为:
apiVersion: v1
kind: Service
metadata:
name: my-app-service
spec:
selector:
app: my-app | app: my-app-canary
ports:
- protocol: TCP
port: 80
targetPort: 8080
-
监控和评估:
- 通过监控工具观察金丝雀版本的性能、错误率等指标。如果金丝雀版本表现良好,可以逐渐增加金丝雀版本的副本数,同时减少旧版本的副本数,直到完全切换到新版本。
...