Docker trong triển khai Kubernetes


13

Tôi đang sử dụng thư viện của bên thứ ba để tạo các container chứa anh chị em thông qua:

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

Tôi đang cố gắng tạo một triển khai Kubernetes từ vùng chứa trên, nhưng hiện đang nhận được:

Không thể kết nối với daemon Docker tại unix: ///var/run/docker.sock. Là daemon docker đang chạy?

Điều này được mong đợi bởi vì tôi không khai báo /var/run/docker.socklà một khối lượng trong yaml triển khai.

Vấn đề là tôi không biết làm thế nào để làm điều này. Có thể gắn kết /var/run/docker.socknhư một khối lượng trong một yaml triển khai?

Nếu không, cách tiếp cận tốt nhất để chạy các container anh chị em docker từ bên trong một triển khai / pod Kubernetes là gì?

Câu trả lời:


19

Không được xác minh vì nó nghe có vẻ dễ vỡ đối với tôi để bắt đầu một thùng chứa bên ngoài sự giám sát của k8s, nhưng bạn sẽ có thể gắn kết /var/run/docker.sockvới âm lượng hostPath .

Ví dụ biến thể từ tài liệu:

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

Tôi nghĩ rằng một mount đơn giản là đủ để cho phép giao tiếp từ máy khách docker trong container đến docker daemon trên máy chủ nhưng trong trường hợp bạn gặp lỗi về quyền ghi thì có nghĩa là bạn cần chạy container của mình dưới dạng container đặc quyền bằng cách sử dụng một đối tượng securityContext như vậy (chỉ một trích xuất từ ​​phía trên để hiển thị bổ sung, các giá trị được lấy từ tài liệu ):

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

Điều này đã làm việc, cảm ơn. Vâng, nó là một công cụ của bên thứ ba vì vậy nó không lý tưởng. Nhưng ít nhất tôi muốn thùng chứa chính trong Kubernetes làm cho nó đáng tin cậy hơn. Container chứa các container tạm thời với các trình duyệt để tự động kiểm tra UI, sau đó container của trình duyệt bị hủy.
rys

@ vâng, đó là một trường hợp tôi đã nghĩ đến, bạn vẫn có thể gặp sự cố nếu tải nút quá cao vì k8s có thể di chuyển container 'launcher' của bạn. Nhưng tôi cho rằng sự thất bại của bộ thử nghiệm là điều có thể chấp nhận được trong trường hợp này
Tensibai

2

Mặc dù đây là một giải pháp hoạt động (tôi tự sử dụng nó), nhưng có một số nhược điểm khi chạy Docker trong nhóm Kubernetes bằng cách gắn /var/run/docker.sock

Chủ yếu là thực tế bạn đang làm việc với các container Docker ngoài tầm kiểm soát của Kubernetes.

Một giải pháp đề nghị tôi tìm thấy là sử dụng một phụ xe container tại pod của bạn. Xem trường hợp cho Docker-in-Docker trên Kubernetes . Có hai phần trong đó giải pháp đề xuất nằm trong phần 2 .

Tôi hi vọng cái này giúp được.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.