For*_*rin 4 kubernetes kubernetes-helm
Helm Hooks 安装后和 Kubernetes initcontainers 之间有什么区别?据我了解,Hooks 用于定义 Pod 生命周期不同阶段的一些操作,在这种情况下是安装后,而 initcontainers 则允许在部署到 Pod 之前初始化容器。
post-install
据我了解, initcontainer 允许做同样的事情,即初始化数据库。
那是对的吗?哪种方法更好?
对于数据库设置,我更喜欢 Helm hook,但即便如此,也有一些微妙之处。
假设您的服务作为部署运行replicas: 3
假设您的服务作为具有一点冗余的如果 pod 规范中指定了这些副本,则每个副本都将运行一个 init 容器,而无需任何类型的同步。如果其中一个 Pod 崩溃,或者其节点发生故障,替换它的节点将再次运行 init 容器。对于您正在谈论的那种设置任务,您不想经常重复它。
这里的根本区别在于 Helm hook 是一个单独的 Kubernetes 对象,通常是一个 Job。您可以安排此作业在每个作业上运行一次helm upgrade
而不在其他时间运行,这使其成为运行迁移等操作的合理场所。
这里一个重要的微妙之处是您可以同时运行一项服务的多个版本。使用前面的 Deployment replicas: 3
,然后使用helm upgrade --set tag=something-newer
。部署控制器将首先使用新映像启动一个新 Pod,只有在它启动并运行后才会拆除旧 Pod,现在两个版本都可以一起使用。类似的事情也会发生,如果你helm rollback
使用旧版本,也会发生类似的情况。这意味着您需要对不完全具有正确架构的数据库有一定的容忍度。
如果该作业更像是预加载一些初始数据的“种子”作业,则更容易管理:在安装后挂钩中执行此操作,您希望该挂钩仅运行一次。您不需要在每次升级(作为升级后挂钩)或每次 pod 启动(作为 init 容器)时重复它。
归档时间: |
|
查看次数: |
3433 次 |
最近记录: |