前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >在腾讯云容器服务 TKE 中实践 DevOps

在腾讯云容器服务 TKE 中实践 DevOps

作者头像
腾讯云原生
发布2020-11-05 11:10:37
2.5K0
发布2020-11-05 11:10:37
举报

jokey,腾讯云容器产品工程师,热衷于云原生领域。目前主要负责腾讯云TKE 的售中、售后的技术支持,根据客户需求输出合理技术方案与最佳实践。

概述

DevOps 理念被越来越多的企业采纳,DevOps 是 Development 和 Operations 的组合词,代表着重视「软件开发人员(Dev)」和「IT 运维技术人员(Ops)」之间沟通合作的文化;旨在透过自动化「软件交付」和「架构变更」的流程,使得构建、 测试、发布软件的过程能够更加地快捷、频繁和可靠。在云原生时代,我们更需要 Devops 思维来实现敏捷开发, 本文将介绍和实践专为云原生打造的 TKE 容器 DevOps 服务,实现从代码提交时触发镜像的自动构建,再到镜像构建成功时触发自动部署流程将应用部署、更新到 TKE 集群中的一整套无缝衔接的 Devops 流水线。

TKE 容器 DevOps 简介

TKE 容器 DevOps 是 容器服务 TKE[1]容器镜像服务 TCR[2]CODING DevOps[3] 三个服务紧密结合,面向容器业务场景,具备自动化代码编译、容器镜像构建、镜像推送及应用部署等功能,为客户提供强大的一站式云原生 DevOps 服务。容器 DevOps 快速入门请参考 TKE 和 Coding 协同业务实现快速迭代[4] 最佳实践文档。

TKE 容器 DevOps 业务流程

TKE 容器 DevOps 服务贯穿了整个应用开发和部署流程的全生命周期管理,实现了从更新代码到应用部署、更新的自动化,如下图所示:

如何使用 TKE 容器 DevOps

操作场景

TKE 容器 Devops 功能提供了强大的云原生 Devops服务,下面将按照上述 TKE 容器 Devops 业务流程图来实现从源码更新到业务发布的整套自动化流程。

前提条件

  • 创建 TKE 测试集群 关于如何创建可参考文档 部署容器服务TKE[5]
  • 开通 容器镜像服务 TCR[6] 服务 已创建可访问的 TCR 测试实例和生成测试实例访问凭证。TCR 需要开通企业标准版或高级版支持云原生交付工作流,详情请参考 容器镜像服务购买指南[7],目前 TCR 支持区域请参考 支持地域[8]
  • 开通 CODING DevOps[9] 服务 已创建和完善了 Coding Devops 团队。如使用子账号进行操作,请使用主账号在 CODING DevOps[10] 控制台快速创建拥有权限的子用户或参考 子用户权限设置[11] 提前为子账号授予对应实例的操作权限。

操作步骤

TKE 容器 Devops 访问入口

在 TKE 控制台左侧功能菜单栏点击【Devops】功能链接即可进入【容器 Devops】介绍界面,如下图所示:

点击 【立即使用】即可跳转到所属团队的 Coding 主页面使用相关 DevOps 功能。

配置代码托管

在 Coding 团队主页面创建一个测试项目和测试代码仓库,关于 Coding 代码托管介绍请参考 代码托管介绍[12] 。创建步骤如下:

步骤 1:在 Coding 团队主页面【 项目】中创建测试项目,如下图所示:

步骤 2:点击已创建的测试项目 “test-jokey” 进入项目主页面,在【代码仓库】菜单中新建测试代码仓库,如下图所示:

创建构建计划

在测试项目 “test-jokey” 主页面左侧菜单【持续集成】的子菜单 【构建计划】中创建一个构建计划,构建计划是持续集成的基本单元,可以通过选择构建计划模版快速创建一个构建计划,详情请参考文档 快速开始持续集成[13]

步骤 1:选择 “构建镜像并推送到 TCR 企业版” 模版快速创建一个构件计划,创建示例如下:

步骤 2:根据构建计划模版选择要检出的代码源和配置 TCR 访问凭证相关环境变量, 右边可以看到模版生成的 Jenkinsfile 预览,如下图:

Coding devops 和 TCR 实例之间内网互通,镜像 push 默认使用内网传输,无需另外配置。

使用构建模版生成的构建项目,也可以通过点击构建项目的【设置】菜单再对构建详情进行自定义配置,构建计划配置页面的功能说明如下:

【基础信息】:基础配置页面可选择代码源和节点池等基础配置,节点池相关说明请参考文档 构建节点[14]

【流程配置】:用来配置运行构建任务的环境,相关说明请参考 构建环境[15]

【触发规则】:用来配置构建计划的触发规则,可支持通过多种方式来触发构建计划,相关说明请参考 触发规则[16]

【变量与缓存】:环境变量与缓存配置,相关说明请参考 环境变量[17]缓存目录[18]

【通知提醒】:构建计划完成时可向指定的 Coding 团队成员发送通知提醒。

另外还可以在【项目配置 -> 开发者选项 -> WebHook】 中新建 WebHook 的方式将事件通知推送到企业微信等即时通信平台,详情请参考 WebHook[19]绑定企业微信群机器人[20],配置示例如下图:

想了解更多关于 Coding 持续集成的详细介绍请参考 持续集成介绍[21]

创建持续部署

在测试项目 “test-jokey” 主页面左侧菜单 【持续集成】的子菜单 【Kubernetes】中根据步骤引导创建持续部署流水线,如下图所示:

配置云账号

请参考 云账号[22] 文档,添加配置部署云上资源的访问云账号信息,可以选择【腾讯云 TKE】或者【Kubernetes】 类型的云账号,输入相关认证配置添加云账号,这里选择了【Kubernetes】方式绑定。

配置应用和流程

关于 Coding 应用与项目相关说明请参考文档 应用与项目[23]流程配置[24] ,这里仅简单说明下在配置应用和流程过程中的关键配置项。

在创建应用时,需要勾选【 Kubernetes(TKE) 部署】方式:

在新建的应用中创建部署流程时,选择【Kubernetes】流程模版,再根据实际需要选择模版下的流程,这里选择了下图中第二个流程,部署 Deployment 和 Service 到 Kubernets 集群的流程:

在【部署流程】中配置部署流程时,【启动所需制品】选项关联之前的持续集成环节生成的 TCR 仓库镜像制品:

使用【自动触发器】绑定 TCR 仓库镜像制品,这里是重点,作用是当有新版本镜像构建成功时,将自动触发部署流程,配置方式如下:

接下来就是配置【部署 Deployment】和【部署 Service】部署阶段,两个阶段的配置方式类似,选择之前添加的有部署权限的云账号和填写自定义的 Manifest,即自定义部署 YAML 模版。

自定义 Deployment YAML 示例如下:

关于持续部署更新策略的提示: 本示例仅使用了一个简单的 Deployment YAML 部署到 Kubernetes 集群,使用了默认的滚动部署(RollingUpdate)更新策略。实际上,可以借助 Nginx-ingress / Istio 等工具配置更高级的更新策略,如蓝绿发布、金丝雀、A/B 测试等,具体使用方法请参阅 蓝绿发布[25]Nginx-ingress 实现自动化灰度发布[26]持续部署 + TKE Mesh 灰度发布实践[27]

代码语言:javascript
复制
apiVersion: apps/v1
kind: Deployment
metadata:
  name: devops-app
spec:
  replicas: 2
  selector:
    matchLabels:
      app: devops-app
  template:
    metadata:
      labels:
        app: devops-app
    spec:
      containers:
        - image: xxx-test.tencentcloudcr.com/xxx-test/jokey-test  # 示例镜像地址
          name: devops-app
          ports:
            - containerPort: 5000
      imagePullSecrets:  # 私有仓库访问凭证配置 
        - name: tcr-secret # 访问凭证 secret

其中, 对于 spec.template.spec.containers.*.image 的镜像地址字段 Coding 会有一个转换匹配规则, 关于转换匹配规则的说明请参考文档 在 manifest 中绑定制品[28]

关于 TKE 拉取 TCR 私有仓库镜像有两种方式:

  • 在 TCR 支持区域内可配置 TKE 免密拉取 TCR 容器镜像,关于 TCR 支持区域请参考 支持地域[29],关于如何配置可参考文档 TKE 集群使用 TCR 插件内网免密拉取容器镜像[30]
  • 手动配置 TKE 拉取 TCR 私有仓库镜像的访问凭证,配置方式可参考 TKE 配置私有仓库访问示例[31]

注意:上面的 Deployment YAML 示例使用了 “手动配置 TKE 拉取 TCR 私有仓库镜像的访问凭证” 的方式。

自定义的 Service Manifest YAML 示例:

代码语言:javascript
复制
apiVersion: v1
kind: Service
metadata:
  labels:
    app: devops-svc
  name: devops-svc
spec:
  ports:
    - port: 5000
      protocol: TCP
  selector:
    app: devops-app

另外可以为部署流程的每个阶段配置自定义事件通知(可选),以便方便快捷的获知部署流程执行情况,这里配置了企业微信通知方式,获取企业微信 Webook 机器人链接的方法可参考 创建企业微信群机器人[32]

关联项目和应用

关联项目和应用配置请参考文档 项目和应用关联[33]

提单发布

提单发布使用和配置请参考文档 新建发布单[34]

想了解更多关于 Coding 持续部署的详细介绍请参考 持续部署介绍[35]

测试验证

在项目代码文件中修改添加如下所示的 v2 API 代码后提交 master 分支:

由于【持续集成】中的构建计划使用了 “代码更新时自动执行” 的事件触发配置, 了解相关触发配置请参考 触发规则[36]。当提交修改的代码时,会自动触发关联的构建计划执行:

如果为持续集成配置了企业微信 Webhook 通知,企业微信也会收到相应的即时通知消息,如下图所示:

当构建计划生成 Docker 镜像制品时,又会自动触发关联的【持续部署】流程,将新的镜像应用更新到 TKE 集群中:

如果部署流程有配置企业微信通知的话,当部署流程任务完成时,会收到对应的企业微信部署完成通知,如下图所示:

此时,可以在 TKE 中看到已经成功更新了工作负载:

从测试验证结果可以看出,我们在 TKE 中实现了从源码更新到业务发布的整套 DevOps 流程。

参考资料

[1]

容器服务 TKE: https://cloud.tencent.com/document/product/457/

[2]

容器镜像服务 TCR: https://cloud.tencent.com/document/product/1141/39278

[3]

CODING DevOps: https://cloud.tencent.com/product/coding

[4]

TKE 和 Coding 协同业务实现快速迭代: https://cloud.tencent.com/document/product/457/47834

[5]

部署容器服务TKE: https://cloud.tencent.com/document/product/457/11741

[6]

容器镜像服务 TCR: https://cloud.tencent.com/document/product/1141/39278

[7]

容器镜像服务购买指南: https://cloud.tencent.com/document/product/1141/40540

[8]

支持地域: https://cloud.tencent.com/document/product/1141/40540

[9]

CODING DevOps: https://cloud.tencent.com/document/product/1115/37268

[10]

CODING DevOps: https://console.cloud.tencent.com/coding/container-devops

[11]

子用户权限设置: https://cloud.tencent.com/document/product/598/10594

[12]

代码托管介绍: https://help.coding.net/docs/host/introduce.html

[13]

快速开始持续集成: https://help.coding.net/docs/ci/start.html

[14]

构建节点: https://help.coding.net/docs/ci/node/overview.html

[15]

构建环境: https://help.coding.net/docs/ci/ways.html

[16]

触发规则: https://help.coding.net/docs/devops/ci/trigger.html

[17]

环境变量: https://help.coding.net/docs/ci/env.html

[18]

缓存目录: https://help.coding.net/docs/ci/cache.html

[19]

WebHook: https://help.coding.net/docs/project/open/webhook.html

[20]

绑定企业微信群机器人: https://help.coding.net/docs/project/open/wechat-robot.html

[21]

持续集成介绍: https://help.coding.net/docs/ci/index.html

[22]

云账号: https://help.coding.net/docs/cd/cloudaccount.html

[23]

应用与项目: https://help.coding.net/docs/cd/app-project.html

[24]

流程配置: https://help.coding.net/docs/cd/pipe/overview.html

[25]

蓝绿发布: https://help.coding.net/docs/best-practices/cd/blue-green.html

[26]

Nginx-ingress 实现自动化灰度发布: https://help.coding.net/docs/best-practices/cd/nginx-ingress.html

[27]

持续部署 + TKE Mesh 灰度发布实践: https://help.coding.net/docs/best-practices/cd/tke-mesh.html

[28]

在 manifest 中绑定制品: https://help.coding.net/docs/cd/pipe/artifacts/in-kubernetes.html#在-manifest-中绑定制品

[29]

支持地域: https://cloud.tencent.com/document/product/1141/40540

[30]

TKE 集群使用 TCR 插件内网免密拉取容器镜像: https://cloud.tencent.com/document/product/1141/48184

[31]

TKE 配置私有仓库访问示例: https://help.coding.net/docs/cd/question/private-repo.html#Kubernetes-云账号(TKE-集群)

[32]

创建企业微信群机器人: https://help.coding.net/docs/project/open/wechat-robot.html#创建企业微信群机器人

[33]

项目和应用关联: https://help.coding.net/docs/cd/app-project.html#应用与项目关联

[34]

新建发布单: https://help.coding.net/docs/cd/app-project.html#新建发布单

[35]

持续部署介绍: https://help.coding.net/docs/cd/overview.html

[36]

触发规则: https://help.coding.net/docs/devops/ci/trigger.html

回答问题拿礼物

11月份继续答题拿礼物哦

还是简单的两个小问题

留言板评论【问题编号+答案】

全部回答正确的同学可获得腾讯云公仔1只

仅限两个名额,快快参与起来吧~

问题1:要想 TKE 能正常拉取持续集成环节构建的TCR镜像制品需要做什么配置?  问题2:配置 DevOps 事件通知到企业微信时,代码提交、持续集成和持续部署等环节的事件通知该如何配置(简述即可)?

截止时间:2020年11月6日18点

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-11-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 腾讯云原生 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 概述
  • TKE 容器 DevOps 简介
  • TKE 容器 DevOps 业务流程
  • 如何使用 TKE 容器 DevOps
    • 操作场景
      • 前提条件
        • 操作步骤
          • TKE 容器 Devops 访问入口
          • 配置代码托管
          • 创建构建计划
          • 创建持续部署
        • 测试验证
          • 参考资料
          相关产品与服务
          容器镜像服务
          容器镜像服务(Tencent Container Registry,TCR)为您提供安全独享、高性能的容器镜像托管分发服务。您可同时在全球多个地域创建独享实例,以实现容器镜像的就近拉取,降低拉取时间,节约带宽成本。TCR 提供细颗粒度的权限管理及访问控制,保障您的数据安全。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档