Helm Hooks post-install和Kubernetes initcontainers有什么不同?我所理解的是,Hooks用于在Pod生命周期的不同阶段定义一些操作,在这种情况下-安装后,而initcontainers则允许在将容器部署到Pod之前对其进行初始化。
据我所知,post-install和initcontainer允许做同样的事情,即初始化数据库。
对吗?哪种方法更好?
发布于 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容器)时重复它。
发布于 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预安装钩子。
发布于 2020-07-22 17:29:13
你需要使用post钩子,因为首先你必须创建一个db pod,然后初始化db。您将注意到,在db pod开始运行之后,post挂钩的pod出现了。post hook pod将在执行钩子后移除。
https://stackoverflow.com/questions/63030663
复制相似问题