我有一个使用 Kubernetes 中的本地存储运行的数据库。每当我使用数据库启动 Pod 时,我想运行一个作业,它可以查看我们的备份并回填我们拥有的任何不在本地磁盘上的数据。
我正在查看 PostStart 生命周期钩子,但这只是让我从主容器运行命令,这将是提交此 Job 的一种非常 hacky 的方式。除了编写我自己的控制器之外,还有什么更好的方法吗?
我有一个使用 Kubernetes 中的本地存储运行的数据库。每当我使用数据库启动 Pod 时,我想运行一个作业,它可以查看我们的备份并回填我们拥有的任何不在本地磁盘上的数据。
我正在查看 PostStart 生命周期钩子,但这只是让我从主容器运行命令,这将是提交此 Job 的一种非常 hacky 的方式。除了编写我自己的控制器之外,还有什么更好的方法吗?
您可以使用与主容器安装在相同卷中的init 容器,用任何丢失的数据填充它,然后退出以便主容器可以启动。
如果您需要作业容器与主容器同时运行,则可以将上述容器作为第二个容器放入 Pod 中。
如果您需要创建一个实际的 kubernetes 作业,那么正如您所说,我认为唯一的选择是创建一个自定义控制器或运行一个 apiserver 客户端(例如kubectl
sidecar 容器),但您可以使用自动生成的 ServiceAccount 令牌安装到您的 Pod 以通过 apiserver 进行身份验证,然后只需将必要的 RBAC 规则应用于 ServiceAccount 以创建作业。您必须使用某种共享数据卷将相同的数据挂载到 Job 生成的 Pod 和主 Pod 中,以便共享数据(还有一些其他选项也是可能的)。