关于如何使用 Helm 和 Kubernetes 设置个人服务的建议

Advises about how to personal services setup with Helm and Kubernetes

这与其说是一个具体的技术问题,不如说是一个建议。

我进行了一些搜索,但很难找到完全相同的问题。如果您认为这是另一个问题的重复,请给我一些链接! :-)

上下文

和许多开发人员一样(我猜),我有一个 "Ali Baba's cave" 服务器托管我的博客和多项服务:GitLab、Minio、我的自由帐户的计费系统等...

所有服务都根据我的可能性使用不同的方式在 Ubuntu 服务器上设置:apt-get install、tar 个人项目的提取或 Capistrano 部署。

这是有效的,但对我来说是一个维护地狱。某些项目无法升级,因为系统依赖项与另一个系统依赖项冲突,或者根本无法在我的 OS 上使用,或者更新可能对某些项目产生副作用。例如,我个人项目所需的 PHP 升级完全破坏了手动安装的 PHP 服务,因为不支持新版本。

需求

我目前正在学习 Kubernetes 和 Helm 图表。目标是设置一个新的 CoreOS 服务器和一个 Kubernetes 生态系统,其中包含我所有的应用程序和项目。

有了它,我将能够:

如何使用 Helm?

我做了一个测试,用helm create my-network创建了一个基本图表,创建了一个基本的nginx应用程序,非常适合添加我的网络主页!

但现在我想添加和连接一些应用程序,让我们tart 与 Gitlab

我找到了两种添加方式:

  1. 只需 运行使用 yaml 值文件配置 运行 命令,在我自己的图表之外。
  2. 由于 requirements.yaml
  3. 添加 gitlab 作为依赖项

两者都有效,给我的结果几乎相同。

第一个解决方案似乎更 "independent" 但我真的不知道如何 build/test 它在 CI 下(我想要升级自动化)。

第二个允许我用一个 values.yaml 文件配置所有,但我不知道它在升级过程中做了什么(gitlab [=82 的升级过程是=] 在我的图表升级期间?)并且全部合并到一个 "project".

GitLab 是一个示例,但我想通过这种方式添加更多 "ready-to-use" 应用程序。

你对我有什么建议?解决方案 1 或 2?对于这两种解决方案,我真正应该注意什么,尤其是 upgrade/backup?

如果您有完全不同的第三种解决方案建议使用 Helm,请随意! :-)

谢谢

我的经验通常是为每个 piece/service 使用单独的 helm install 更好。如果这些服务具有依赖性(“微服务 X 需要 Redis 缓存”),那么将这些内容放入 requirements.yaml 文件中是很好的选择。

一个大的“图表图表”遇到了几个问题:

  • Helm 将扁平化依赖关系,因此如果服务 X 需要 Redis 而服务 Y 也需要 Redis,图表设置将安装一个 Redis 并让它共享;但实际上这往往不是你想要的。

  • 将“共享”配置与“按服务”配置分开有点奇怪。对于单独的图表,您可以使用 helm install -f 两次来提供两个单独的值文件,但在图表的图表中,很难拥有一组真正的全局设置以及一组每个组件的设置而不复制所有内容。

  • 有一个标准的命名约定,其中包含 Helm helm install --name 和特定组件名称。如果它是 service-x-redis 这看起来很正常,如果它是 service-x-service-x 就有点奇怪,如果你有一个全球发布名称 the-world-service-x.

  • 就有点奇怪
  • 可能有充分的理由想要启动某项内容的多个独立副本,或者只测试一项特定服务的部署脚本,如果您的唯一部署是“绝对一切”,那就更难了.

对于您的用例,您还可以考虑非Docker 系统管理工具(Ansible、Chef、Salt Stack)是否可以在不完全重建系统架构的情况下重现您现有的手动部署; Kubernetes 非常令人兴奋,但旧方法也很有效。