具有复制控制器的Kubernetes卷装入

findKubernetes EmptyDir卷的这个例子

apiVersion: v1 kind: Pod metadata: name: www spec: containers: - name: nginx image: nginx volumeMounts: - mountPath: /srv/www name: www-data readOnly: true - name: git-monitor image: kubernetes/git-monitor env: - name: GIT_REPO value: http://github.com/some/repo.git volumeMounts: - mountPath: /data name: www-data volumes: - name: www-data emptyDir: {} 

我想要在两个豆荚之间进行卷装。 我正在使用2个不同的复制控制器创build这些Pod。 复制控制器看起来像这样

复制控制器1:

 apiVersion: v1 kind: ReplicationController metadata: name: node-worker labels: name: node-worker spec: replicas: 1 selector: name: node-worker template: metadata: labels: name: node-worker spec: containers: - name: node-worker image: image/node-worker volumeMounts: - mountPath: /mnt/test name: deployment-volume volumes: - name: deployment-volume emptyDir: {} 

复制控制器2:

 apiVersion: v1 kind: ReplicationController metadata: name: node-manager labels: name: node-manager spec: replicas: 1 selector: name: node-manager template: metadata: labels: name: node-manager spec: containers: - name: node-manager image: image/node-manager volumeMounts: - mountPath: /mnt/test name: deployment-volume volumes: - name: deployment-volume emptyDir: {} 

Kubernetes可以在这种情况下使用emptyDir卷吗?

EmptyDir卷固有地绑定到单个容器的生命周期,不能在复制控制器或其他容器中共享。 如果你想在不同的豆荚间共享卷,现在最好的select是NFS或gluster,在一个持久的卷中。 在这里看到一个例子: https : //github.com/kubernetes/examples/blob/master/staging/volumes/nfs/README.md

为什么要分享pod之间的卷装? 这将无法可靠地工作,因为不能保证复制控制器1中的pod和复制控制器2在群集中的调度位置之间具有1:1映射。

如果要在容器之间共享本地存储,则应将两个容器放在同一个容器中,然后让每个容器装入emptyDir容器。

你需要件事才能完成这个工作。 更多信息可以在这里find,并在这里find一些文档,但起初有点混乱。

这个例子挂载一个NFS卷。

1.创build一个指向你的NFS服务器的PersistentVolume

文件:mynfssharename-pv.yaml

(更新服务器指向您的服务器)

 apiVersion: v1 kind: PersistentVolume metadata: name: mynfssharename spec: capacity: storage: 1Gi accessModes: - ReadWriteMany nfs: server: yourservernotmine.yourcompany.com path: "/yournfspath" 

kubectl创build-f mynfssharename-pv.yaml

2.创build一个PersistentVolumeClaim来指向PersistentVolume mynfssharename

文件:mynfssharename-pvc.yaml

 apiVersion: v1 kind: PersistentVolumeClaim metadata: name: mynfssharename spec: accessModes: - ReadWriteMany resources: requests: storage: 1Gi 

kubectl创build-f mynfssharename-pvc.yaml

3.将声明添加到您的ReplicationController或Deployment

 spec: containers: - name: sample-pipeline image: yourimage imagePullPolicy: Always ports: - containerPort: 8080 name: http volumeMounts: # name must match the volume name below - name: mynfssharename mountPath: "/mnt" volumes: - name: mynfssharename persistentVolumeClaim: claimName: mynfssharename