从kuberntes部署yaml运行容器时如何添加“ -v /var/run/docker.sock:/var/run/docker.sock”

时间:2019-06-05 14:04:30

标签: docker kubernetes

我正在设置一个将执行docker命令(docker ps等)的镜像的kubernetes部署。

我的Yaml如下所示:

kind: Deployment
apiVersion: apps/v1
metadata:
  name: discovery
  namespace: kube-system
  labels:
    discovery-app: kubernetes-discovery
spec:
  selector:
    matchLabels:
      discovery-app: kubernetes-discovery
  strategy:
    type: Recreate
  template:
    metadata:
      labels:
        discovery-app: kubernetes-discovery
    spec:
      containers:
      - image: docker:dind
        name: discover
        ports:
        - containerPort: 8080
          name: my-awesome-port
      imagePullSecrets:
        - name: regcred3
      volumes:
      - name: some-volume
        emptyDir: {}
      serviceAccountName: kubernetes-discovery

通常我将按以下方式运行docker容器:

docker run -v /var/run/docker.sock:/var/run/docker.sock docker:dind

现在,kuberntes yaml支持commandsargs,但由于某些原因不支持options

正确的做法是什么?

也许我应该配置一个卷,但是然后是volumeMount还是一个卷?

我是kubernetes的新手,所以对我来说正确的做法很重要。

谢谢

2 个答案:

答案 0 :(得分:2)

直接与Kubernetes中任何节点上的容器进行交互似乎是一个坏主意。 Kubernetes的重点是协调。如果您在Pod构造之外添加容器,那么Kubernetes将不会意识到在节点上运行的进程。这将影响资源分配。

还需要说直接与容器一起使用会绕过安全性。

答案 1 :(得分:1)

您要将卷添加到容器中。

spec:
  containers:
  - name: discover
    image: docker:dind
    volumeMounts:
    - name: dockersock
      mountPath: "/var/run/docker.sock"
  volumes:
  - name: dockersock
    hostPath:
      path: /var/run/docker.sock