我正在运行一些共享相同基本映像的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
我很确定这会转化为多个配置图,例如
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
无论如何,在决定是否在单个部署中包含多个容器时,我应该考虑哪些事情?我采取的方法是否存在缺点?
答案 0 :(得分:0)
在我看来,每个客户端的单独部署绝对是这种情况下的方式。
答案 1 :(得分:0)
您可以使用configMap填充环境变量的值,并在您的pod定义中引用它。你的方法很好。
关于在pod中部署多个容器,它取决于容器之间的相互依赖程度。关于How Pods manage multiple Containers,Kubernetes文档写得很好。
请注意,如果您想将容器耦合到一个容器中,我建议您使用Kubernetes Deployments对象来集体利用ReplicaSet和pod。