Docker在Kubernetes中的部署


13

我正在使用通过以下方式创建同级Docker容器的第三方库:

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

我正在尝试从上述容器中创建一个Kubernetes部署,但目前得到:

无法通过unix:///var/run/docker.sock连接到Docker守护程序。泊坞窗守护程序正在运行吗?

这是预期的,因为我没有/var/run/docker.sock在部署yaml中声明为卷。

问题是我不知道该怎么做。是否可以/var/run/docker.sock作为卷安装在部署Yaml中?

如果不是,从Kubernetes部署/容器中运行docker兄弟容器的最佳方法是什么?

Answers:


19

无法验证,因为在k8s监督之外启动容器听起来很脆弱,但是您应该可以/var/run/docker.sock使用hostPath卷挂载。

来自文档的示例变体:

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

我认为简单的安装应该足以允许从容器中的Docker客户端到主机上的docker守护进程的通信,但是如果遇到写入权限错误,则意味着您需要使用诸如以下这样的securityContext对象将容器作为特权容器运行上面的摘录,以显示附加值,值取自文档):

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

这行得通,谢谢。是的,它是第三方工具,因此并不理想。但是我至少希望Kubernetes中的主要容器使其更可靠。容器使用浏览器增加临时容器以进行自动化UI测试,然后销毁浏览器容器。
rys

@rys是的,这是我想到的一种情况,如果节点负载过高,因为k8s可能会移动“启动器”容器,您可能仍然会遇到问题。但是我认为在这种情况下测试套件的失败是可以接受的
Tensibai '17

2

尽管这是一个可行的解决方案(我自己使用过),但是通过挂载在Kubernetes pod中运行Docker有一些缺点。 /var/run/docker.sock

大多数情况下,您正在使用Kubernetes无法控制的Docker容器。

我发现的另一个建议的解决方案是在您的吊舱中使用侧面车厢。请参阅Kubernetes上的Docker-in-Docker案例。提议的解决方案在第2部分中分为两部分。

我希望这有帮助。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.