Kubernetes Storage

一、k8s之上可用存储卷

  • emptyDir
    • 临时、缓存、空目录
  • hostPath
    • 主机目录
  • 传统存储设备
    • SAN:iSCSI FC
    • NAS:nfs ,cifs
  • 分布式存储
    • glusterfs
    • rbd 块级存储
    • cephfs
  • 云存储
    • 亚马逊EBS 弹性块存储
    • Azure Disk

基础架构容器pause

1.1.查看支持的存储

# kubectl explain pods.spec.volumes

1.2.根据性能指标定义存储类

  • Gold Storage Class
  • Silver Storage Class
  • Bronze Storage Class

1.3.emptyDir

# kubectl explain pods.spec.volumes.emptyDir
# kubectl explain pods.spec.containers.volumeMounts

pod-vol-demo.yaml

apiVersion: V1
kind: Pod
metadata:
  name: pod-demo
  namespace: default
  labels:
    app: myapp
    tier: frontend
  annotations:
    magedu.com/create-by: "cluster admin"
spec:
  containers:
  - name: myapp
    image: ikubernetes/myapp:v1
    ports:
    - name: http
      containerPort: 80
    volumeMounts:
    - name: html
      mountPath: /data/web/html/
  - name: busybox
    image: busybox:latest
    imagePullPolicy: IfNotPresent
    volumeMounts:
    - name: html
      mountPath: /data/
    command:
    - "/bin/sh"
    - "-c"
    - "speep 7200"
  volumes:
  - name: html
    emptyDir: {}   #本地磁盘大小不限制
# kubectl apply -f pod-vol-demo.yaml
# kubectl exec -it pod-demo -c busybox -- /bin/sh
# ls
# mount
# echo $(date) >> /data/index.html

# kubectl exec -it pod-demo -c myapp -- /bin/sh
# cat /date/web/html/index.html

# kubectl delete -f pod-vol-demo.yaml
apiVersion: V1
kind: Pod
metadata:
  name: pod-demo
  namespace: default
  labels:
    app: myapp
    tier: frontend
  annotations:
    magedu.com/create-by: "cluster admin"
spec:
  containers:
  - name: myapp
    image: ikubernetes/myapp:v1
    imagePullPolicy: IfNotPresent
    ports:
    - name: http
      containerPort: 80
    volumeMounts:
    - name: html
      mountPath: /usr/share/nginx/html/
  - name: busybox
    image: busybox:latest
    imagePullPolicy: IfNotPresent
    volumeMounts:
    - name: html
      mountPath: /data/
    command: ["/bin/sh"]
    arg: ["-c", "while true; do echo $(date) >> /data/index.html; sleep 2; done"]
  volumes:
  - name: html
    emptyDir: {}   #本地磁盘大小不限制
kubectl app -f pod-vol-demo.yaml
kubectl get pods -o wide
curl IP

gitRepo

  • emptyDir
  • 将git仓库内容克隆到本地,后运行

    hostpath

  • kubectl explain pods.spec.volumes.hostPath.type
  • https://kubernetes.io/docs/concepts/storage/volumes#hostpath
apiVersion: v1
kind: Pod
metadata:
  name: pod-vol-hostpath
  namespace: default
spec:
  containers:
  - name: myapp
    image: ikubernetes/myapp:v1
    volumeMounts:
    - name: html
      mountPath: /usr/share/nginx/html/
  volumes:
  - name: html
    hostPath:
      path: /data/pod/volume1
      type: DirectoryOrCreate
每个节点
mkdir /data/pod/volume1 -p
vim /data/pod/volume1/index.html

kubectl apply -f pod-hostpath-vol.yaml
kubectl get pods -o wide

yum -y install nfs-utils mkdir /data/volumes -pv vim /etc/exports /data/volumes 172.20.0.0/16(rw,no_root_squash) systemctl start nfs ss -tnl

mount -t nfs stor01:/data/volumes

apiVersion: v1
kind: Pod
metadata:
  name: pod-vol-nfs
  namespace: default
spec:
  containers:
  - name: myapp
    image: ikubernetes/myapp:v1
    volumeMounts:
    - name: html
      mountPath: /usr/share/nginx/html/
  volumes:
  - name: html
    nfs:
      path: /data/volumes
      server: stor01.magedu.com

PVC如何定义 kubectl explain pvc 卷的pvc如何定义 kubectl explain pods.spec.volumes.persistentVolumeClaim

NFS mkdir v{1,2,3,4,5}

apiVersion: v1 kind: PersistentVolume metadata: name: pv001 labels: name: pv001 spec: nfs: path: /data/volumes/v1 server: stor01.magedu.com accessModes: [“ReadWriteMany”,”ReadWriteOnce”] capacity: storage: 2Gi

kubectl apply -f pv-demo.yaml

kubectl get pv

apiVersion: v1 kind: PersistentVolumeClaim metadata: name: mypvc namespace: default spec: accessModes: [“ReadWriteMany”] resources: requests: storage: 6Gi — apiVersion: v1 kind: Pod metadata: name: pod-vol-pvc namespace: default spec: containers:

  • name: myapp image: ikubernetes/myapp:v1 volumeMounts:
    • name: html mountPath: /usr/share/nginx/html volumes:
  • name: html persistentVolumeClaim: claimName: mypvc

=============================================== ceph (glusterfs、moosefs、hdfs、fastdfs、等)

  • 文件存储
  • 块设备
  • 对象存储 应用
  • owncloud (php)
  • nextcloud
  • seafile

Categories:

Updated: