微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用 `minikube start` 恢复 VM 时,如何防止 Minikube 重新部署?

如何解决使用 `minikube start` 恢复 VM 时,如何防止 Minikube 重新部署?

暂停和恢复我的虚拟机确实会破坏 k8s 部署

当我使用 minikube stop 暂停,然后使用 minikube start 恢复虚拟机时,Minikube 会从头开始重新部署我的应用。

我在高于 v1.18 的较新版本 Minikube 上看到了这种行为(我在 v1.19 上运行)。


设置:

  • Kubernetes 部署使用来自我的主机的源代码通过 hostPath 挂载一个卷。\
  • 我还有一个用于设置应用程序的 initContainers 容器。

由于新的“恢复时重新部署行为”发生,init-container中断我的部署,如果我的代码上有正在进行代码主机...

问题:

现在,如果我有临时/非完美运行的代码,我不能再在工作日之间暂停机器未完成的工作;因为每次我恢复它时 Minikube 都会尝试再次部署但代码损坏 并以 Init:CrashLoopBackOff 失败。

解决方法

现在,我每次恢复机器时都需要

  1. 隐藏/提交我的 WIP 代码
  2. 使用工作部署检查最后一次提交
  3. 运行部署并等待它完成初始化(分钟...)
  4. 结帐/隐藏在 1) 点保存的代码

我能活下来,但工作流程很糟糕。

如何恢复旧行为?

  • 如何让我的部署在挂起虚拟机时保持不变,而不是每次恢复时都重新部署?

解决方法

简而言之,有两种方法可以实现您想要的:

  • 在当前版本的 minikubevirtualbox 上,您可以直接在 Virtual box 中使用 save state 选项。
  • 将 initContianer 的代码移至单独的 job

关于 minikube + virtual box 的更多细节

我的环境有 minikube 版本 1.20、虚拟盒 6.1.22(从昨天开始)和 MacOS。 minikube 驱动程序也设置为 virtualbox

首先使用 minikube + VirtualBox。不同的场景:

minikube stop 执行以下操作:

停止本地 Kubernetes 集群。此命令停止底层 VM 或容器,但保持用户数据完整。

设置 minikube 的虚拟机完全停止。 minikube start 启动 VM 及其中的所有进程。所有容器也都已启动,因此如果您的 pod 有一个 init-container,它无论如何都会先运行。

minikube pause 暂停所有进程并释放 CPU 资源,同时仍将分配内存。 minikube unpause 带回 CPU 资源并从暂停时的状态继续执行容器。

根据我尝试使用 minikube 的不同场景,仅使用 minikube 命令是无法实现的。为避免由于主机重启或需要停止 VM 以获取更多资源而导致 minikube 环境中的任何状态丢失,您可以在 UI 或 cli 中使用 VirtualBox 中的 save state 功能。下面是它的作用:

VBoxManage controlvm savestate:将虚拟机的当前状态保存到磁盘,然后停止虚拟机。

虚拟框创建类似快照的东西,其中包含此快照中的所有内存内容。当虚拟机重新启动时,Virtual box 会将虚拟机的状态恢复到虚拟机保存时的状态。

另一个假设是,如果这在 v. 1.20 中以相同的方式工作 - 这是预期的行为而不是错误(否则它已经被修复了)

初始化容器和作业

您可以考虑将 init-container 的代码移到单独的 job 中,这样您就可以避免因意外 pod 重新启动和停止在主容器中部署而出现的任何问题。此外,建议使 init-container 的代码具有幂等性。 以下是官方文档中的引用:

因为init容器可以重新启动、重试或重新执行, init 容器代码应该是幂等的。特别是,代码 写入 EmptyDirs 上的文件应该为这种可能性做好准备 输出文件已经存在。

这可以通过在 Kubernetes 中使用 jobs 来实现,您可以在需要时手动运行它。 为确保遵循工作流程,您可以将数据卷上的 Job completion 或特定文件检查到部署的 pod init 容器,以指示代码正在运行,部署将没问题。

包含更多信息的链接:

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。