当容器具有完全相同的生命周期,或者容器必须在同一节点上运行时。最常见的情况是,您需要在一个与主容器相同的节点上定位和管理一个助手进程。
将容器组合到单个容器中的另一个原因是容器中容器之间的通信更加简单。这些容器可以通过共享卷(写入共享文件或目录)和进程间通信(信号或共享内存)进行通信。
下面是一个共享存储卷范例
apiVersion: apps/v1
kind: Deployment
metadata:
name: duo-pod
labels:
appname: duo-pod
namespace: default
spec:
replicas: 1
selector:
matchLabels:
appname: duo-pod
template:
metadata:
labels:
appname: duo-pod
spec:
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: beta.kubernetes.io/arch
operator: In
values:
- amd64
containers:
- name: nginx
image: nginx
# 只有镜像存在时,才拉取
imagePullPolicy: IfNotPresent
ports:
- containerPort: 80
volumeMounts:
- mountPath: /usr/share/nginx/html
name: nginx-volume
- name: busybox
image: busybox
imagePullPolicy: IfNotPresent
volumeMounts:
- mountPath: /tmp
name: nginx-volume
command: ["/bin/sh", "-c"]
args:
- while true; do
date >> /tmp/index.html;
sleep 1;
done
restartPolicy: Always
volumes:
- name: nginx-volume
emptyDir: {}
注意:此例pod里要部署多个容器的话,必须有一个共享的存储卷,这个存储卷可以一个像范例中声明空的,或者是一个nfs或是pvc等,这个是必须有的,在第一个和第二个或是更多的容器里都要挂载当前容器的存在目录,像第一个容器是挂载nginx的家目录,第二个容器挂载到/tmp目录里(第二个容器无所谓哪个目录,只要是存在的就成),然后两个容器里都挂载到一个外部共享存储卷叫nginx-volume名称的这个存储卷即可,这样二个容器都可以读取到这个共享数据或是写入的。
上面的意思就是第二个容器每隔一秒把当前日期写入到/tmp/index.html文件里,第一个容器因为挂载目录也是该存储卷一样的名称里,所以你访问这个nginx的时候就是这个不同日期时间的内容文件里。
下面这个范例
apiVersion: v1
kind: Pod
metadata:
name: my-app
labels:
name: my-app
spec:
containers:
- name: tomcat
image: tomcat:1.0
ports:
- containerPort: 8080
- name: mysql
image: mysql:5.7
ports:
- containerPort: 3306
这个范例说明属于同一Pod的容器之间相互访问仅需通过localhost就可以访问
本文暂时没有评论,来添加一个吧(●'◡'●)