手动创建k8slocal-pv
nodeselector基本概念
kubernetes从1.10版本开始支持local volume(本地卷),workload(不仅是statefulsets类型)可以充分利用本地快速SSD,从而获取比remote volume(如cephfs、RBD)更好的性能.
下面两种类型应用适合使用local volume。
数据缓存,应用可以就近访问数据,快速处理。 分布式存储系统,如分布式数据库Cassandra ,分布式文件系统ceph/gluster 下面会先以手动方式创建PV、PVC、Pod的方式,介绍如何使用local volume,然后再介绍external storage提供的半自动方式,最后介绍社区的一些发展。
手动创建local-pv 需要创建storageclass, pv. 如果你的资源申请pv使用使用的persistvolumetemplate, pvc 会自动创建.
storageclass
首先需要有一个名为local-volume的sc。
kind: StorageClass apiVersion: storage.k8s.io/v1 metadata:  name: local-volume provisioner: kubernetes.io/no-provisioner volumeBindingMode: WaitForFirstConsumer
sc的provisioner是 kubernetes.io/no-provisioner。
WaitForFirstConsumer表示PV不要立即绑定PVC,而是直到有Pod需要用PVC的时候才绑定。调度器会在调度时综合考虑选择合适的local PV,这样就不会导致跟Pod资源设置,selectors,affinity and anti-affinity策略等产生冲突。很明显:如果PVC先跟local PV绑定了,由于local PV是跟node绑定的,这样selectors,affinity等等就基本没用了,所以更好的做法是先根据调度策略选择node,然后再绑定local PV.
手动创建pv
apiVersion: v1 kind: PersistentVolume metadata:  name: example-local-pv spec:  capacity:    storage: 5Gi  accessModes:  - ReadWriteOnce  persistentVolumeReclaimPolicy: Retain  storageClassName: local-volume  local:    path: /data/local/vol1  nodeAffinity:    required:     
nodeSelectorTerms:      - matchExpressions:        - key: kubernetes.io/hostname          operator: In          values:          - 192.168.100.1
这里使用实际存储是192.168.100.1 上的/data/local/vol1 目录. 所以你要手动建立这些目录给pv挂载使用,可以使用下面的方式使用loop挂载的方式挂载到目录.
cat lpfs.sh #!/bin/bash # Usage: sudo loopm ount file size m ount-point touch $1 truncate -s $2 $1 mke2fs -t ext4 -F $1 1> /dev/null 2> /dev/null if [[ ! -d $3 ]]; then    echo $3 " not exist, "      mkdir $3 fi mount $1 $3 df -h ,grep $3
lpfs.sh  /data0/k8spv/data0 5G /data/local/vol1
绑定pv,使用pvc
apiVersion: v1 kind: PersistentVolumeClaim metadata:  name: myclaim spec:  accessModes:  - ReadWriteOnce  resources:    requests:      storage: 5Gi  storageClassName: local-volume --- kind: Pod apiVersion: v1 metadata:  name: mypod spec:  containers:    - name: myfrontend      image: nginx      volumeMounts:      - mo
untPath: "/usr/share/nginx/html"        name: mypd  volumes:    - name: mypd      persistentVolumeClaim:        claimName: myclaim
自动创建
安装网络pv的使用惯例,我们使用storageclass指定了provisioner后,按理说可以使用自动化的pv创建的,这种手动创建pv的方式太low太麻烦了,还不nodeselector好了.官方也提供了自动化的创建pv的方式.下篇文章介绍.

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。