通过卷在容器间共享数据

emptyDir:当pod删除时卷也被删除,用于存放临时数据

pod实例fortune.yaml

apiVersion: v1

kind: Pod

metadata:

    name: fortune

spec:

  containers:

  - image: luksa/fortune

    name: html-generator

    volumeMounts:

    - name: html

      mountPath: /var/htdocs

  - image: nginx:alpine

    name: web-server

    volumeMounts:

    - name: html

      mountPath: /usr/share/nginx/html

      readOnly: true

    ports:

    - containerPort: 80

      protocol: TCP

  volumes:

  - name: html

    emptyDir: {}


kubectl create -f fortune.yaml

kubectl logs fortune html-generator

kubectl logs fortune web-server

kubectl exec -it fortune -c web-server  /bin/sh


hostPath:指向节点文件系统的特定目录

[root@mes2 k8study]# kubectl get pods --namespace kube-system


[root@mes2 k8study]# kubectl describe pods kube-addon-manager-minikube --namespace kube-system

Name:         kube-addon-manager-minikube

Namespace:    kube-system

Priority:     0

Node:         minikube/172.27.14.222

Start Time:   Fri, 23 Aug 2019 05:37:36 -0400

Labels:       component=kube-addon-manager

              kubernetes.io/minikube-addons=addon-manager

              version=v9.0

Annotations:  kubernetes.io/config.hash: 5327162914655af67829868f3ab76393

              kubernetes.io/config.mirror: 5327162914655af67829868f3ab76393

              kubernetes.io/config.seen: 2019-08-23T05:37:15.210580764-04:00

              kubernetes.io/config.source: file

Status:       Running

IP:           172.27.14.222

Containers:

  kube-addon-manager:

    Container ID:   docker://0069f20fe82b89a890f89b13e6f812dca78d81d83ecec0534dc9aaded79a7fd3

    Image:          registry.cn-hangzhou.aliyuncs.com/google_containers/kube-addon-manager:v9.0

    Image ID:       docker-pullable://registry.cn-hangzhou.aliyuncs.com/google_containers/kube-addon-manager@sha256:672794ee3582521eb8bc4f257d0f70c92893f1989f39a200f9c84bcfe1aea7c9

    Port:           

    Host Port:     

    State:          Running

      Started:      Tue, 17 Mar 2020 23:23:17 -0400

    Last State:     Terminated

      Reason:       Error

      Exit Code:    137

      Started:      Fri, 23 Aug 2019 05:37:37 -0400

      Finished:     Tue, 17 Mar 2020 23:23:11 -0400

    Ready:          True

    Restart Count:  1

    Requests:

      cpu:     5m

      memory:  50Mi

    Environment:

      KUBECONFIG:  /var/lib/minikube/kubeconfig

    Mounts:

      /etc/kubernetes/ from addons (ro)

      /var/lib/minikube/ from kubeconfig (ro)

Conditions:

  Type              Status

  Initialized       True

  Ready             True

  ContainersReady   True

  PodScheduled      True

Volumes:

  addons:

    Type:          HostPath (bare host directory volume)

    Path:          /etc/kubernetes/

    HostPathType:

  kubeconfig:

    Type:          HostPath (bare host directory volume)

    Path:          /var/lib/minikube/

    HostPathType:

QoS Class:         Burstable

Node-Selectors:   

Tolerations:       :NoExecute

Events:           


使用持久存储

[root@mes2 k8study]# cat mongonhostpath_pod.yaml

apiVersion: v1

kind: Pod

metadata:

  name: mongodb

spec:

  volumes:

  - name: mongodb-data

    hostPath:

      path: /data/nfs

      type: Directory

  containers:

  - image: mongo

    name: mongodb

    volumeMounts:

    - name: mongodb-data

      mountPath: /data/db

    ports:

    - containerPort: 27017

      protocol: TCP


通过底层持久化存储使用其它类型存储nfs卷

[root@mes2 k8study]# cat mongonfs_pod.yaml

apiVersion: v1

kind: Pod

metadata:

  name: mongodb

spec:

  volumes:

  - name: mongodb-data

    nfs:

      server: 172.27.14.223

      path: /root/data

  containers:

  - image: mongo

    name: mongodb

    volumeMounts:

    - name: mongodb-data

      mountPath: /data/db

    ports:

    - containerPort: 27017

      protocol: TCP



持久卷将底层存储与POD解耦

卷---持久卷---持久卷声明---POD卷

集群管理员将存储卷通过KubenetsAPI服务器创建注册持久卷PV

用户将持久卷声明提交KubenetsAPI服务器匹配到持久卷进行绑定PVC

mongodb-pv-nfs.yaml

apiVersion: v1

kind: PersistentVolume

metadata:

  name: mongodb-pv

spec:

  capacity:

    storage: 1Gi

  accessModes:

  - ReadWriteOnce

  - ReadOnlyMany

  persistentVolumeReclaimPolicy: Retain

  nfs:

    server: 172.27.14.223

    path: /root/data

[root@mes2 k8study]# kubectl get pv

NAME         CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM                 STORAGECLASS   REASON   AGE

mongodb-pv   1Gi        RWO,ROX        Retain           Bound    default/mongodb-pvc                           8m45s

创建持久卷声明获取持久卷

mongodb-pvc.yaml

apiVersion: v1

kind: PersistentVolumeClaim

metadata:

  name: mongodb-pvc

spec:

  resources:

    requests:

      storage: 1Gi

  accessModes:

    - ReadWriteOnce

  storageClassName: ""

[root@mes2 k8study]# kubectl get pvc

NAME          STATUS   VOLUME       CAPACITY   ACCESS MODES   STORAGECLASS   AGE

mongodb-pvc   Bound    mongodb-pv   1Gi        RWO,ROX                       49s

在POD使用持久声明

[root@mes2 k8study]# cat mongopv_pod.yaml

apiVersion: v1

kind: Pod

metadata:

  name: mongodb

spec:

  volumes:

  - name: mongodb-data

    persistentVolumeClaim:

      claimName: mongodb-pvc

  containers:

  - image: mongo

    name: mongodb

    volumeMounts:

    - name: mongodb-data

      mountPath: /data/db

    ports:

    - containerPort: 27017

      protocol: TCP


手动回收持久卷:将persistentVolumeReclaimPolicy设置为Retain

自动回收持久卷:recycle删除卷内容并再次用于卷声明,delete删除底层存储


持久卷的动态配置storageclass

storageclass-fast-gcepd.yaml

apiVersion: storage.k8s.io/v1

kind: StorageClass

metadata:

  name: fast

provisioner: kubernetes.io/gce-pd

parameters:

  type: pd-ssd

  zone: europe-west1-b

请求特定存储类的PVC定义

mongodb-pvc-pd.yaml

apiVersion: v1

kind: PersistentVolumeClaim

metadata:

  name: mongodb-pvc

spec:

  storageClassName: fast

  resources:

    requests:

      storage: 100Mi

accessModes:

  - ReadWriteOnce

创建不指定存储类型的持久卷声明

mongodb-pvc-pd-nostorageclass.yaml

apiVersion: v1

kind: PersistentVolumeClaim

metadata:

  name: mongodb-pvc2

spec:

  resources:

    requests:

      storage: 100Mi

accessModes:

  - ReadWriteOnce


检查存储类

[root@mes2 ~]# kubectl get sc

NAME                 PROVISIONER                AGE

standard (default)   k8s.io/minikube-hostpath   242d

[root@mes2 ~]# kubectl get sc standard -o yaml

apiVersion: storage.k8s.io/v1

kind: StorageClass

metadata:

  annotations:

    storageclass.kubernetes.io/is-default-class: "true"

  creationTimestamp: "2019-08-23T09:37:55Z"

  labels:

    addonmanager.kubernetes.io/mode: EnsureExists

  name: standard

  resourceVersion: "358"

  selfLink: /apis/storage.k8s.io/v1/storageclasses/standard

  uid: 9d6be323-c93d-44f4-bc05-c068cf0897de

provisioner: k8s.io/minikube-hostpath

reclaimPolicy: Delete

volumeBindingMode: Immediate



参考:

https://www.cnblogs.com/ipyanthony/p/12697883.html

https://www.cnblogs.com/ipyanthony/p/12698748.html

http://www.voidcn.com/article/p-bqeltirs-bqk.html