Kubernetes runAsUser 创建主目录

Kubernetes runAsUser create home directory

我的任务是让我们的 k8s 部署 运行 成为非 Root 用户。 我们使用的第 3 方库需要用户的主目录才能存在并具有写入权限。 我试过使用 initContainers 但我所做的任何更改基本上都被丢弃了,当然我对真正的容器没有权限

我想避免在 Dockerfile 中设置所有这些。有没有为用户 kubernetes 容器运行创建用户主目录?

Kubernetes 使用容器引擎 运行 具有特定图像的 pod。 大多数 Pods 随时可能死亡,因此它们必须基于具有所需状态的图像或以不同方式保存状态。

如果您想要保留某个状态并且无法使用 Dockerfile / 自定义映像,我建议您:

  1. 设置音量。 volume 挂载用户目录,这样文件就不会被删除,权限也会被保留。 https://kubernetes.io/docs/concepts/storage/volumes/#hostpath

  2. 运行 容器和边车。 创建一个具有 sidecar 容器的 pod,该容器可以 运行 在同一网络中执行命令,并且可以与主容器共享卷挂载。

即。也许您可以创建一个共享卷,然后创建一个将目录作为根目录的图像,并将该图像用于边车容器。 https://kubernetes.io/docs/tasks/access-application-cluster/communicate-containers-same-pod-shared-volume/#creating-a-pod-that-runs-two-containers

但是,最简单的解决方案可能是仅修改 Dockerfile 中的权限,例如通过向 Dockerfile 添加一些行。如果要向现有的 Dockerfile 添加行,请确保在 CMD / ENTRYPOINT

之前添加它们

如果您将此映像基于现有的映像,请确保将其放在 Dockerfile 的顶部

FROM Myoriginalimage

Dockerfile 命令:

USER root RUN chown $USER:$USER_GROUP -R $USER_HOME_DIR USER $USER 如果您正在编辑现有的 Dockerfile

,请确保您的 CMD/ENTRYPOINT 在此之后

有关 Dockerfile 的更多信息:https://www.linode.com/docs/applications/containers/how-to-use-dockerfiles/

之后你可以推送到一个注册表,比如 dockerhub,假设你没有私有注册表或者出于任何原因无法访问一个。

  • 在 hub.docker.com 创建一个帐户
  • 适当地标记您的图像
  • docker login
  • docker push your-image

详情请看这里: https://docs.docker.com/docker-hub/repos/