具有复制控制器的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