Docker是无状态的无论被销毁多少次都会恢复到最初的状态,可是这就意味着在程序过程当中产生的配置也好文件也好会丢失,对于Docker咱们常常会使用磁盘挂载的方式来保存一些重要的内容,好比运行在Docker下的数据库的源数据,好比程序的日志文件等,在K8S中也提供一样的配置方式php
PS: 磁盘使用中1.8 和 1.9存在差别,1.8须要建立PersistentVolume在建立以后才能建立PersistentVolumeClaim,1.9以后只须要建立PersistentVolumeClaim就能够了mysql
Kubernetes官方文档:https://kubernetes.io/docs/reference/git
Kubernetes官方Git地址:https://github.com/kubernetes/kubernetesgithub
PS:本系列中使用 KubernetesV1.8 RancherV1.6.14redis
> vim local-pv.yaml apiVersion: v1 kind: PersistentVolume metadata: name: local-pv-1 labels: type: local spec: capacity: storage: 20Gi accessModes: - ReadWriteOnce hostPath: path: /tmp/data/pv-1 --- apiVersion: v1 kind: PersistentVolumeClaim metadata: name: redis-pv-claim labels: app: redis spec: accessModes: - ReadWriteOnce resources: requests: storage: 20Gi > kubectl create -f local-pv.yaml persistentvolume "local-pv-1" created persistentvolumeclaim "mysql-pv-claim" created
而后咱们就能够对对进行进行挂载了sql
> vim volume-local.yaml apiVersion: v1 kind: Pod metadata: name: volume-local-pod spec: containers: - name: mypod image: redis volumeMounts: # 磁盘挂载 - name: redis-pv-claim mountPath: "/etc/redis" volumes: # 磁盘挂载别称定义 - name: redis-pv-claim persistentVolumeClaim: claimName: redis-pv-claim > kubectl create -f volume-local.yaml pod "volume-local-pod" created
这个时候容器的节点在K8S-S1上咱们看一下是否保存到了K8S-S1的磁盘上了吗数据库
可是这样作有一个很大的弊端,若是这个Pod重启可能会被调度到其余的节点上,那么对应挂载盘的就会状况,这里有两种方式解决,第一种就是固定Pod运行的节点,在就是使用共享磁盘(首先你须要建立一个NAS盘)vim
通常用的比较频繁的就是NAS盘做为挂载盘,用法以下api
> vim nfs-pv.yaml apiVersion: v1 kind: PersistentVolume metadata: name: nfs-pv spec: capacity: storage: 5Gi accessModes: - ReadWriteMany nfs: server: xxxxxx.cn-hangzhou.nas.aliyuncs.com # nfs的地址 path: "/" # nfs的挂载目录(必定须要有这个文件目录) --- apiVersion: v1 kind: PersistentVolumeClaim metadata: name: nfs-pv spec: accessModes: - ReadWriteMany storageClassName: "" resources: requests: storage: 5Gi > kubectl create -f nfs-pv.yaml persistentvolume "nfs-pv" created persistentvolumeclaim "nfs-pv" created
咱们建立两个Pod共享一个NAS盘网络
> vim volume-nfs.yaml apiVersion: extensions/v1beta1 kind: Deployment metadata: name: volume-nfs spec: replicas: 2 template: metadata: labels: # 容器的标签 可和service关联 app: volume-nfs spec: containers: - name: mypod image: redis volumeMounts: # 磁盘挂载 - name: nfs-pv mountPath: "/etc/redis" volumes: # 磁盘挂载别称定义 - name: nfs-pv persistentVolumeClaim: claimName: php-general-test > kubectl create -f volume-nfs.yaml deployment "volume-nfs" created
两个Pod分别在不一样的节点中
具体使用明细能够参考官方文档: Volumes | Kubernetes