有人可以向我解释头盔的一些用例吗?

时间:2019-07-21 22:19:45

标签: kubernetes kubernetes-helm

我目前正在使用kubernetes,遇到了掌舵人。 假设我不喜欢用与我的应用程序无关的进程来“感染”我的kubernetes集群,但是如果它可以带来好处,我会很乐意接受。

因此,我做了一些研究,但仍然无法通过使用yaml描述符和kubectl找到我无法轻松完成的任何事情,因此,除了可能用于环保之外,目前我找不到任何用途。

例如(取自我阅读的指南:

  1. 您可以轻松安装应用程序,例如。 helm install nginx —>将nginx映像添加到我的部署描述符中,完成
  2. 存储库->我有docker的存储库(我从中提取映像)
  3. 在发布失败的情况下,您可以轻松地掌控回滚->我只是在kubernetes描述符中将映像版本更改为上一个版本,简单

令我困扰的是,在命令级别,我几乎做了同样的工作(应用helm update-> kubectl)。 作为交换,由于保留了目录结构所需的内容,我有了很多样板,而且我感觉好像缺少了使用简单部署描述符提供的控件...我缺少了什么?

2 个答案:

答案 0 :(得分:1)

您的问题完全可以理解。对于小型且简单的部署,好处实际上并不是那么大。但是,当某事物的部署非常复杂时,Helm会有很大帮助。

认为您有几个为某家公司开发微服务的团队。如果您可以制作一个适用于大多数服务的图表,则每个微服务的部署将仅在映像和所需资源方面有所不同。通过这种方式,您可以获得标准化的部署,并且对所有开发人员都更容易。

另一个用例是部署需要大量活动部件的应用程序。例如,如果您想在Kubernetes上部署Grafana服务器,则可能至少需要一个Deployment和一个Configmap,那么您将需要与该部署匹配的服务。如果您想将其公开给互联网,那么您也需要一个入口。

一个相对简单的应用程序将需要4​​种不同的YAML,您需要手动配置它们并确保一切正确,而您可以做一个简单的helm install并重用某人已经完成的配置,有时甚至是公司创建应用程序的人。

还有很多其他用例,但是我认为这两个是最常见的用例。

答案 1 :(得分:1)

以下是Helm有用的三个建议:

  1. 您的连续部署系统有时会例行生成新版本,并希望将其发送到Kubernetes集群。您可以使用模板来指定部署中的映像名称和标签,并使用helm upgrade ... --set tag=201907211931来请求特定的标签。

  2. 您可能具有各种特定于服务的控件,例如日志级别或外部数据库主机名。 Helm值机制提供了一种统一的方式来指定它们,而无需了解Kubernetes YAML文件的详细信息。

  3. 这里有a repository of pre-packaged application charts,因此,如果您要使用集群内持久性存储复制PostgreSQL,则已经为您构建了该副本,您可以依靠它,而不必弄清楚StatefulSets和PersistentVolume声明自己。

您可以通过有趣(且可能很复杂)的方式将它们组合在一起:例如,使用集群内数据库进行开发人员测试,而使用云托管和备份数据库进行生产,并根据以下信息计算数据库主机名:提供什么设置组合。

当然,还有其他方法可以完成所有这些事情。特别是Kustomize可以相当直接地更改图像值,并且值得注意的是,自Kubernetes 1.14起,kubectl工具中已包含该图像值(另请参见Kubernetes文档中的Declarative Management of Kubernetes Objects Using Kustomize)。 “操作员”模式提供了在群集中安装software的备用路径,但是与Helm相比,您更信任具有API访问权限的任意程序。