deployment - 如何在deployment中指定不同版本的kubernetes中实现Canary部署
问题描述
我有两个部署文件 1.
deployment-1.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: process
labels:
app: process
spec:
replicas: 3
selector:
matchLabels:
app: process
template:
metadata:
labels:
app: process
version: v1
spec:
containers:
- name: pull
image: parma/k8s-php:red
ports:
- containerPort: 80
2.
部署-2.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: process
labels:
app: process
spec:
replicas: 3
selector:
matchLabels:
app: process
template:
metadata:
labels:
app: process
version: v2
spec:
containers:
- name: pull
image: parma/k8s-php:green
ports:
- containerPort: 80
由于我在 spec.template.metadata 中指定了两个不同的版本,它不会为两个副本集继续运行 6 个 pod,它只会启用最新的副本集并运行。
有没有办法通过保持单个部署中的副本集启动并运行 v1 中的 3 个 pod 和 v2 中的 3 个 pod 来实现金丝雀部署
解决方案
- 您不能有多个具有相同名称的部署。将它们重命名为 process-v1 和 process-v2。
- 您需要为每个选择器设置不同的选择器。第一个应该有 matchLabels: {app: process, version: v1},第二个 matchLabels: {app: process, version: v2}。
所以从技术上讲,这将是两个完全独立的部署。使它们成为“基线”和“金丝雀”的是您如何向它们发送流量。如果您在服务中指定通用选择器(仅 {app:process}),那么两个部署都会看到一小部分流量。
推荐阅读
- merge - ClearTeam Explorer - CCRC - 与 Beyond Compare 集成
- jenkins - 我可以在声明式/脚本化 Jenkins 管道上使用继承吗?
- javascript - 无法在 javascript 测验中显示正确答案
- c++ - 模板中 std::optional 的基础类型
- c# - 尝试使用列表在 Unity 中创建同一脚本的多个实例
- oracle - 由于 UNION 导致的视图和表列大小不匹配
- javascript - 尝试将图像发送到 Oracle 数据库,但无法正常打开
- python - 尝试从网站获取字典时出现 TypeError
- javascript - 如何更改输入类型=日期日历语言/本地化?
- batch-file - 如何在文本文件中查找字符串并将其打印在屏幕上