前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >CI/CD 改进方案设计-App 通用chart包设计

CI/CD 改进方案设计-App 通用chart包设计

原创
作者头像
行者深蓝
修改2024-03-18 21:52:59
980
修改2024-03-18 21:52:59
举报

概述

在现代云原生应用部署和管理中,Helm 和 Helmfile 作为 Kubernetes 的包管理工具,扮演着至关重要的角色。为了提升部署效率和应用的可维护性,我们提出了 App 通用 Chart 包设计方案。本文将详细解释设计原则、设计目标以及如何使用我们的通用 Chart 包来简化应用部署流程。

设计原则

  1. 可复用性:通用 Chart 包应该能够适用于不同类型的应用,无论是前端应用还是后端服务,都可以通过参数化配置来实现快速部署。
  2. 易维护性:Chart 包应该结构清晰,易于理解和修改。这样,开发人员可以轻松地根据具体需求进行定制。
  3. 灵活性:设计时考虑到不同应用的特殊需求,提供足够的配置项以支持各种场景。
  4. 安全性:确保 Chart 包遵循最佳安全实践,如使用最小权限原则,避免敏感信息泄露等。

设计目标

  1. 简化部署流程:通过预定义的模板,减少部署时的重复工作,提升部署效率。
  2. 统一应用标准:统一的 Chart 包有助于标准化应用的部署流程和结构,便于管理和维护。
  3. 支持灵活配置:满足不同环境和需求下的部署,如开发环境、测试环境和生产环境的不同配置。
  4. 易于扩展:当应用需要新增服务或组件时,可以轻松地扩展 Chart 包来支持。

使用通用 Chart 包

我们设计了两个通用 Chart 包,分别针对前端应用(app-frontend)和后端服务(app-backend):

  • app-frontend:适用于前端类应用,如 SPA(单页应用)、静态网站等。查看详情
  • app-backend:适用于后端服务类应用,如 REST API、微服务等。查看详情

这些 Chart 包支持常见的配置项,如环境变量、资源限制、健康检查等,以满足大多数应用部署的需求。

Feature

app-frontend

app-backend

Example Feature 1

Yes

Yes

Example Feature 2

No

Yes

Example Feature 3

Yes

No

引入 Helm/Helmfile 改善部署

Helm 和 Helmfile 是 Kubernetes 生态中的重要工具,它们可以大大简化和自动化应用的部署过程:

  • Helm:作为 Kubernetes 的包管理工具,Helm 可以将应用及其依赖打包成一个 Chart,实现一键部署和升级。
  • Helmfile:是 Helm 的一个扩展,它提供了一种声明式的方式来管理和部署多个 Helm Chart。通过 Helmfile,我们可以更方便地管理复杂的应用部署流程。

结合我们的通用 Chart 包和 Helm/Helmfile 的能力,可以实现快速、一致和可重复的应用部署流程,提升开发和运维的效率。

使用 Helm 和 Helmfile 部署 app-backend 和 app-frontend Chart 包:

准备工作

  • 安装 Helm: 参考 Helm 官方安装指南。
  • 安装 Helmfile: 参考 Helmfile 安装说明。
  • 部署步骤 添加 Helm 仓库:
代码语言:shell
复制
helm repo add my-charts http://charts.onwalk.net
helm repo update
  1. 使用 Helm 部署 app-frontend:
代码语言:shell
复制
helm install my-app-frontend my-charts/app-frontend
  1. 使用 Helm 部署 app-backend:
代码语言:shell
复制
helm install my-app-backend my-charts/app-backend
  1. 使用 Helmfile 部署 app-frontend, 创建 helmfile.yaml 并运行 helmfile apply:
代码语言:yaml
复制
repositories:
  - name: my-charts
    url: http://charts.onwalk.net
releases:
  - name: my-app-frontend
    chart: my-charts/app-frontend
  1. 使用 Helmfile 部署 app-backend, 创建 helmfile.yaml 并运行 helmfile apply:
代码语言:yaml
复制
repositories:
  - name: my-charts
    url: http://charts.onwalk.net
releases:
  - name: my-app-backend
    chart: my-charts/app-backend

有关更多详细的使用和配置选项,请参考 Helm 和 Helmfile 的官方文档。

Helm Chart 配置参数说明

app-frontend

参数

描述

默认值

replicaCount

副本数量

1

image.repository

镜像仓库

nginx

image.pullPolicy

镜像拉取策略

IfNotPresent

image.tag

镜像标签(默认为图表的 appVersion

""

imagePullSecrets

镜像拉取密钥数组

[]

nameOverride

覆盖图表名称

""

fullnameOverride

覆盖图表全名

""

serviceAccount.create

指定是否创建服务账户

true

serviceAccount.automount

是否自动挂载服务账户的API凭证?

true

serviceAccount.annotations

添加到服务账户的注解

{}

serviceAccount.name

使用的服务账户名称

""

podAnnotations

添加到Pod的注解

{}

podLabels

添加到Pod的标签

{}

podSecurityContext

Pod安全上下文

{}

securityContext

容器的安全上下文

{}

service.type

服务类型

ClusterIP

service.port

服务端口

80

ingress.enabled

启用Ingress

true

ingress.className

Ingress类名

"nginx"

ingress.annotations

Ingress的注解

{}

ingress.hosts

Ingress的主机

[{host: "chart-example.local", paths: [{path: "/", pathType: "ImplementationSpecific"}]}]

ingress.tls

Ingress的TLS配置

[]

probes.liveness.enabled

启用存活探针

false

probes.liveness.path

存活探针的路径

/

probes.liveness.port

存活探针的端口

http

probes.readiness.enabled

启用就绪探针

false

probes.readiness.path

就绪探针的路径

/

probes.readiness.port

就绪探针的端口

http

canary.enabled

启用金丝雀部署

true

canary.provider

金丝雀提供者

nginx

canary.load_test_url

金丝雀部署中的负载测试URL

http://flagger-loadtester.test

canary.acceptance-test.enabled

启用金丝雀部署中的验收测试

true

canary.acceptance-test.cmd

验收测试命令

"curl -sd 'test' http://podinfo-canary/token | grep token"

canary.loadtest.enabled

启用金丝雀部署中的负载测试

true

canary.loadtest.cmd

负载测试命令

"hey -z 1m -q 5 -c 2 http://podinfo-canary"

canary.metric_template.enabled

启用金丝雀部署中的度量模板

false

canary.thresholds.successRate

金丝雀部署的成功率阈值

"99"

canary.thresholds.latency

金丝雀部署的延迟阈值

"1s"

canary.analysis.interval

金丝雀分析间隔

"10s"

canary.analysis.threshold

金丝雀分析阈值

"10"

canary.analysis.max_weight

金丝雀分析最大权重

"50"

canary.analysis.step_weight

金丝雀分析步长权重

"5"

resources

容器的资源分配

{}

autoscaling.enabled

启用部署的自动伸缩

false

autoscaling.minReplicas

自动伸缩的最小副本数

1

autoscaling.maxReplicas

自动伸缩的最大副本数

100

autoscaling.targetCPUUtilizationPercentage

自动伸缩的目标CPU利用率百分比

80

volumes

部署时附加的卷

[]

volumeMounts

部署时附加的卷挂载点

[]

nodeSelector

用于Pod分配的节点标签

{}

tolerations

用于Pod分配的容忍度

[]

affinity

用于Pod分配的亲和性规则

{}

app-backend

参数

描述

默认值

replicaCount

部署副本数量

1

image.repository

镜像仓库

nginx

image.pullPolicy

镜像拉取策略

IfNotPresent

image.tag

镜像标签

""

imagePullSecrets

镜像拉取密钥数组

[]

nameOverride

覆盖图表名称

""

fullnameOverride

覆盖图表全名

""

serviceAccount.create

是否创建服务账户

true

serviceAccount.automount

是否自动挂载服务账户的 API 凭证

true

serviceAccount.annotations

添加到服务账户的注解

{}

serviceAccount.name

使用的服务账户名称

""

podAnnotations

添加到 Pod 的注解

{}

podLabels

添加到 Pod 的标签

{}

podSecurityContext

Pod 安全上下文

{}

securityContext

容器的安全上下文

{}

service.type

服务类型

ClusterIP

service.ports

服务端口配置

[见上表]

containerPorts

容器暴露的端口

[见上表]

ingress.enabled

是否启用 Ingress

false

ingress.className

Ingress 类名

"nginx"

ingress.annotations

Ingress 的注解

{}

ingress.hosts

Ingress 的主机配置

[见上表]

ingress.tls

Ingress 的 TLS 配置

[]

probes.liveness.enabled

是否启用存活探针

false

probes.liveness.path

存活探针的路径

/

probes.liveness.port

存活探针的端口

http

probes.readiness.enabled

是否启用就绪探针

false

probes.readiness.path

就绪探针的路径

/

probes.readiness.port

就绪探针的端口

http

resources.limits

容器资源限制

{cpu: 200m, memory: 256Mi}

resources.requests

容器资源请求

{cpu: 100m, memory: 128Mi}

autoscaling.enabled

是否启用自动伸缩

false

autoscaling.minReplicas

自动伸缩的最小副本数

1

autoscaling.maxReplicas

自动伸缩的最大副本数

100

autoscaling.targetCPUUtilizationPercentage

自动伸缩的目标 CPU 利用率百分比

80

volumeMounts

附加的卷挂载点

[见上表]

volumes

附加的卷

[见上表]

nodeSelector

Pod 分配的节点标签

{}

tolerations

Pod 分配的容忍度

[]

affinity

Pod 分配的亲和性规则

{}

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

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

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 概述
    • 设计原则
      • 设计目标
        • 使用通用 Chart 包
          • 引入 Helm/Helmfile 改善部署
          • 使用 Helm 和 Helmfile 部署 app-backend 和 app-frontend Chart 包:
          • Helm Chart 配置参数说明
            • app-frontend
              • app-backend
              相关产品与服务
              容器服务
              腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档