类似容器的多个部署或单个部署

时间:2017-10-23 01:16:22

标签: kubernetes

我正在运行一些共享相同基本映像的Docker容器,但值略有不同 对于几个环境变量(以及一些共享值)。我的设置看起来像这样:

# Run 2 containers for client 123
docker run --net=host -e CLIENT_ID=123 -e LOCATION=A -e SHARED_VALUE=ONE -ti myregistry.com/app:0.1.0
docker run --net=host -e CLIENT_ID=123 -e LOCATION=A -e SHARED_VALUE=ONE -ti myregistry.com/app:0.1.0

# Run 2 containers for client 456
docker run --net=host -e CLIENT_ID=456 -e LOCATION=B  -e SHARED_VALUE=ONE -ti myregistry.com/app:0.1.0
docker run --net=host -e CLIENT_ID=456 -e LOCATION=B  -e SHARED_VALUE=ONE -ti myregistry.com/app:0.1.0

... etc

我很确定这会转化为多个配置图,例如

configmaps

1)

# config map for the first set containers
apiVersion: v1
kind: ConfigMap
metadata:
  name: config-1
  namespace: default
data:
  CLIENT_ID: 123
  LOCATION: A

2)

# config map for the second set of containers
apiVersion: v1
kind: ConfigMap
metadata:
  name: config-2
  namespace: default
data:
  CLIENT_ID: 456
  LOCATION: B

3)

# shared configmap
apiVersion: v1
kind: ConfigMap
metadata:
  name: config-shared
  namespace: default
data:
  SHARED_VALUE=ONE

但我不确定的是,我是否应该为这些稍微不同的容器集创建单独的部署,或者我是否应该在单个部署中包含这两组容器。我倾向于将这些组合成一个单独的部署:

apiVersion: v1
kind: Pod
metadata:
  name: test-pod
spec:
  containers:

    - name: container-1
      ...
      env:
        - name: CLIENT_ID
          valueFrom:
            configMapKeyRef:
              name: config-1
              key: CLIENT_ID
        - name: LOCATION
          valueFrom:
            configMapKeyRef:
              name: config-1
              key: LOCATION
        - name: SHARED_VALUE
          valueFrom:
            configMapKeyRef:
              name: config-shared
              key: SHARED_VALUE


    - name: container-2
      ...
      env:
        - name: CLIENT_ID
          valueFrom:
            configMapKeyRef:
              name: config-2
              key: CLIENT_ID
        - name: LOCATION
          valueFrom:
            configMapKeyRef:
              name: config-2
              key: LOCATION
        - name: SHARED_VALUE
          valueFrom:
            configMapKeyRef:
              name: config-shared
              key: SHARED_VALUE

无论如何,在决定是否在单个部署中包含多个容器时,我应该考虑哪些事情?我采取的方法是否存在缺点?

2 个答案:

答案 0 :(得分:0)

在我看来,每个客户端的单独部署绝对是这种情况下的方式。

答案 1 :(得分:0)

您可以使用configMap填充环境变量的值,并在您的pod定义中引用它。你的方法很好。

关于在pod中部署多个容器,它取决于容器之间的相互依赖程度。关于How Pods manage multiple Containers,Kubernetes文档写得很好。

请注意,如果您想将容器耦合到一个容器中,我建议您使用Kubernetes Deployments对象来集体利用ReplicaSet和pod。