开发者的Kubernetes懒人指南( 六 )


然而 , 您也是一名开发人员,希望不一定是那位在维护这些文件的人 。
只要有需要,使用你的 IDE 的 Kubernetes 支持(在我这里是IntelliJ IDEA)对 Helm charts、Kustomize 文件等进行编码支持,会极大地帮助你 。哦,我们还没有谈论过它们 。让我们来谈谈 。这里有一段视频,会让你迅速了解IntelliJ 的 Kubernetes 插件 。
Kubernetes:附加主题什么是 Helm?Helm Chart 又是什么?你可以把 Helm 想象成 Kubernetes 的包管理器 。让我们了解一些概念:
正如我们上面提到的,仅仅在 Kubernetes 集群中安装 WordPress 就会导致成千上万行的 YAML 代码 。如果你不必亲自编写这些 YAML 代码 , 而是可以使用预先构建的软件包,途中只需替换一些变量,那将是非常好的 。
这就是Helm Chart,一堆 YAML 文件和模板,按照特定的目录结构布局 。当你开始安装一个特定的 chart 时,Helm 将下载它 , 解析它的模板,并与你的值一起生成经典的 Kubernetes YAML 文件/清单,然后将其发送到你的 Kubernetes 。
以下是一个这种模板文件的小片段(用于 Deployment 清单),包括一些占位符:
apiVersion: apps/v1kind: Deploymentmetadata:name: {{ include "myChart.name" . }}labels:{{- include "myChart.labels" . | nindent 4 }}你可以将这些 chart 分享到仓库中 。并没有单一的默认 chart 仓库 。一个查找流行 chart 仓库的好地方是https://artifacthub.io/ 。
简而言之,使用 Helm 的工作流程如下:

  1. 安装 Helm 客户端
  2. 安装你喜欢的 chart - 第一部分
helm install my-release oci://registry-1.docker.io/bitnamicharts/wordpress这条命令会从流行的 bitnami chart 仓库安装 wordpress chart 到你的集群 , 最终结果是一个运行中的 WordPress 安装 。如果你想知道 OCI 是什么:你可以将 Helm charts 托管在支持Open Containers Initiative标准的容器 Registry 中(比如 Amazon ECR、Docker Hub、Artifactory 等) 。
  1. 安装你喜欢的 chart - 第二部分
由于几乎总是需要覆盖一些配置值(在 WordPress 的情况下 , 可以在这里查看参数的巨大列表),你会想要向安装命令提供你的具体值 。你可以通过一个命名为 values.yaml 的 YAML 文件传递值,或者直接使用命令行标志 。因此,安装命令可能会像这样:
helm install my-release oci://registry-1.docker.io/bitnamicharts/wordpress --values values.yaml// ORhelm install my-release oci://registry-1.docker.io/bitnamicharts/wordpress --set wordpressUsername=m4rc0 // etc...
  1. 注意:你还可以使用 helm 来升级你的安装 。可以升级到 chart 的新版本(考虑新的发布) , 或者通过helm upgrade命令升级安装的配置 。
如果你想深入了解 Helm,我强烈推荐你阅读《学习 Helm》一书 。
什么是 Kustomize?在前文中,你了解到 Helm 使用模板生成 Kubernetes 清单 。这意味着有人需要将 Kubernetes 清单制作成 Helm 模板 , 进行维护,然后作为最终用户,你可以使用 helm 命令行客户端来应用它们 。
Kustomize的开发人员选择了不同的路径:它允许你通过将额外的更改层叠在原始清单之上来创建清单的自定义版本 。因此 , 与其创建模板并在其中放置 "占位符",你最终会得到一个文件结构,例如:
├── deployment.yaml// your original Kubernetes manifest filef└── kustomization.yaml //// (in more relalistic scenarIOS, you'deven have 'overlays' subfolders for different environments, like development/staging/prod etc然后 , 你可以运行kustomize build,以便 Kustomize 应用你的覆盖层,并渲染最终的 YAML 结果,你可以直接输入kubectl命令(或直接运行kubectl apply -k) 。
kustomize build . | kubectl apply -f -如果你想了解 kustomization.yaml 文件需要如何结构化 , 可以查看这里 。
哪个更好:Helm 还是 Kustomize?我们都喜欢 Reddit 上的意见,尽管有争议:https://www.reddit.com/r/kubernetes/comments/w9xug9/helm_vs_kustomize/ 。
什么是 Terraform 以及与 Kubernetes 的区别是什么?感谢上帝,我们接近本指南的结束,我不必再在 Terraform 上花费另外一千字(提示:一如既往 , 你会在 Terraform 上找到很多书籍和学习资源),所以我会尽量简短:
Kubernetes 是关于容器编排的 。"让我告诉你我在这个 YAML 文件中想要的:为我运行我的容器!"


推荐阅读