2015-10-09 81 views
0

在Kubernetes中使用gitRepo卷时,会将repo克隆到mountPath目录中。对于下面的吊舱规范,例如:在Kubernetes中命名gitRepo安装路径

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: "[email protected]:me/my-git-repository.git" 

的目录出现在容器中的/ usr /共享/文档根目录/我-混帐存储库。这意味着我的容器需要知道我的存储库名称。我不想让我的容器知道有关存储库名称的任何信息。它应该知道有一个“docroot”,但是已经初始化了。 git存储库名称应该出现的唯一位置在pod规范中。

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

回答

0

目前没有本地的方式来做到这一点,但我为您提交了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以在继续之前将存储库移至所需的位置
+0

谢谢。我更喜欢第二种方法,因为这会使图像无法识别数据的插入方式。这意味着我必须找出并将容器的现有命令复制到我自己的命令中。在pod初始化和pod的常规容器之间运行一次'pod initializer'容器以便管理所有需要的初始化(例如权限修正等)将会很方便。实际上,一系列初始化器会更好。 – Bradley

+0

我相信你所要求的是“预启动钩子”,在[这里]描述(http://kubernetes.io/v1.0/docs/user-guide/container-environment.html#hook-details )。不幸的是,钩子是一项正在进行中的工作,并且预启动钩子尚未实施。 –