Докер в Куберне

13

Я использую стороннюю библиотеку, которая создает дочерние контейнеры Docker через:

docker run -d /var/run/docker.sock:/var/run/docker.sock ...

Я пытаюсь создать развертывание Kubernetes из вышеуказанного контейнера, но в настоящее время получаю:

Невозможно подключиться к демону Docker в unix: ///var/run/docker.sock. Работает ли демон Docker?

Это ожидается, потому что я не объявляю /var/run/docker.sockтом в развертывании yaml.

Проблема в том, что я не знаю, как это сделать. Можно ли монтировать /var/run/docker.sockкак том в развертывании yaml?

Если нет, каков наилучший подход к запуску дочерних контейнеров Docker из среды развертывания / модуля Kubernetes?

Рысь
источник

Ответы:

19

Мне непонятно, как хрупко мне запускать контейнер за пределами наблюдения k8s, но вы сможете смонтировать /var/run/docker.sockс томом hostPath .

Пример варианта из документации:

apiVersion: v1
kind: Pod
metadata:
  name: test-pd
spec:
  containers:
  - image: gcr.io/google_containers/test-webserver
    name: test-container
    volumeMounts:
    - mountPath: /var/run/docker.sock
      name: docker-sock-volume
  volumes:
  - name: docker-sock-volume
    hostPath:
      # location on host
      path: /var/run/docker.sock
      # this field is optional
      type: File

Я думаю, что простого монтирования должно быть достаточно, чтобы разрешить связь между клиентом докера в контейнере и демоном докера на хосте, но в случае, если вы получаете ошибку разрешения записи, это означает, что вам нужно запустить свой контейнер как привилегированный контейнер, используя объект securityContext, подобный такому (просто выписка сверху, чтобы показать дополнение, значения взяты из документации ):

spec:
  containers:
  - image: gcr.io/google_containers/test-webserver
    securityContext:
      privileged: true
    name: test-container
Tensibai
источник
Это сработало, спасибо. Да, это сторонний инструмент, поэтому он не идеален. Но я, по крайней мере, хочу, чтобы основной контейнер в Кубернетесе сделал его более надежным. Контейнер объединяет временные контейнеры с браузерами для автоматизации тестирования пользовательского интерфейса, затем контейнер браузера уничтожается.
Рысь
@rys Да, это был тот случай, о котором я думал, вы все равно можете столкнуться с проблемами, если нагрузка на узел будет слишком высокой, так как k8s может переместить ваш контейнер запуска. Но я предполагаю, что провал тестового набора является чем-то приемлемым в этом случае
Tensibai
2

Хотя это рабочее решение (я использую его сам), есть некоторые недостатки для запуска Docker в модуле Kubernetes путем монтирования /var/run/docker.sock

Главным образом тот факт, что вы работаете с контейнерами Docker вне контроля Kubernetes.

Другой предложил решение , которое я нашел использует бок автомобиля контейнер в вашем стручка. См . Дело о Докере-в-Докере в Кубернетесе . Есть две части, где предлагаемое решение находится в части 2 .

Надеюсь, это поможет.

Эльдад Ассис
источник