【问题标题】:Naming gitRepo mount path in Kubernetes在 Kubernetes 中命名 gitRepo 挂载路径
【发布时间】:2015-10-09 17:39:50
【问题描述】:

在 Kubernetes 中使用 gitRepo 卷时,repo 会被克隆到 mountPath 目录中。对于以下 pod 规范,例如:

apiVersion: v1
kind: Pod
metadata:
  name: server
spec:
  containers:
  - image: nginx
    name: nginx
    volumeMounts:
    - mountPath: /usr/share/docroot
      name: docroot-volume
  volumes:
  - name: docroot-volume
    gitRepo:
      repository: "git@somewhere:me/my-git-repository.git"

该目录出现在 /usr/share/docroot/my-git-repository 的容器中。这意味着我的容器需要知道我的存储库名称。我不希望我的容器知道有关存储库名称的任何信息。它应该只知道有一个“docroot”,但是已经初始化了。 git 存储库名称应该出现的唯一位置是在 pod 规范中。

在 Kubernetes 中是否有指定 git repo 卷挂载的完整内部路径?

【问题讨论】:

    标签: kubernetes


    【解决方案1】:

    目前没有本地方法可以做到这一点,但我为您提交了issue

    Under the hood kuberetes 只是在 emptyDir 卷上执行 git clone $source,但由于源作为单个参数传递,因此无法指定目标名称。

    Fri, 09 Oct 2015 18:35:01 -0700 Fri, 09 Oct 2015 18:49:52 -0700 90  {kubelet stclair-minion-nwpu}       FailedSync  Error syncing pod, skipping: failed to exec 'git clone https://github.com/kubernetes/kubernetes.git k8s': Cloning into 'kubernetes.git k8s'...
    error: The requested URL returned error: 400 while accessing https://github.com/kubernetes/kubernetes.git k8s/info/refs
    fatal: HTTP request failed
    : exit status 128
    

    与此同时,我可以想到 2 个选项来避免对存储库名称的依赖:

    1. environment variable 的形式提供存储库名称,然后您可以从容器中使用它
    2. 在继续之前修改您的 containers command 以将存储库移动到所需位置

    【讨论】:

    • 谢谢。我更喜欢第二种方法,因为这会使图像不知道如何插入数据。这确实意味着我必须找出容器的现有命令并将其复制到我自己的命令中。拥有一个“pod 初始化器”容器会很方便,该容器将在 pod 初始化和 pod 的常规容器之间运行一次,以处理所有必需的初始化(例如权限修复等)。实际上,初始化器数组会更好。
    • 我相信您要的是“预启动挂钩”,描述为here。不幸的是,挂钩正在进行中,预启动挂钩尚未实现。
    猜你喜欢
    • 2017-07-21
    • 2020-09-15
    • 2020-02-25
    • 1970-01-01
    • 1970-01-01
    • 2020-07-24
    • 1970-01-01
    • 2021-04-11
    • 1970-01-01
    相关资源
    最近更新 更多