Docker In Kubernetes Deployment

13

Korzystam z biblioteki innej firmy, która tworzy kontenery dokujące rodzeństwo poprzez:

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

Próbuję utworzyć wdrożenie Kubernetes z powyższego kontenera, ale obecnie otrzymuję:

Nie można połączyć się z demonem Docker w unix: ///var/run/docker.sock. Czy demon dokera działa?

Jest to oczekiwane, ponieważ nie deklaruję się /var/run/docker.sockjako wolumin w yaml wdrażania.

Problem w tym, że nie wiem jak to zrobić. Czy można zainstalować /var/run/docker.sockjako wolumin w yaml wdrażania?

Jeśli nie, jakie jest najlepsze podejście do uruchamiania kontenerów siostrzanych dokerów z poziomu wdrożenia / zasobnika Kubernetes?

rys
źródło

Odpowiedzi:

19

Niezweryfikowane, ponieważ dla mnie brzmi krucho, aby uruchomić kontener poza nadzorem k8s, ale powinieneś być w stanie zamontować /var/run/docker.sockz woluminem hostPath .

Przykładowa odmiana z dokumentacji:

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

Uważam, że wystarczy zwykłe podłączenie, aby umożliwić komunikację między klientem dokera w kontenerze a demonem dokera na hoście, ale w przypadku wystąpienia błędu uprawnień do zapisu oznacza to, że musisz uruchomić kontener jako uprzywilejowany kontener za pomocą obiektu securityContext takiego (tylko wyciąg z góry, aby pokazać dodanie, wartości zaczerpnięte z dokumentacji ):

spec:
  containers:
  - image: gcr.io/google_containers/test-webserver
    securityContext:
      privileged: true
    name: test-container
Tensibai
źródło
To działało, dzięki. Tak, jest to narzędzie innej firmy, więc nie jest idealne. Ale przynajmniej chcę, aby główny pojemnik w Kubernetes był bardziej niezawodny. Kontener wyświetla tymczasowe kontenery z przeglądarkami do testowania interfejsu automatyzacji, a następnie kontener przeglądarki zostaje zniszczony.
rys
@rys tak, to był przypadek, o którym myślałem, wciąż możesz napotykać problemy, jeśli obciążenie węzła wzrośnie zbyt wysoko, ponieważ k8s może przenieść kontener „launchera”. Ale zakładam, że awaria zestawu testowego jest w tym przypadku czymś do przyjęcia
Tensibai
2

Chociaż jest to działające rozwiązanie (sam go używam), istnieją pewne wady uruchamiania Dockera w kapsule Kubernetes poprzez zamontowanie /var/run/docker.sock

Głównie fakt, że pracujesz z kontenerami Docker poza kontrolą Kubernetes.

Innym sugerowanym rozwiązaniem, które znalazłem, jest użycie pojemnika z bocznym wózkiem w zasobniku. Zobacz A Case for Docker-in-Docker na Kubernetes . Istnieją dwie części, w których proponowane rozwiązanie znajduje się w części 2 .

Mam nadzieję, że to pomoże.

Eldad Assis
źródło