Использование докера сокета в Кубернетесе - PullRequest
0 голосов
/ 30 октября 2019

Я хочу обрезать образы докеров, я написал небольшой образ Docker с использованием node-docker-api и смог успешно его локально протестировать.
Поскольку я развернул DaemonSet вKubernetes, модуль не может получить доступ к сокету Docker:

Error: connect EACCES /var/run/docker.sock

deployment.yaml выглядит следующим образом:

apiVersion: extensions/v1beta1
kind: DaemonSet
metadata:
  labels:
    name: docker-image-cleanup
  name: docker-image-cleanup
spec:
  template:
    metadata:
      labels:
        app: docker-image-cleanup 
    spec:
      volumes:
        - name: docker-sock
          hostPath:
            path: "/var/run/docker.sock"
            type: File
        - name: docker-directory
          hostPath:
            path: "/var/lib/docker"

      containers:
        - name: docker-image-cleanup
          image: image:tag
          securityContext:
            privileged: true
          env:
            - name: PRUNE_INTERVAL_SECONDS
              value: "30"
            - name: PRUNE_DANGLING
              value: "true"
          volumeMounts:
            - mountPath: /var/run/docker.sock
              name: docker-sock
              readOnly: false
            - mountPath: "/var/lib/docker"
              name: docker-directory
              readOnly: false

Запуск AKS v1.13.10 - при необходимости

Ответы [ 2 ]

2 голосов
/ 30 октября 2019

Нет никакой гарантии, что ваш кластер kubernetes фактически использует docker в качестве механизма контейнера. Поскольку существует множество альтернатив, таких как контейнеры cri-o и kata, ваше приложение / развертывание не должно делать никаких предположений относительно базового механизма контейнеров.

Kubernetes позаботится об автоматической очистке неиспользуемых образов контейнеров. См. Документацию о том, как его настроить, если вы запускаете кластер самостоятельно: https://kubernetes.io/docs/concepts/cluster-administration/kubelet-garbage-collection/

Кроме того, похоже, что у вас есть простая проблема с разрешениями для сокета: убедитесь, что ваше приложение в контейнере очистки работает какroot или имеет соответствующего пользователя для доступа к сокету.

0 голосов
/ 30 октября 2019

Я добавил runAsUser: 0 к свойствам контейнера:

containers:
  - name: docker-image-cleanup
    image: image:tag
    securityContext:
      privileged: true
      runAsUser: 0

Теперь это работает

...