Можно ли определить объем, который можно использовать как в k8s, так и в докере? - PullRequest
0 голосов
/ 08 января 2019

Если я хочу запустить контейнер B внутри контейнера A (повторное использование демона Docker), я могу просто связать mount /var/run/docker.sock и /usr/bin/docker и с радостью вызвать docker run в A. Теперь я хотел бы разделить объем k8s между A и B. Для этого я подумал о создании тома emptyDir в A и передал его в B, используя docker run -v. Но это не работает, так как том emptyDir не является томом Docker (он не отображается при запуске docker volume ls).

Фрагмент ниже печатает список тома, где cache-volume не появляется:

apiVersion: v1
kind: Pod
metadata:
  name: test-pd
spec:
  containers:
  - image: alpine
    name: test-container
    command: [ash]
    args: ["-c", "docker volume ls"]
    volumeMounts:
    - name: dockersock
      mountPath: "/var/run/docker.sock"
    - name: dockerlib
      mountPath: "/usr/bin/docker"
    - name: cache-volume
      mountPath: /cache
  volumes:
  - name: dockersock
    hostPath:
      path: /var/run/docker.sock
  - name: dockerlib
    hostPath:
      path: /usr/bin/docker
  - name: cache-volume
    emptyDir: {}

Таким образом, вопрос заключается в следующем: есть ли способ определить том, пригодный для использования как в k8s, так и в докере?

1 Ответ

0 голосов
/ 08 января 2019

Для записи я нашел обходной путь, но если у вас есть лучшее предложение, пожалуйста, не стесняйтесь поделиться им.

Решение указанной выше проблемы заключается в монтировании каталога hostPath D и привязке монтирования этого каталога в контейнер B.

apiVersion: v1 kind: Pod metadata: name: test-pd3 spec: containers: - image: alpine name: test-container command: [ash] args: ["-c", "echo blabla > /home/test.txt ; docker run -v /home:/home --entrypoint ls alpine /home"] volumeMounts: - name: dockersock mountPath: "/var/run/docker.sock" - name: dockerlib mountPath: "/usr/bin/docker" - name: home mountPath: "/home" volumes: - name: dockersock hostPath: path: /var/run/docker.sock - name: dockerlib hostPath: path: /usr/bin/docker - name: home hostPath: path: /home

Результатом приведенного выше фрагмента является то, что B теперь имеет /home/test.txt, что мы и хотели.

...