我可以通过docker提供带有ssh的ubuntu,用户可以设置他们的env。 例如,他apt-get安装一些东西并修改他的bashrc,vimrc等等。 一旦我重新启动这台计算机,用户在重新启动后仍然具有相同的环境。
如何通过k8s提供相同的服务? 一旦我重新启动节点,它将在其他计算机上创建另一个pod。 但是env基于init映像,而不是用户的最新环境。
天真的方式,将所有卷安装在共享存储(PV + PVC)上。例如/ bin / lib / opt / usr / etc / lib64 / root / var / home等(每个可能的目录都可能受到任何安装的影响)。最佳做法或其他方式是什么?
答案 0 :(得分:1)
@Saket是正确的。
如果docker容器需要保持其状态(在这种情况下,用户更改容器内的某些内容),那么该状态必须保存在某个地方......如何使用VM执行此操作?答:保存到磁盘。
在k8s中,存储被表示为持久卷。称为PVC(持久性卷声明)的东西用于维护POD(您的代码)与实际存储卷(其抽象的实现细节)之间的关系。最新版本的k8s支持动态创建持久卷,因此您需要做的就是在部署容器时创建一个特定于每个用户的唯一PVC(我假设您有一个"部署"和& #34;服务"对每个用户而言。)
总之......在容器中运行SSH是不寻常的。您是否考虑过为每个用户提供自己的k8s环境?例如,Openshift是多租户。事实上,Redhat正在将Openshift集成为Eclipse Che的后端,从而在k8上运行整个IDE。参见:
答案 1 :(得分:0)
我建议你使用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中。