2017-05-22 3 views
0

Ich versuche den init Container zu verwenden, um einige Dateien vorzubereiten, bevor der Hauptcontainer startet. Im Init-Container möchte ich ein hostPath Volume mounten, damit ich einige Dateien für den Hauptcontainer vorbereiten kann.kubernetes: mounten von Volumes aus dem init Container

Mein Cluster wird mit pre Version 1.6 von Kubernetes, damit ich die meta.annotation Syntax bin mit:

pod.beta.kubernetes.io/init-containers: '[ 
    { 
     "name": "init-myservice", 
     "image": "busybox", 
     "command": ["sh", "-c", "mkdir /tmp/jack/ && touch cd /tmp/jack && touch a b c"], 
     "volumeMounts": [{ 
      "mountPath": "/tmp/jack", 
      "name": "confdir" 
     }] 
    } 
]' 

Aber es scheint nicht zu funktionieren. Der Zusatz volumeMounts bewirkt, dass der Container init-myserver in CrashLoop geht. Ohne es wird der Pod erfolgreich erstellt, aber es erreicht nicht, was ich will.

Ist es in < 1.5 nicht möglich, Datenträger in Init-Container zu mounten? Was ist mit 1,6+?

Antwort

1

Sie müssen hostPath Volume nicht machen, um Daten zu teilen, die von init-container mit den Containern von Pod generiert werden. Sie können emptyDir verwenden, um dasselbe Ergebnis zu erzielen. Der Vorteil der Verwendung von emptyDir besteht darin, dass Sie auf dem Host nichts tun müssen, und dies funktioniert auf jeder Art von Cluster, auch wenn Sie keinen Zugriff auf Knoten in diesem Cluster haben.

Eine weitere Reihe von Problemen mit der Verwendung von hostPath ist die Einstellung der richtigen Berechtigungen für diesen Ordner auf dem Host, auch wenn Sie eine SELinux-fähige Distribution verwenden, müssen Sie den richtigen Kontext für dieses Verzeichnis einrichten.

apiVersion: v1 
kind: Pod 
metadata: 
    name: init 
    labels: 
    app: init 
    annotations: 
    pod.beta.kubernetes.io/init-containers: '[ 
     { 
      "name": "download", 
      "image": "axeclbr/git", 
      "command": [ 
       "git", 
       "clone", 
       "https://github.com/mdn/beginner-html-site-scripted", 
       "/var/lib/data" 
      ], 
      "volumeMounts": [ 
       { 
        "mountPath": "/var/lib/data", 
        "name": "git" 
       } 
      ] 
     } 
    ]' 
spec: 
    containers: 
    - name: run 
    image: docker.io/centos/httpd 
    ports: 
     - containerPort: 80 
    volumeMounts: 
    - mountPath: /var/www/html 
     name: git 
    volumes: 
    - emptyDir: {} 
    name: git 

Kasse des obige Beispiel, wo der init-Behälter und der Behälter in der Hülse gleiches Volumen git genannt teilen. Und die Art des Volumens ist emptyDir. Ich möchte nur, dass der init-Container die Daten jedes Mal abruft, wenn dieser Pod auftaucht, und dann wird er aus dem Container httpd von pod bereitgestellt.

HTH.

Verwandte Themen