首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Initcontainer vs Helm Hook安装后

Initcontainer vs Helm Hook安装后
EN

Stack Overflow用户
提问于 2020-07-22 17:05:27
回答 3查看 1.3K关注 0票数 1

Helm Hooks post-install和Kubernetes initcontainers有什么不同?我所理解的是,Hooks用于在Pod生命周期的不同阶段定义一些操作,在这种情况下-安装后,而initcontainers则允许在将容器部署到Pod之前对其进行初始化。

据我所知,post-install和initcontainer允许做同样的事情,即初始化数据库。

对吗?哪种方法更好?

EN

回答 3

Stack Overflow用户

发布于 2020-07-22 19:34:14

对于数据库设置,我更喜欢Helm钩子,但即使这样也有一些微妙之处。

假设您的服务作为部署与replicas: 3一起运行,以获得一点冗余。如果在pod规范中指定了init容器,那么这些副本中的每一个都将运行init容器,而不需要任何类型的同步。如果其中一个pod崩溃,或者它的节点出现故障,它的替换将再次运行init容器。对于您正在讨论的这类设置任务,您不会想要经常重复它。

这里的根本区别在于Helm钩子是一个单独的Kubernetes对象,通常是Job。您可以安排此作业在每个helm upgrade上仅运行一次,而不是在其他时间运行,这使得它成为运行迁移等操作的合理位置。

这里一个重要的微妙之处在于,您可以同时运行一个服务的多个版本。使用replicas: 3进行前面的部署,然后使用helm upgrade --set tag=something-newer。部署控制器将首先使用新的映像启动一个新的pod,只有当它启动并运行时,它才会拆除一个旧的pod,现在您有了两个版本。如果你用helm rollback连接到一个旧版本,也会发生类似的事情。这意味着您需要对不完全具有正确模式的数据库有一定的容忍度。

如果该作业更像是预加载一些初始数据的“种子”作业,则更容易管理:在安装后钩子中执行,您希望该钩子永远只运行一次。您不需要在每次升级(作为升级后挂钩)或每次pod启动(作为init容器)时重复它。

票数 4
EN

Stack Overflow用户

发布于 2020-07-22 17:13:29

Helm、install hook和initcontainer基本上都是different.Install钩子,在helm中创建一个完全独立的pod,这意味着pod不能直接使用localhost访问主pod,或者它们不能使用相同的卷、挂载等,而initcontainer可以这样做。

与helm pre挂钩相当的Init容器在方式上是有限的,因为它只能在主pod启动之前执行初始任务,而不能执行在pod启动后需要执行的任何任务,例如任何清理活动。

DB等的初始化需要在实际的容器启动之前完成,我认为initcontainer对于这个用例来说已经足够了,但是也可以使用helm预安装钩子。

票数 2
EN

Stack Overflow用户

发布于 2020-07-22 17:29:13

你需要使用post钩子,因为首先你必须创建一个db pod,然后初始化db。您将注意到,在db pod开始运行之后,post挂钩的pod出现了。post hook pod将在执行钩子后移除。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63030663

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档