如何从现有 Kubernetes 清单构建 Helm 图表

2024-01-17

我是 k8s 的新手。我有作业,这就是我的情况:
有一个面向微服务的应用程序,使用十个容器构建。它有一个docker-compose文件以方便设置。现在我的任务是将其部署到 Kubernetes 中。我的想法:转换docker-compose文件到 k8s 清单kompose,并为每个服务创建 helm 图表。
我的问题是:我必须一一修改每个图表,不是吗?有什么办法生成values.yaml基于现有的 k8s 清单?例如,从此:

# deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  annotations:
    kompose.cmd: kompose convert
    kompose.version: 1.22.0 (955b78124)
  creationTimestamp: null
  labels:
    io.kompose.service: bookstore-account-service
  name: bookstore-account-service
...

对此,自动:

# deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  annotations:
    kompose.cmd: {{ .Values.cmd }}
    kompose.version: {{ .Values.ver }}
  creationTimestamp: null
  labels:
    io.kompose.service: {{ .Values.name }}
  name: {{ .Values.name }}
...
# values.yaml
cmd: kompose convert
ver: 1.22.0 (955b78124)
name: bookstore-account-service

p/s:抱歉我的英语不好,这不是我的母语:D


头盔values.yaml文件是您可以在部署时配置图表的要点。一方面,您无法配置任何未在其中引用的内容.Values;另一方面,您通常不希望 YAML 文件的每一行都是可配置的。

如果我要解决这个问题,我会从helm create https://docs.helm.sh/docs/helm/helm_create/一个新的图表。然后我会切换到templates目录,将大部分样板移到一边(但保留生成的_helpers.tpl文件),然后运行kompose convert https://kompose.io/user-guide/#kompose-convert。这将生成一组 YAML 文件,但没有 Helm 模板。

从这里我将编辑这些文件,使它们符合典型的 Helm 用法。查看原始文件来自helm create (or 在 Helm 源码中 https://github.com/helm/helm/blob/main/pkg/chartutil/create.go) 举些例子。我希望编辑后的deployment.yaml看起来像:

apiVersion: apps/v1
kind: Deployment
metadata:
  {{-/* delete the Kompose annotations: and empty creationTimestamp: */}}
  labels:
    {{-/* get a standard set of labels from _helpers.tpl }}
    {{- include "bookstore.labels" . | nindent 4 }}
  {{-/* get a standard name from _helpers.tpl }}
  name: {{ include "bookstore.fullname" . }}

应该包含什么内容values.yaml文件,然后呢?这些是你需要配置的东西在部署时。如果您需要覆盖容器command: or args:,这些通常是固定的,但如果您需要提供某种凭据或主机名,这些可能会因部署而异。 (如果你helm install将图表编辑两次,会是什么不同的安装之间?)helm create模板使资源限制可配置,因为这些限制可能会根据实际工作负载而有很大差异:

# deployment.yaml (from helm/create.go linked above)
resources:
  {{- toYaml .Values.resources | nindent 12 }}
# values.yaml (also from helm/create.go)
resources: {}

您可以在此处使用一组特定的值来部署它:

# values.dev.yaml
resources:
  requests:
    memory: 256Mi
  limits:
    memory: 1Gi
# values.prod.yaml
resources:
  requests:
    memory: 2Gi
  limits:
    memory: 4Gi
helm install bookstore . -f values.dev.yaml

例如,如果您保留了“哪个版本的 Kompose 生成了此文件”注释,则没有理由在环境之间更改该注释,因此您可以将其保留为固定字符串。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何从现有 Kubernetes 清单构建 Helm 图表 的相关文章

随机推荐

  • 如何从 MVC3 中的控制器调用 javascript 函数

    我环顾四周 找不到解决方案 因此我发现自己在这里 根据我所读到的内容 我可以使用 RegisterClientScript 或 RegisterClientScriptBlock 在 ASP NET Web 表单中执行此操作 我在任何 MV
  • redis HLL 误报太多

    Hyperlog日志是一种概率算法 根据 redis HLL 文档 我们可能会得到 0 81 的错误 但我得到的错误是 17 20 我认为有问题 这是我的简单 perl 测试脚本 有没有什么错误 usr bin perl w use Red
  • 如何检测git中的分支点?

    我正在尝试确定分支中的第一次提交 我读过其他各种 SO 帖子 包括用 Git 寻找分支点 https stackoverflow com questions 1527234 finding a branch point with git 但
  • 在手机上看到的带有 mathjax 的博客

    我正在使用 mathjax我的博客点博客 http ochopatas blogspot mx 在电脑上看效果很好 但在手机上看公式就不会变形 我找到了这个其他博客点博客 http imflaud blogspot mx 2016 07 i
  • AngularJS 与 .NET MVC 捆绑缩小错误

    我一直在 NET MVC 网站内开发一个大型 AngularJS 应用程序 我已经花了很长时间没有测试它是否会使用捆绑优化功能成功缩小 BundleTable EnableOptimizations True 当然 它失败了 我一直在玩捆绑
  • 实施“make check”或“make test”

    如何用Make实现一个简单的回归测试框架 我正在使用 GNU Make 如果这很重要的话 我当前的 makefile 看起来像这样 为简单起见进行了编辑 OBJS jscheme o utility o model o read o eva
  • Heroku + Github 部署策略

    我正在开发一个 Web 应用程序 在 Github 上托管源代码并在 Heroku 上运行该应用程序 一切工作正常 但我有一个问题 我无法解决 在部署代码之前 我运行一些脚本来优化代码 缩小 连接文件等 heroku 应用程序仅使用该应用程
  • E/libprocessgroup:set_timerslack_ns 写入失败:不允许操作?

    当我运行 Android 应用程序时 我在 Logcat 中遇到了这个问题 有谁知道这个问题以及如何解决它 该应用程序不会崩溃 但是当我每次尝试在 Google 地图的自动完成搜索栏中输入内容时 它都会关闭该活动 并返回上一个 在谷歌地图上
  • 以静默方式安装 Dot net 4.5 作为依赖项

    我有一个静默安装的设置 但它依赖于 dot net Framework 4 5 那么我该如何创建 也可以静默安装依赖项的安装程序 Setup is created in Install Shield and it is a wpf appl
  • 多边形算法中的点有时会给出错误的结果[关闭]

    Closed 这个问题需要调试细节 help minimal reproducible example 目前不接受答案 我在 StackOverflow 上看到了我在 PHP 代码中实现的 多边形中的点 光线跟踪算法 大多数时候 它工作得很
  • 尝试在 Laravel 中删除一行时出现错误“调用未定义的方法 stdClass::delete()”

    我从数据库和本地存储中删除图像的方法 public function destroy id image DB table images gt where id id gt first print r image return end Fil
  • 如何让 cimport 在 Cython 中工作?

    我的目录结构如下 我的模块 init py A init py a pyx B init py b pyx 在 b pyx 中 我想从 A a 导入函数 常规的 python 导入可以工作 但 cimport 总是失败 另外 我分别编译 A
  • 如何从 Azure 移动服务返回异常

    我制作了一个在本地运行良好的 Azure 移动服务 然后 我将 Azure 移动服务发布到云 网站显示它当前正在运行 然后我做了一个GET Request到我发布的网站 它返回以下内容 状态 500 内部服务器错误 500 内部服务器错误
  • Typeorm 打字稿存储库 findone - 类型参数不可分配给“FindOneOptions”类型的参数

    这是我的配置文件 import Column Entity PrimaryGeneratedColumn from typeorm Entity name guild configurations export class GuildCon
  • PostgreSQL:不区分大小写的字符串比较

    PostgreSQL 有一个简单的忽略大小写比较吗 我想更换 SELECT id user name FROM users WHERE lower email IN lower email protected cdn cgi l email
  • 如何将 MVC 视图返回到 $.Ajax JSON POST

    我正在将 Ajax POST 发送到带有参数的 MVC 控制器函数 并成功返回 JasonResult 我需要做的是返回当前视图 就好像它不是 JSON 请求并且我正在返回视图数据 Viewdata已更新 页面需要重新绘制 简而言之 我希望
  • Android - 是否有可能制作无限画布?

    目前我正在开发允许用户绘图的应用程序 简单的想 只需扩展 Canvas 类 大部分事情就完成了 这是我最初的想法和想法 但由于画布相当小 因为这只是用户在屏幕上看到的内容 因此没有太多可以绘制的空间 浏览我发现的文档translate 允许
  • 粘性页脚 CSS

    我有一个非常基本的网站 页眉 内容 页脚没有侧边栏或任何东西 问题是内容区域与页脚重叠 我已经尝试了所有粘性页脚修复 即 csstricks ryanfait com 和我在 google 上找到的其他一些以及这里的一些 但它们都不起作用
  • 通过应用程序在 Google Play 商店中的屏幕截图质量 - 变得压缩、模糊和损坏

    通过 Google Play 应用程序查看应用程序的屏幕截图时 显示的屏幕截图经过压缩且质量较低 当通过桌面网络浏览器查看 Play 应用商店页面时 它们是完整质量的 我尝试了几个建议 包括 尝试 JPEG 和 PNG 使用较低尺寸和较高尺
  • 如何从现有 Kubernetes 清单构建 Helm 图表

    我是 k8s 的新手 我有作业 这就是我的情况 有一个面向微服务的应用程序 使用十个容器构建 它有一个docker compose文件以方便设置 现在我的任务是将其部署到 Kubernetes 中 我的想法 转换docker compose