kubernetes如何检测docker守护进程

时间:2018-03-18 08:00:25

标签: docker kubernetes

我正在使用coreos构造沙箱。我的deployment.yaml文件包含应该检测通过kubernetes在主机上运行的docker守护程序的容器。 容器使用docker守护程序来识别docker事件。由于某种原因,没有检测到docker守护程序。

deployment.yaml

containers: 
  - name: idn-docker
    image: sample/id-docker:latest
      - name: docker-socket
        mountpath: /var/run/docker.sock

有些人可以帮我确定问题所在。

2 个答案:

答案 0 :(得分:0)

对于在Docker中运行Docker,您有两个选项 - DooD(Docker中的Docker)和DinD(Docker中的Docker)。我认为你需要第一个,因为你需要访问主机上的事件。

关于这两种方案,这是一个很好的article

pod的配置示例:

apiVersion: v1 
kind: Pod 
metadata: 
  name: idn-docker 
spec: 
  containers: 
  - name: idn-docker
    image: sample/id-docker:latest
    volumeMounts: 
      - mountPath: /var/run 
        name: docker-sock 
volumes: 
  - name: docker-sock 
    hostPath: 
        path: /var/run 

您可以使用部署中示例中的containers部分,因为template部分中的结构与单独的pod配置相同,就是Pod模板。

但是,请记住,该解决方案会有一些限制:

  

Pod网络 - 无法使用Pod IP访问容器。

     

Pod生命周期 - 在Pod终止时,此容器将继续运行,尤其是在使用-d标志启动容器时。

     

Pod清理 - 在pod终止后,图形存储将不会被清理。

     

调度和资源利用 - Pod请求的Cpu和内存仅适用于Pod,而不适用于从Pod生成的容器。此外,生成容器不会继承对Pod的CPU和内存设置的限制。

答案 1 :(得分:0)

保护Docker Socket

Why we don't let non-root users run Docker in CentOS, Fedora, or RHEL中一样,CoreOS默认情况下没有docker组,并试图通过限制对root的访问来保护对docker socket的访问。

默认情况下,作为Docker容器进程的Kuberneses pod不会以root用户身份运行,而SELinux标签也会阻止pod /容器访问docker socket。使用ps -Z检查pod进程,使用ls -Z检查docker socket以验证标签。

允许从容器访问Docker套接字存在安全风险,但如果由于某种原因必须这样做,则一种方法是使用安全上下文将pod作为特权运行,并使pod进程以root身份运行(有风险)。

    securityContext:
      privileged: true

不确定是否使用构造,但默认情况下OpenShift会阻止使用hostPath mount和tectonic可能有相似之处。另一个问题是用于pod的服务帐户以及帐户的角色/绑定。