Kubernetes Dağıtımında Docker


13

Kardeş liman işçisi konteynırları oluşturan bir üçüncü taraf kitaplığı kullanıyorum:

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

Yukarıdaki kapsayıcıdan bir Kubernetes dağıtımı oluşturmaya çalışıyorum, ancak şu anda alıyorum:

Docker arka plan programına unix: ///var/run/docker.sock adresinden bağlanamıyor. Liman işçisi arka plan programı çalışıyor mu?

Bu /var/run/docker.sockdağıtım yaml bir birim olarak ilan değil çünkü bekleniyor .

Sorun şu ki, bunu nasıl yapacağımı bilmiyorum. O monte etmek mümkün mü /var/run/docker.sockbir dağıtım YAML bir hacim olarak?

Değilse, docker kardeş konteynırlarını bir Kubernetes dağıtımı / bölmesinden çalıştırmak için en iyi yaklaşım nedir?

Yanıtlar:


19

K8s denetimi dışında bir kapsayıcı başlatmak bana kırılgan geldiğinden doğrulanmadı, ancak /var/run/docker.sockbir hostPath birimi ile bağlanabilmeniz gerekir .

Belgelerden örnek varyasyon:

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

Basit bir bağlantının docker istemcisinden konteynerin içindeki docker arka plan programına iletişimine izin vermek için yeterli olması gerektiğini düşünüyorum, ancak bir yazma izni hatası alırsanız, konteynerinizi böyle bir securityContext nesnesi kullanarak ayrıcalıklı kapsayıcı olarak çalıştırmanız gerektiği anlamına gelir (sadece Eklemeyi göstermek için yukarıdan bir alıntı , belgelerden alınan değerler ):

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

Bu işe yaradı, teşekkürler. Evet bu üçüncü taraf bir araç, bu yüzden ideal değil. Ama en azından Kubernetes'teki ana kabı daha güvenilir hale getirmek istiyorum. Kapsayıcı, otomasyon UI testi için tarayıcılarla geçici kapsayıcıları hızlandırır, daha sonra tarayıcı kapsayıcısı imha edilir.
rys

@rys evet, düşündüğüm bir durumdu, eğer k8'ler 'başlatıcı' konteynerinizi taşıyabileceğinden düğüm yükü çok yükselirse yine de sorun yaşayabilirsiniz. Ancak test paketinin başarısızlığının bu durumda kabul edilebilir bir şey olduğunu varsayıyorum
Tensibai

2

Bu çalışan bir çözüm olmasına rağmen (kendim kullanıyorum), Docker'ı bir Kubernetes bölmesinde çalıştırmak için bazı dezavantajlar var /var/run/docker.sock

Çoğunlukla Kubernetes'in kontrolü dışında Docker konteynerleriyle çalışıyorsunuz.

Bulduğum bir başka önerilen çözüm , bölmenizde bir yan araba kabı kullanmaktır . Bkz . Kubernetes'teki Docker-in-Docker Örneği . Önerilen çözümün 2. bölümde olduğu iki bölüm vardır .

Umarım bu yardımcı olur.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.