Docker Dalam Penyebaran Kubernetes

13

Saya menggunakan perpustakaan pihak ketiga yang membuat wadah buruh pelabuhan via:

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

Saya mencoba membuat penyebaran Kubernet dari wadah di atas, tetapi saat ini mendapatkan:

Tidak dapat terhubung ke daemon Docker di unix: ///var/run/docker.sock. Apakah daemon buruh pelabuhan berjalan?

Ini diharapkan karena saya tidak mendeklarasikan /var/run/docker.socksebagai volume dalam penerapan yaml.

Masalahnya adalah saya tidak tahu bagaimana melakukan ini. Apakah mungkin untuk memasang /var/run/docker.socksebagai volume di yaml penyebaran?

Jika tidak, apa pendekatan terbaik untuk menjalankan docker sibling-container dari dalam penyebaran / pod Kubernetes?

rys
sumber

Jawaban:

19

Tidak terverifikasi karena terdengar rapuh bagi saya untuk memulai wadah di luar pengawasan k8s, tetapi Anda harus dapat me /var/run/docker.sock- mount dengan volume hostPath .

Variasi contoh dari dokumentasi:

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

Saya pikir mount sederhana harus cukup untuk memungkinkan komunikasi dari buruh pelabuhan dalam wadah untuk buruh pelabuhan daemon pada host tetapi jika Anda mendapatkan kesalahan izin menulis itu berarti Anda perlu menjalankan wadah Anda sebagai wadah istimewa menggunakan objek securityContext seperti (hanya ekstrak dari atas untuk menunjukkan tambahan, nilai yang diambil dari dokumentasi ):

spec:
  containers:
  - image: gcr.io/google_containers/test-webserver
    securityContext:
      privileged: true
    name: test-container
Tensibai
sumber
Ini berhasil, terima kasih. Ya itu adalah alat pihak ketiga sehingga tidak ideal. Tapi setidaknya saya ingin wadah utama di Kubernetes membuatnya lebih dapat diandalkan. Kontainer merampas wadah sementara dengan browser untuk pengujian UI otomatis, kemudian wadah browser dihancurkan.
rys
@ YA ya, itu adalah kasus yang saya pikirkan, Anda mungkin masih mengalami masalah jika beban simpul terlalu tinggi karena k8s dapat memindahkan wadah 'peluncur' Anda. Tapi saya berasumsi kegagalan test suite adalah sesuatu yang dapat diterima dalam kasus ini
Tensibai
2

Meskipun ini adalah solusi yang berfungsi (saya menggunakannya sendiri), ada beberapa kelemahan untuk menjalankan Docker di pod Kubernet dengan memasang /var/run/docker.sock

Sebagian besar fakta Anda bekerja dengan wadah Docker di luar kendali Kubernetes.

Solusi lain yang disarankan yang saya temukan adalah menggunakan wadah samping di pod Anda. Lihat Pelindung Docker-in-Docker di Kubernetes . Ada dua bagian di mana solusi yang diusulkan ada di bagian 2 .

Saya harap ini membantu.

Eldad Assis
sumber