容器化场景下的一站式 DevOps 可以有效的实现持续集成和持续部署,显著提升业务应用创建和交付效率。本文通过 Python 容器应用部署的流程,为您介绍如何在火山引擎生态中实现容器化 DevOps。
使用容器镜像的方式交付 Python 应用,并将其部署在 Kubernetes 集群中,并当代码变更后自动触发应用部署。
使用代码仓库存储代码源并使用持续交付实现 DevOps,首先您需要在代码仓库中准备一份代码源。本文以 Gitee 代码仓库为例为您介绍。
说明
持续交付支持 Gitee、Gitlab、Github、Codeup、Gerrit 等代码仓库托管的代码源,同时也指手动输入代码作为代码源。
projects-zhangsan2022
。app.py
,完成后单击页面底部的 提交。示例代码如下。from flask import Flask app = Flask(__name__) @app.route('/') def hello_world(): return 'Hello, World!' if __name__ == '__main__': app.run(host="0.0.0.0", port=5050)
注意
必须选择 user_info、projects、hook。
持续交付产品的流水线输出的最终产物为符合 OCI 规范容器镜像,需要保存到镜像仓库的 OCI 制品仓库中。镜像仓库提供了对原生 OCI 制品仓库的全生命周期管理能力。
镜像完成构建后,需要创建部署环境,即容器服务 VKE 集群,部署流水线中的应用。
cr-credential-controller
。说明
镜像仓库中的 OCI 制品可以被设置成为私有或公开。处于私有状态时,拉取需要提供认证。cr-credential-controller
组件可以为当前集群自动配置拉取对应镜像仓库的认证信息,实现私有镜像免密拉取。
创建持续交付工作区。操作详情参加 创建工作区。
创建持续交付代码源。操作详情参见 创建代码源。
说明
支持交付代码源配置页面,填写 Gitee 中已获取的代码仓库 HTTPS 地址和 Token。
创建 Python-镜像构建推送至镜像仓库服务 流水线。操作详情参见 创建流水线。
配置输入源,选择已配置的代码源。操作详情参见 配置代码源。
说明
在 Webhook 设置中开启 代码提交 事件触发,当 Gitee 中代码源有变更提交后,即可触发流水线的自动运行。
编辑任务。其中 镜像打包推送至镜像仓库服务 区域中的 镜像版本 和 dockfile 填写说明如下,其他配置保持默认或者选择前置步骤中已创建的资源。
镜像版本 本示例填写 v1。
dockfile:选择 自定义文件,本示例中代码如下。
FROM python:3 RUN mkdir app ADD app.py /app/app.py WORKDIR app #Install other libs RUN pip3 install flask -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com EXPOSE 5050 CMD ["python3", "-m", "flask", "run", "--host=0.0.0.0", "--port=5050"]
添加 Kubectl 发布。操作详情参见 Kubectl 发布。
(https://www.volcengine.com/docs/6461/71591)。
cr-zhangsan2022-cn-beijing.cr.volces.com/namespace-zhangsan2022/oci-zhangsan2022:v1
替换为 {已获取的 OCI 制品仓库的地址}:v1
。apiVersion: v1 kind: Service metadata: name: demo namespace: default spec: externalTrafficPolicy: Cluster ports: - name: port1 port: 5050 protocol: TCP targetPort: 5050 selector: app: demo sessionAffinity: None type: LoadBalancer --- apiVersion: apps/v1 kind: Deployment metadata: name: demo namespace: default spec: progressDeadlineSeconds: 600 replicas: 1 revisionHistoryLimit: 10 selector: matchLabels: app: demo strategy: rollingUpdate: maxSurge: 25% maxUnavailable: 25% type: RollingUpdate template: metadata: annotations: kubectl.kubernetes.io/restartedAt: "2022-03-30T14:37:35Z" creationTimestamp: null labels: app: demo spec: containers: - image: cr-zhangsan2022-cn-beijing.cr.volces.com/namespace-zhangsan2022/oci-zhangsan2022:v1 imagePullPolicy: IfNotPresent name: demo ports: - containerPort: 5050 protocol: TCP resources: limits: cpu: 300m memory: 64Mi requests: cpu: 300m memory: 64Mi terminationMessagePath: /dev/termination-log terminationMessagePolicy: File dnsPolicy: ClusterFirst restartPolicy: Always schedulerName: default-scheduler securityContext: {} terminationGracePeriodSeconds: 30
单击 保存,完成流水线创建。
运行流失水后即可实现应用的发布。
操作结果
完成应用部署后,即可通过外网地址访问应用。
在 VKE 集群 服务 列表中查看已部署的服务的外网地址。
在浏览器输入外网地址即可访问应用。
本示例在持续交付代码源的 Webhook 设置中开启 代码提交 事件触发,即在 Gitee 代码源中更新代码后,会自动触达流水钱的运行,部署更新后的应用。
更多容器 DevOps 相关内容请参见 持续交付帮助文档 中的 最佳实践 章节。