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等