(K8s學習筆記二)存儲卷掛載


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等


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM