如何通过k8s提供持久的ubuntu env

我可以通过docker提供一个ssh的ubuntu,用户可以设置他们的env。 例如,他apt-get安装了一些东西并修改了他的bashrc,vimrc等等。 一旦我重新启动这台计算机,用户在重新启动完成后仍然具有相同的env。

我怎样才能提供k8s相同的服务? 一旦我重新启动节点,它将在其他计算机上创build另一个窗格。 但是env是基于init映像的,而不是来自用户的最新env。

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

@Saket是正确的。

如果docker集装箱需要保持其状态(在这种情况下,用户改变容器内的东西),那么该状态必须保存在某个地方…你如何使用虚拟机来做到这一点? 答:保存到磁盘。

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

总结…不寻常的在一个容器中运行SSH。 你有没有考虑给每个用户自己的k8s环境呢? 例如, Openshift是多租户的。 确实Redhat正在将Openshift作为Eclipse Che的后端,从而在K8上运行整个IDE。 看到:

https://openshift.io/

我build议你使用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环境variables

Configmaps也允许你存储脚本,所以你可以有一个.bashrc(或一个部分)存储在一个confipmap。