云原生架构与 GitOps 实战
王炜
前腾讯云 CODING 架构师
5442 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 44 讲
云原生架构与 GitOps 实战
15
15
1.0x
00:00/00:00
登录|注册

21|应用定义:如何使用 Helm 定义应用?

你好,我是王炜。
在上一节课,我们学习了如何使用 Kustomize 定义应用。在将示例应用改造成 Kustomize 应用的过程中,我介绍了 Kustomize base 和 overlay 的概念,并通过 3 个不同环境的配置差异来说明如何对 base 通用资源的字段值进行覆盖。
在使用 Kustomize 对某个对象进行覆写时,你可能注意到了一个细节,那就是我们需要了解 base 目录下通用 Kubernetes 对象的具体细节,例如工作负载的名称和类型,以及字段的结构层级。当业务应用比较简单的时候,由于 Kubernetes 对象并不多,所以提前了解这些细节并没有太大的问题。
但是,当业务应用变得复杂,例如有数十个微服务场景时,那么 Kubernetes 对象可能会有上百个之多,这时候 Kustomize 的应用定义方式可能就会变得难以维护,尤其是当我们在  kustomization.yaml 文件定义大量覆写操作时,这种隐式的定义方式会让人产生迷惑。
其次,如果我们站在应用的发行角度来说,你会发现 Kustomize 对最终用户暴露所有 Kubernetes 对象概念的方式太过于底层,我们可能需要一种更上层的应用定义方式。
所以,社区诞生了另一种应用定义方式:Helm。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《云原生架构与 GitOps 实战》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(14)

  • 最新
  • 精选
  • 邵涵
    几个问题麻烦问您一下: 1. 虽然和Kustomize相比,Helm的管理粒度是在应用层面了,但是,就如同本节的例子,使用Helm将一套应用部署到多环境时,也和Kustomize一样需要持有对每个环境的特殊配置,虽然Helm的模板变量的方式比Kustomize的manifest补丁文件的方式更灵活、高效,但也避免不了对不同环境分别配置的信息的管理,Helm对这种环境特殊配置信息的管理的最佳实践是什么样的?是将不同环境的values文件通过git保管?还是其他什么方式? 2. 对于Helm仓库,是否有需要像Harbor之于docker hub那样部署一个私有的Helm仓库在公司内部用?

    作者回复: 非常棒的两个问题。 首先对于多环境的情况,一般的实践是通过多个 values.yaml 文件来实现,例如 values-dev.yaml,values-prod.yaml。 对于第二个问题,Harbor 支持存储 Helm Chart,你可以查看这个文档:https://goharbor.io/docs/1.10/working-with-projects/working-with-images/managing-helm-charts/

    归属地:北京
    1
  • gyl1989113
    这一章节要部署自己镜像仓库的镜像,是不是要把value.yaml里的lyzhang1999改成自己的dockerhub用户名哦

    作者回复: 是的👍🏻

    归属地:四川
    1
  • Sophia-百鑫
    问题1 的 结果, helm build.yaml 麻烦老师帮助指正 name: Build and Push Helm Chart on: push: branches: - main jobs: build-and-push-chart: runs-on: ubuntu-latest steps: - name: Checkout code uses: actions/checkout@v2 # 拉取代码到工作目录 - name: Set up Helm uses: azure/setup-helm@v1 # 设置 Helm 环境 - name: Package Helm Chart run: helm package ./helm # 打包 Helm Chart,生成 .tgz 文件 - name: Push Helm Chart to GitHub Package run: helm push ./kubernetes-example-0.1.0.tgz oci://ghcr.io/githubusername/helm # 推送 Helm Chart 到 GitHub Package Registry env: HELM_EXPERIMENTAL_OCI: 1 with: password: ${{ secrets.GITHUB_TOKEN }} # 使用 GitHub Token 进行认证和授权

    作者回复: 非常正确👍🏻

    归属地:上海
  • Sophia-百鑫
    kubernetes-example git:(main) ✗ helm install my-kubernetes-example ./helm --namespace helm-staging --create-namespace --set frontend.autoscaling.averageUtilization=60 --set backend.autoscaling.averageUtilization=60 Error: INSTALLATION FAILED: unable to build kubernetes objects from release manifest: [resource mapping not found for name: "frontend" namespace: "" from "": no matches for kind "HorizontalPodAutoscaler" in version "autoscaling/v2beta2" ensure CRDs are installed first, resource mapping not found for name: "backend" namespace: "" from "": no matches for kind "HorizontalPodAutoscaler" in version "autoscaling/v2beta2" ensure CRDs are installed first] “Helm install” 需要先安装 CRD,网上说 “可以在chart中创建一个名为crds的特殊目录来保存CRD” 具体要怎么处理呢? 感谢老师 "

    作者回复: 检查一下你的 k8s 集群版本,一般都有这个 crd,还可以尝试修改成 autoscaling/v2 版本。

    归属地:上海
  • 李多
    思考1: 在 Github Actions 插件库中,有 Helm 发布相关的工具,如:Helm Chart Releaser (https://github.com/marketplace/actions/helm-chart-releaser) 。在 steps 中使用 uses: helm/chart-releaser-action@v1.5.0,利用这个工具可以实现 Helm 发布。

    作者回复: 👍🏻这个插件看起来不错~

    归属地:山东
  • 天地有雪
    可以了,原来ubuntu系统,helm 3.11版本,换成centos7 helm 3.8.0 没有问题

    作者回复: 👍🏻

    归属地:广东
  • 天地有雪
    你好: 1 helm registry login -u mlkkkfriend https://ghcr.io Password: Error: Get "https://ghcr.io/v2/": denied: denied 文章中 在推送之前,还需要使用 GitHub ID 和刚才创建的 Token 登录到 GitHub Package。 需要什么操作

    作者回复: 需要创建 GitHub Token,检查一下是否赋予了 Token Package 的读写权限。

    归属地:广东
    2
  • Amosヾ
    2、执行安装时使用不同的 helm release name,并且通过命令行参数或 values.yaml 的方式修改 deploy、service 等对象的名字

    作者回复: 👍🏻正确!

    归属地:江苏
  • ghostwritten
    我的 centos 7.9.2009 & helm v3.11.0 没有遇到拒绝问题。 $ helm version version.BuildInfo{Version:"v3.11.0", GitCommit:"472c5736ab01133de504a826bd9ee12cbe4e7904", GitTreeState:"clean", GoVersion:"go1.18.10"} $ helm registry login -u ghostwritten https://ghcr.io Password: Login Succeeded $ helm package ./helm Successfully packaged chart and saved it to: /root/github/kubernetes-example/kubernetes-example-0.1.0.tgz $ helm push kubernetes-example-0.1.0.tgz oci://ghcr.io/ghostwritten/helm Pushed: ghcr.io/ghostwritten/helm/kubernetes-example:0.1.0 Digest: sha256:46bef623e43f4525ebfd25c368dfea69e70efbe7590f1e3eccc321fbb6b16882 $ helm install my-kubernetes-example oci://ghcr.io/ghostwritten/helm/kubernetes-example --version 0.1.0 --namespace remote-helm-staging --create-namespace --set frontend.autoscaling.averageUtilization=60 --set backend.autoscaling.averageUtilization=60 Pulled: ghcr.io/ghostwritten/helm/kubernetes-example:0.1.0 Digest: sha256:46bef623e43f4525ebfd25c368dfea69e70efbe7590f1e3eccc321fbb6b16882 W0202 16:15:56.276585 3957 warnings.go:70] autoscaling/v2beta2 HorizontalPodAutoscaler is deprecated in v1.23+, unavailable in v1.26+; use autoscaling/v2 HorizontalPodAutoscaler AME: my-kubernetes-example LAST DEPLOYED: Thu Feb 2 16:15:55 2023 NAMESPACE: remote-helm-staging STATUS: deployed REVISION: 1 TEST SUITE: None $ k get pods -n remote-helm-staging NAME READY STATUS RESTARTS AGE backend-bcb7687c6-s7lxh 1/1 Running 0 29m backend-bcb7687c6-v4cx6 1/1 Running 0 29m frontend-7c59d655fb-p6lpm 1/1 Running 1 (21m ago) 29m frontend-7c59d655fb-xnl8x 1/1 Running 0 29m postgres-7745b57d5d-2nndw 1/1 Running 0 29m
    归属地:北京
    1
  • Sophia-百鑫
    我的helm 版本 kubernetes-example git:(main) ✗ helm version version.BuildInfo{Version:"v3.12.2", GitCommit:"1e210a2c8cc5117d1055bfaa5d40f51bbc2e345e", GitTreeState:"clean", GoVersion:"go1.20.6"}
    归属地:上海
收起评论
显示
设置
留言
14
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部