DevOps - 从渐进式交付说起(含实践 Demo) (3)

进入“腾讯云”容器服务,打开集群Service,点击命名空间 traefik-system ,找到名为 traefik-ingress 的 IP 地址,并在本机新建两个 Host 规则:

IP地址 dev.coding IP地址 pro.coding

这样在本地通过访问 dev.coding 就可以访问发布的服务了。

4.2.4 通过 CODING DevOps 初始化 Mysql

以上述同样的操作复制代码仓库 cd-production 的 coding-templates/mysql.json 内容,并在每一个阶段修改为自己的“云账号”,创建 Pipeline 并启动完成集群 Mysql 的初始化。

DevOps - 从渐进式交付说起(含实践 Demo)

4.2.5 创建渐进式交付流水线

在创建渐进式交付流水线之前,请先开通 CODING 制品库,开通完成后,请按照指引在本地使用 cd-production 的 Dockerfile 构建镜像并推送至“制品库”

随后以上述同样的操作复制代码仓库 cd-production 的 coding-templates/devops.json 内容,创建渐进式交付的 Pipeline。

请将“配置”阶段的“启动所需制品”修改为自己的 CODING 项目、Git 仓库、镜像仓库、镜像。
请将“配置”阶段的“自动触发器”修改为自己的 CODING 项目、镜像仓库、镜像。
请将每一个阶段的云账号修改为自己的云账号。

DevOps - 从渐进式交付说起(含实践 Demo)

尝试修改项目 index.html 并推送,触发流水线。

5. 项目说明与核心原理 5.1 项目说明 ├── Dockerfile ├── Jenkinsfile # CODING CI 构建脚本 ├── Pipfile ├── Pipfile.lock ├── README.md ├── app.py ├── coding-templates │ ├── devops.json # CODING CD 渐进式交付模板 │ ├── mysql.json # CODING CD Mysql 初始化模板 │ └── traefik.json # CODING CD Traefik 初始化模板 ├── config.py ├── database_version.py ├── devops │ ├── README.md │ ├── mysql │ │ ├── dev │ │ │ ├── mysql-deployment.yaml │ │ │ └── mysql-pv.yaml │ │ └── pro │ │ ├── mysql-deployment.yaml │ │ └── mysql-pv.yaml │ └── traefik │ ├── deployment │ │ ├── configmap.yaml │ │ └── deployment.yaml │ ├── deployment.yaml │ ├── open-treafik.yaml │ └── router │ ├── dev │ │ └── flask-dev.yaml # Dev 环境的 Traefik IngressRoute 规则 │ └── pro │ ├── circuitbreaker.yaml # Pro 环境的 Traefik 熔断规则 │ ├── flask-abtest.yaml # Pro 环境的 A/B Testcase │ ├── flask-pro-all.yaml # Pro 环境的 Traefik IngressRoute 规则 │ ├── flask-pro.yaml │ ├── mysql-ratelimit.yaml │ ├── mysql-tcp-router.yaml │ └── ratelimit.yaml # Pro 环境的 Traefik 限流规则 ├── flask_test.py ├── k8s-canary # 灰度发布环境的 K8S Manifest │ ├── deployment.yaml │ └── nodeport-canary.yaml ├── k8s-dev # Dev 环境的 K8S Manifest │ ├── deployment.yaml │ ├── migrate-mysql-job.yaml # Dev 环境的 Migrate Database K8S Job │ ├── nodeport-service.yaml │ └── service.yaml ├── k8s-pro # Pro 环境的 K8S Manifest │ ├── deployment.yaml │ ├── migrate-mysql-job.yaml │ └── nodeport-service.yaml ├── manage.py ├── migrations │ ├── README │ ├── alembic.ini │ ├── env.py │ ├── script.py.mako │ └── versions │ ├── 95585fe4b611_initial_migration.py │ └── fece98dad497_second_migrate.py ├── requirements.txt └── templates └── index.html # 项目发布首页 5.2 核心原理

在这个例子中,我们使用了 Traefik 作为集群网关,使用 Router 对 Host dev.coding 和 pro.coding 进行匹配,使流量按照不同发布阶段进行不同的分配。

5.2.1 Dev 环境架构图

访问 dev.coding 时,Router 匹配到此 Host 规则,将流量转发到名为k8s-flask-nodeport 的 Service(即 Dev 环境的 Service)。

DevOps - 从渐进式交付说起(含实践 Demo)

Traefik Router 核心配置代码为:

apiVersion: traefik.containo.us/v1alpha1 kind: IngressRoute metadata: name: k8s-flask-dev namespace: dev spec: entryPoints: - web routes: - kind: Rule match: Host(`dev.coding`) services: - name: k8s-flask-nodeport port: 8080 namespace: dev 5.2.2 A/B 测试环境架构图

访问 pro.coding 时,Router 匹配到此 Host 规则,并检查 Header 是否匹配,并将根据匹配结果决定将流量转发到 k8s-flask-canary 或者 k8s-flask 两个不同环境的 Services。

DevOps - 从渐进式交付说起(含实践 Demo)

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zyjwgw.html