Docker nella distribuzione di Kubernetes


13

Sto utilizzando una libreria di terze parti che crea contenitori docker di pari livello tramite:

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

Sto cercando di creare una distribuzione Kubernetes dal contenitore sopra, ma attualmente sto ottenendo:

Impossibile connettersi al demone Docker su unix: ///var/run/docker.sock. Il daemon docker è in esecuzione?

Ciò è previsto perché non sto dichiarando /var/run/docker.sockun volume nello yaml di distribuzione.

Il problema è che non so come fare. È possibile montare /var/run/docker.sockcome volume in uno yaml di distribuzione?

In caso contrario, qual è l'approccio migliore per eseguire i contenitori di pari livello docker all'interno di una distribuzione / pod Kubernetes?

Risposte:


19

Non verificato in quanto mi sembra fragile avviare un container al di fuori della supervisione di k8s, ma dovresti essere in grado di montare /var/run/docker.sockcon un volume hostPath .

Esempio di variazione dalla documentazione:

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

Penso che un montaggio semplice dovrebbe essere sufficiente per consentire la comunicazione dal client docker all'interno del contenitore al demone docker sull'host ma nel caso in cui si ottenga un errore di autorizzazione in scrittura significa che è necessario eseguire il contenitore come contenitore privilegiato utilizzando un oggetto securityContext come tale (solo un estratto dall'alto per mostrare l'aggiunta, i valori presi dalla documentazione ):

spec:
  containers:
  - image: gcr.io/google_containers/test-webserver
    securityContext:
      privileged: true
    name: test-container

Questo ha funzionato, grazie. Sì, è uno strumento di terze parti, quindi non è l'ideale. Ma almeno voglio che il contenitore principale in Kubernetes lo renda più affidabile. Il contenitore accelera i contenitori temporanei con i browser per il test dell'interfaccia utente di automazione, quindi il contenitore del browser viene distrutto.
rys,

@rys sì, è stato un caso a cui avevo pensato, potresti comunque riscontrare problemi se il carico del nodo aumenta troppo poiché i k8 possono spostare il tuo contenitore 'launcher'. Ma suppongo che il fallimento della suite di test sia qualcosa di accettabile in questo caso
Tensibai,

2

Sebbene questa sia una soluzione funzionante (la uso da sola), ci sono alcuni svantaggi per l'esecuzione di Docker in un pod Kubernetes montando /var/run/docker.sock

Principalmente il fatto che lavori con container Docker al di fuori del controllo di Kubernetes.

Un'altra soluzione suggerita che ho trovato è l'utilizzo di un container per auto laterali nel tuo pod. Vedi A Case for Docker-in-Docker su Kubernetes . Ci sono due parti in cui la soluzione proposta è nella parte 2 .

Spero che questo possa essere d'aiuto.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.