79 lines
1.7 KiB
Markdown
79 lines
1.7 KiB
Markdown
> 本文作者:丁辉
|
||
|
||
# 通过副本控制实现金丝雀发布
|
||
|
||
[官方文档](https://kubernetes.io/zh-cn/docs/concepts/workloads/controllers/deployment/#canary-deployment)
|
||
|
||
## 通过副本数控制
|
||
|
||
**操作步骤:**
|
||
|
||
1. 先部署稳定版本(v1,9个副本)
|
||
2. 部署金丝雀版本(v2,1个副本)
|
||
3. Service会自动将约9%的流量(1/10)导向v2
|
||
4. 观察监控,如果v2正常,逐步增加v2副本数,减少v1副本数
|
||
|
||
## 开始部署
|
||
|
||
部署测试示例 Nginx Deployment v1和v2
|
||
|
||
1. 部署 Pod-Nginx-v1
|
||
|
||
```bash
|
||
kubectl apply -f https://gitee.com/offends/Kubernetes/raw/main/File/Yaml/nginx-deployment-v1.yaml
|
||
```
|
||
|
||
2. 部署 Pod-Nginx-v2
|
||
|
||
```bash
|
||
kubectl apply -f https://gitee.com/offends/Kubernetes/raw/main/File/Yaml/nginx-deployment-v2.yaml
|
||
```
|
||
|
||
3. 修改副本数数量
|
||
|
||
- v1 配置为 9
|
||
|
||
```bash
|
||
kubectl scale deployment/nginx-deployment-1 --replicas=9
|
||
```
|
||
|
||
- v2 配置为 1
|
||
|
||
```bash
|
||
kubectl scale deployment/nginx-deployment-2 --replicas=1
|
||
```
|
||
|
||
4. 部署 Service(同时选择v1和v2的Pod)
|
||
|
||
```yaml
|
||
cat <<EOF | kubectl apply -f -
|
||
apiVersion: v1
|
||
kind: Service
|
||
metadata:
|
||
name: nginx-deployment-service
|
||
spec:
|
||
selector:
|
||
app: nginx # 同时选择两个版本的Pod
|
||
ports:
|
||
- port: 80
|
||
targetPort: 80
|
||
EOF
|
||
```
|
||
|
||
5. 修改权重将流量导向 v2
|
||
|
||
- 逐步增加 v2
|
||
|
||
```bash
|
||
kubectl scale deployment/nginx-deployment-2 --replicas=10
|
||
```
|
||
|
||
- 降低 v1
|
||
|
||
```bash
|
||
kubectl scale deployment/nginx-deployment-1 --replicas=0
|
||
```
|
||
|
||
6. 中途访问 Nginx 发现正在随着我们扩展和缩小副本数量,逐步迁移流量。
|
||
|