在 Kubernetes 中命名 gitRepo 挂载路径

Naming gitRepo mount path in Kubernetes

在 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 回购卷挂载的完整内部路径?

目前没有本地方法可以做到这一点,但我为您提交了 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

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

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