【问题标题】:How to provide a persistent ubuntu env by k8s如何通过 k8s 提供持久的 ubuntu env
【发布时间】:2017-07-28 13:32:04
【问题描述】:

我可以通过 docker 提供一个带有 ssh 的 ubuntu,用户可以设置他们的环境。 比如他apt-get install了一些东西,修改了他的bashrc、vimrc等等。 一旦我重新启动这台计算机,重新启动完成后用户仍然拥有相同的环境。

如何通过 k8s 提供相同的服务? 一旦我重新启动节点,它将在其他计算机上创建另一个 pod。 但是 env 是基于 init 映像的,而不是来自用户的最新 env。

天真的方式,将所有卷挂载到共享存储(PV + PVC)上。例如 /bin /lib /opt /usr /etc /lib64 /root /var /home 等等(每个可能的目录都可能受到任何安装的影响)。最佳做法或其他方法是什么?

【问题讨论】:

标签: docker kubernetes


【解决方案1】:

@Saket 是正确的。

如果 docker 容器需要保持其状态(在这种情况下,用户更改了容器内的某些内容),那么该状态必须保存在某处……您将如何使用虚拟机来做到这一点?答:存盘。

在 k8s 中,存储被表示为一个持久化卷。称为 PVC(持久卷声明)的东西用于维护 POD(您的代码)和实际存储卷(您从中抽象出其实现细节)之间的关系。最新版本的 k8s 支持动态创建持久化卷,所以你所要做的就是为每个用户创建一个唯一的 PVC,在部署他们的容器时(我假设你在这里为每个用户都有一个“部署”和“服务”以及)。

总之……在容器中运行 SSH 是不寻常的。您是否考虑过给每个用户自己的 k8s 环境?例如Openshift 是多租户的。事实上,Redhat 正在将 Openshift 集成为 Eclipse Che 的后端,从而在 k8s 上运行整个 IDE。见:

https://openshift.io/

【讨论】:

  • 我将看看 OpenShift 和 Eclipse Che。谢谢。
【解决方案2】:

我建议您使用 ConfigMaps (https://github.com/kubernetes/kubernetes/blob/master/docs/design/configmap.md)。本指南应该有助于您尝试做的事情:https://kubernetes.io/docs/tasks/configure-pod-container/configure-pod-configmap/#configure-all-key-value-pairs-in-a-configmap-as-pod-environment-variables

Configmaps 还允许您存储脚本,因此您可以将 .bashrc(或部分)存储在 confipmap 中。

【讨论】:

  • 我不想保留键值对。用户可以更改他的 .bashrc 和 apt install 等。我希望他可以在节点重启后保留这些设置。
  • 您还可以将脚本存储在配置映射中。这对你的情况有用吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-06-09
  • 1970-01-01
  • 2019-12-23
  • 1970-01-01
  • 2013-07-17
  • 1970-01-01
  • 2018-06-16
相关资源
最近更新 更多