空目录

空目录会随机生成数据卷,不利于数据持久化

主机目录

  1. apiVersion: apps/v1
  2. kind: Deployment
  3. metadata:
  4. name: nginx-hostpath-vol
  5. spec:
  6. selector:
  7. matchLabels:
  8. app: nginx-hostpath-vol
  9. release: canary
  10. template:
  11. metadata:
  12. labels:
  13. app: nginx-hostpath-vol
  14. release: canary
  15. spec:
  16. containers:
  17. - name: nginx-hostpath-vol
  18. image: nginx:1.13-alpine
  19. volumeMounts:
  20. - name: hostpath
  21. mountPath: /usr/share/nginx/html/
  22. - name: busybox
  23. image: busybox:latest
  24. volumeMounts:
  25. - name: hostpath
  26. mountPath: /data/
  27. command: ["/bin/sh","-c","while true;do echo $(date) >> /data/index.html;sleep 3;done"]
  28. volumes:
  29. - name: hostpath
  30. hostPath:
  31. path: /data/hostpath/
  32. type: DirectoryOrCreate
  33. ---
  34. apiVersion: v1
  35. kind: Service
  36. metadata:
  37. name: hostpath-service
  38. spec:
  39. type: NodePort
  40. ports:
  41. - protocol: TCP
  42. port: 80
  43. nodePort: 30001
  44. targetPort: 80
  45. selector:
  46. app: nginx-hostpath-vol

NFS目录

安装NFS

yum install -y nfs-utils

配置NFS

vi /etc/exports
/vol/vol01 10.0.0.0/24(rw,no_root_squash)
/vol/vol02 10.0.0.0/24(rw,no_root_squash)
/vol/vol03 10.0.0.0/24(rw,no_root_squash)
# 重启生效
systemctl restart nfs
# 查看
showmount -e 10.0.0.67

使用NFS目录

apiVersion: v1
kind: Pod
metadata:
   name: nginx-nfs-vol
   namespace: default
spec:
  containers:
  - name: nginx-nfs-vol
    image: nginx:1.13-alpine
    volumeMounts:
    - name: nfs
      mountPath: /usr/share/nginx/html/
  volumes:
  - name: nfs
    nfs:
      path: /vol/vol01/
      server: 10.0.0.67

PV资源

创建PV资源

需要在集群所有机器安装nfs工具yum install -y nfs-utils

apiVersion: v1
kind: PersistentVolume
metadata:
  name: pv001
  labels:
    name: pv001
spec:
  nfs:
    path: /vol/vol01
    server: 10.0.0.67
  accessModes: ["ReadWriteMany","ReadWriteOnce"]
  capacity:
    storage: 2Gi

---

apiVersion: v1
kind: PersistentVolume
metadata:
  name: pv002
  labels:
    name: pv002
spec:
  nfs:
    path: /vol/vol02
    server: 10.0.0.67
  accessModes: ["ReadWriteMany","ReadWriteOnce"]
  capacity:
    storage: 5Gi

---

apiVersion: v1
kind: PersistentVolume
metadata:
  name: pv003
  labels:
    name: pv003
spec:
  nfs:
    path: /vol/vol03
    server: 10.0.0.67
  accessModes: ["ReadWriteMany","ReadWriteOnce"]
  capacity:
    storage: 10Gi

使用PV资源

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: pvc-demo
  namespace: default
spec:
  accessModes: ["ReadWriteMany"]
  resources:
    requests:
      storage: 6Gi

---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-pvc-vol
  namespace: default
spec:
  selector:
    matchLabels:
      app: pvc-nginx
      release: canary
  template:
    metadata:
      labels:
        app: pvc-nginx
        release: canary
    spec:
      containers:
      - name: nginx-pvc-vol
        image: nginx:1.13-alpine
        volumeMounts:
        - name: pvc
          mountPath: /usr/share/nginx/html/
      - name: busybox
        image: busybox:latest
        volumeMounts:
        - name: pvc
          mountPath: /data/
        command: ["/bin/sh","-c","while true;do echo $(date) >> /data/index.html;sleep 3;done"]
      volumes:
      - name: pvc
        persistentVolumeClaim:
          claimName: pvc-demo
---
apiVersion: v1
kind: Service
metadata: 
  name: pvc-nginx
spec:
  type: NodePort
  ports:
  - protocol: TCP
    port: 80
    nodePort: 30002
    targetPort: 80
  selector:
    app: pvc-nginx

Configmap

1. 定义一个配置文件

server {
      server_name ohmy.volume;
      listen 80;
      root /usr/share/html/;
}

2. 生成configmap

kubectl create configmap nginx-configmap --from-file=www.conf=./www.conf

3. 使用configmap资源

apiVersion: apps/v1
kind: Deployment
metadata:
  name: configmap-pod
  namespace: default
spec:
  selector:
    matchLabels:
      app: configmap-pod
  template:
    metadata:
      labels:
        app: configmap-pod
    spec:
      containers:
      - name: configmap-pod
        image: nginx:1.13-alpine
        volumeMounts:
          - name: nginx-configmap
            mountPath: /etc/nginx/conf.d/
            readOnly: true
      volumes:
      - name: nginx-configmap
        configMap:
          name: nginx-configmap

---
apiVersion: v1
kind: Service
metadata:
  name: configmap-pod-svc
  namespace: default
spec:
  type: NodePort
  ports:
  - name: http
    protocol: TCP
    port: 80
    targetPort: 80
    nodePort: 30003
  selector:
    app: configmap-pod