1.POD增加一个cachevol的Volume存储卷,挂载到容器的nginx-cache目录上
apiVersion: extensions/v1beta1 kind: ReplicaSet metadata: name: frontend spec: replicas: 3 selector: tier: frontend volumes: - name: cachevol # 增加一个名为cachevol的volume存储卷 emptyDir: {} # pod分配到node时创建的,k8s自动分配的一个目录,pod从node移除时emptyDir中的数据永久删除 template: metadata: labels: app: nginx tier: frontend spec: containers: - name: nginx1.18 image: nginx:1.18.0 volumeMounts: - mountPath: /nginx-cache # 将cachevol volume存储卷mount到容器内的/etc/nginx/cache目录上 name: cachevol imagePullPolicy: IfNotPresent env: - name: GET_HOSTS_FROM value: env ports: - containerPort: 80
2.hostPath在POD上挂载宿主机的文件或目录
apiVersion: extensions/v1beta1 kind: ReplicaSet metadata: name: mysql5.7 spec: replicas: 2 selector: app: mysql template: metadata: labels: app: mysql # spec.template.metadata.labels标签名与spec.selector名称要相同 spec: volumes: - name: "data-storage" hostPath: path: "/opt/data" # 宿主机目录 containers: - name: mysql5.7 image: mysql:5.7.29 ports: - containerPort: 3306 env: - name: MYSQL_ROOT_PASSWORD value: "123456"
3.挂载NFS Server的目录
apiVersion: extensions/v1beta1 kind: ReplicaSet metadata: name: mysql5.7 spec: replicas: 2 selector: app: mysql template: metadata: labels: app: mysql # spec.template.metadata.labels标签名与spec.selector名称要相同 spec: volumes: # - name: mypd # 使用PVC时注视掉开启这三项内容 # persistentVolumeClaim: # claimName: myclaim - name: nfs nfs: server: 192.168.1.2 # nfs server地址 path: "/data" # nfs挂载目录 containers: - name: mysql5.7 image: mysql:5.7.29 ports: - containerPort: 3306 env: - name: MYSQL_ROOT_PASSWORD value: "123456" 说明:其他可定义的type iscsi:使用iSCSI存储设备上的目录挂载到Pod中 flocker:使用Flocker管理存储卷 glusterfs:使用GlusterFS网络文件系统的目录挂载到Pod中 rbd:使用Ceph块设备共享存储挂载到Pod中 gitRepo:通过挂载一个空目录,并从Git库clone一个git repository以供Pod使用 secret:一个Secret Volume用于为Pod提供加密的信息,你可以将定义在K8s中的Secret直接挂载为文件让Pod访问,这种类型的Volume不会被持久化
4.Persistent Volume挂载网络存储定义占用空间大小
# nfs-persistent_volume.yaml apiVersion: v1 kind: PersistentVolume metadata: name: pv0001 spec: capacity: storage: 5Gi # 声明需占用存储空间为5GB accessModes: - ReadWriteOnce # 有读写权限且只能被单个node挂载;ReadOnlyMany:只读权限允许被多个node挂载;ReadWriteMany:有读写权限允许被多个node挂载 nfs: path: /data server: 192.168.1.2 # nfs-persistent_volume_claim.yaml apiVersion: v1 kind: PersistentVolumeClaim metadata: name: myclaim spec: accessModes: - ReadWriteOnce # 有读写权限且只能被单个node挂载;ReadOnlyMany:只读权限允许被多个node挂载;ReadWriteMany:有读写权限允许被多个node挂载 resources: requests: storage: 8Gi # 声明需占用8GB存储空间 nfs: path: /data server: 192.168.1.2 PV状态说明: Available:空闲状态 Bound:已经绑定到某个PVC上 Released:对应的PVC已经被删除,但资源还没有备集群回收 Failed:PV自动回收失败
注解:PV可以理解成K8s集群中的某个网络存储对应的一块存储,他与Volume类似,但有以下区别:
1.PV只能是网络存储,不能属于任何Node,但可以在每个Node上访问
2.PV并不是被定义在Pod上的,而是独立于Pod之外的
3.PV目前支持类型包括:FC、NFS、iSCSI、CephFS、GlusterFS、VMware Photon等