<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      K8s Pod 多種數(shù)據(jù)存儲(chǔ)方式

      由于容器的生命周期可能很短,會(huì)被頻繁地創(chuàng)建和銷毀。那么容器在銷毀時(shí),保存在容器中的數(shù)據(jù)也會(huì)被清除。這種結(jié)果對(duì)用戶來(lái)說(shuō),在某些情況下是不樂(lè)意看到的。為了持久化保存容器的數(shù)據(jù),kubernetes引入了Volume的概念。

      Volume是Pod中能夠被多個(gè)容器訪問(wèn)的共享目錄,它被定義在Pod上,然后被一個(gè)Pod里的多個(gè)容器掛載到具體的文件目錄下,kubernetes通過(guò)Volume實(shí)現(xiàn)同一個(gè)Pod中不同容器之間的數(shù)據(jù)共享以及數(shù)據(jù)的持久化存儲(chǔ)。Volume的生命容器不與Pod中單個(gè)容器的生命周期相關(guān),當(dāng)容器終止或者重啟時(shí),Volume中的數(shù)據(jù)也不會(huì)丟失。

      kubernetes的Volume支持多種類型,比較常見的有下面幾個(gè):

      • 簡(jiǎn)單存儲(chǔ):EmptyDir、HostPath、NFS

      • 高級(jí)存儲(chǔ):PV、PVC

      • 配置存儲(chǔ):ConfigMap、Secret

      基本存儲(chǔ)

      EmptyDir

      EmptyDir是最基礎(chǔ)的Volume類型,一個(gè)EmptyDir就是Host上的一個(gè)空目錄。

      EmptyDir是在Pod被分配到Node時(shí)創(chuàng)建的,它的初始內(nèi)容為空,并且無(wú)須指定宿主機(jī)上對(duì)應(yīng)的目錄文件,因?yàn)閗ubernetes會(huì)自動(dòng)分配一個(gè)目錄,當(dāng)Pod銷毀時(shí), EmptyDir中的數(shù)據(jù)也會(huì)被永久刪除。 EmptyDir用途如下:

      • 臨時(shí)空間,例如用于某些應(yīng)用程序運(yùn)行時(shí)所需的臨時(shí)目錄,且無(wú)須永久保留

      • 一個(gè)容器需要從另一個(gè)容器中獲取數(shù)據(jù)的目錄(多容器共享目錄)

      接下來(lái),通過(guò)一個(gè)容器之間文件共享的案例來(lái)使用一下EmptyDir。

      在一個(gè)Pod中準(zhǔn)備兩個(gè)容器nginx和busybox,然后聲明一個(gè)Volume分別掛在到兩個(gè)容器的目錄中,然后nginx容器負(fù)責(zé)向Volume中寫日志,busybox中通過(guò)命令將日志內(nèi)容讀到控制臺(tái)。

      創(chuàng)建一個(gè)volume-emptydir.yaml

      apiVersion: v1
      kind: Pod
      metadata:
        name: volume-emptydir
        namespace: dev
      spec:
        containers:
        - name: nginx
          image: nginx:1.18.0
          ports:
          - containerPort: 80
          volumeMounts:  # 將logs-volume掛在到nginx容器中,對(duì)應(yīng)的目錄為 /var/log/nginx
          - name: logs-volume
            mountPath: /var/log/nginx
        - name: busybox
          image: busybox:1.30
          command: ["/bin/sh","-c","tail -f /logs/access.log"] # 初始命令,動(dòng)態(tài)讀取指定文件中內(nèi)容
          volumeMounts:  # 將logs-volume 掛在到busybox容器中,對(duì)應(yīng)的目錄為 /logs
          - name: logs-volume
            mountPath: /logs
        volumes: # 聲明volume, name為logs-volume,類型為emptyDir
        - name: logs-volume
          emptyDir: {}
      
      # 創(chuàng)建Pod
      [root@k8s-master01 ~]# kubectl create -f volume-emptydir.yaml
      pod/volume-emptydir created
      
      # 查看pod
      [root@k8s-master01 ~]# kubectl get pods volume-emptydir -n dev -o wide
      NAME                  READY   STATUS    RESTARTS   AGE      IP       NODE   ...... 
      volume-emptydir       2/2     Running   0          97s   10.42.2.9   node1  ......
      
      # 通過(guò)podIp訪問(wèn)nginx
      [root@k8s-master01 ~]# curl 10.42.2.9
      ......
      
      # 通過(guò)kubectl logs命令查看指定容器的標(biāo)準(zhǔn)輸出
      [root@k8s-master01 ~]# kubectl logs -f volume-emptydir -n dev -c busybox
      10.42.1.0 - - [27/Jun/2024:15:08:54 +0000] "GET / HTTP/1.1" 200 612 "-" "curl/7.29.0" "-"
      

      HostPath

      因?yàn)镋mptyDir中數(shù)據(jù)不會(huì)被持久化,它會(huì)隨著Pod的結(jié)束而銷毀,如果想簡(jiǎn)單的將數(shù)據(jù)持久化到主機(jī)中,可以選擇HostPath。

      HostPath就是將Node主機(jī)中一個(gè)實(shí)際目錄掛在到Pod中,以供容器使用,這樣的設(shè)計(jì)就可以保證Pod銷毀了,但是數(shù)據(jù)依據(jù)可以存在于Node主機(jī)上。

      創(chuàng)建一個(gè)volume-hostpath.yaml:

      apiVersion: v1
      kind: Pod
      metadata:
        name: volume-hostpath
        namespace: dev
      spec:
        containers:
        - name: nginx
          image: nginx:1.18.0
          ports:
          - containerPort: 80
          volumeMounts:
          - name: logs-volume
            mountPath: /var/log/nginx
        - name: busybox
          image: busybox:1.30
          command: ["/bin/sh","-c","tail -f /logs/access.log"]
          volumeMounts:
          - name: logs-volume
            mountPath: /logs
        volumes:
        - name: logs-volume
          hostPath: 
            path: /root/logs
            type: DirectoryOrCreate  # 目錄存在就使用,不存在就先創(chuàng)建后使用
      
      關(guān)于type的值的一點(diǎn)說(shuō)明:
          DirectoryOrCreate 目錄存在就使用,不存在就先創(chuàng)建后使用
          Directory   目錄必須存在
          FileOrCreate  文件存在就使用,不存在就先創(chuàng)建后使用
          File 文件必須存在 
          Socket  unix套接字必須存在
          CharDevice  字符設(shè)備必須存在
          BlockDevice 塊設(shè)備必須存在
      
      # 創(chuàng)建Pod
      [root@k8s-master01 ~]# kubectl create -f volume-hostpath.yaml
      pod/volume-hostpath created
      
      # 查看Pod
      [root@k8s-master01 ~]# kubectl get pods volume-hostpath -n dev -o wide
      NAME                  READY   STATUS    RESTARTS   AGE   IP             NODE   ......
      pod-volume-hostpath   2/2     Running   0          16s   10.42.2.10     node1  ......
      
      #訪問(wèn)nginx
      [root@k8s-master01 ~]# curl 10.42.2.10
      
      # 接下來(lái)就可以去host的/root/logs目錄下查看存儲(chǔ)的文件了
      ###  注意: 下面的操作需要到Pod所在的節(jié)點(diǎn)運(yùn)行(案例中是node1)
      [root@node1 ~]# ls /root/logs/
      access.log  error.log
      
      # 同樣的道理,如果在此目錄下創(chuàng)建一個(gè)文件,到容器中也是可以看到的
      

      NFS

      HostPath可以解決數(shù)據(jù)持久化的問(wèn)題,但是一旦Node節(jié)點(diǎn)故障了,Pod如果轉(zhuǎn)移到了別的節(jié)點(diǎn),又會(huì)出現(xiàn)問(wèn)題了,此時(shí)需要準(zhǔn)備單獨(dú)的網(wǎng)絡(luò)存儲(chǔ)系統(tǒng),比較常用的用NFS、CIFS。

      NFS是一個(gè)網(wǎng)絡(luò)文件存儲(chǔ)系統(tǒng),可以搭建一臺(tái)NFS服務(wù)器,然后將Pod中的存儲(chǔ)直接連接到NFS系統(tǒng)上,這樣的話,無(wú)論P(yáng)od在節(jié)點(diǎn)上怎么轉(zhuǎn)移,只要Node跟NFS的對(duì)接沒(méi)問(wèn)題,數(shù)據(jù)就可以成功訪問(wèn)。

      1)首先要準(zhǔn)備nfs的服務(wù)器,這里為了簡(jiǎn)單,直接是master節(jié)點(diǎn)做nfs服務(wù)器

      # 在nfs上安裝nfs服務(wù)
      [root@nfs ~]# yum install nfs-utils -y
      
      # 準(zhǔn)備一個(gè)共享目錄
      [root@nfs ~]# mkdir /root/data/nfs -pv
      
      # 將共享目錄以讀寫權(quán)限暴露給172.16.5.0/24網(wǎng)段中的所有主機(jī)
      [root@nfs ~]# vim /etc/exports
      [root@nfs ~]# more /etc/exports
      /root/data/nfs     172.16.5.0/24(rw,no_root_squash)
      
      # 啟動(dòng)nfs服務(wù)
      [root@nfs ~]# systemctl restart nfs
      

      2)接下來(lái),要在的每個(gè)node節(jié)點(diǎn)上都安裝下nfs,這樣的目的是為了node節(jié)點(diǎn)可以驅(qū)動(dòng)nfs設(shè)備

      # 在node上安裝nfs服務(wù),注意不需要啟動(dòng)
      [root@k8s-master01 ~]# yum install nfs-utils -y
      

      3)接下來(lái),就可以編寫pod的配置文件了,創(chuàng)建volume-nfs.yaml

      apiVersion: v1
      kind: Pod
      metadata:
        name: volume-nfs
        namespace: dev
      spec:
        containers:
        - name: nginx
          image: nginx:1.18.0
          ports:
          - containerPort: 80
          volumeMounts:
          - name: logs-volume
            mountPath: /var/log/nginx
        - name: busybox
          image: busybox:1.30
          command: ["/bin/sh","-c","tail -f /logs/access.log"] 
          volumeMounts:
          - name: logs-volume
            mountPath: /logs
        volumes:
        - name: logs-volume
          nfs:
            server: 172.16.5.6  #nfs服務(wù)器地址
            path: /root/data/nfs #共享文件路徑
      

      4)最后,運(yùn)行下pod,觀察結(jié)果

      # 創(chuàng)建pod
      [root@k8s-master01 ~]# kubectl create -f volume-nfs.yaml
      pod/volume-nfs created
      
      # 查看pod
      [root@k8s-master01 ~]# kubectl get pods volume-nfs -n dev
      NAME                  READY   STATUS    RESTARTS   AGE
      volume-nfs        2/2     Running   0          2m9s
      
      # 查看nfs服務(wù)器上的共享目錄,發(fā)現(xiàn)已經(jīng)有文件了
      [root@k8s-master01 ~]# ls /root/data/
      access.log  error.log
      

      高級(jí)存儲(chǔ)

      前面已經(jīng)介紹了使用NFS提供存儲(chǔ),此時(shí)就要求用戶會(huì)搭建NFS系統(tǒng),并且會(huì)在yaml配置nfs。由于kubernetes支持的存儲(chǔ)系統(tǒng)有很多,要求客戶全都掌握,顯然不現(xiàn)實(shí)。為了能夠屏蔽底層存儲(chǔ)實(shí)現(xiàn)的細(xì)節(jié),方便用戶使用, kubernetes引入PV和PVC兩種資源對(duì)象。

      PV(Persistent Volume)是持久化卷的意思,是對(duì)底層的共享存儲(chǔ)的一種抽象。一般情況下PV由kubernetes管理員進(jìn)行創(chuàng)建和配置,它與底層具體的共享存儲(chǔ)技術(shù)有關(guān),并通過(guò)插件完成與共享存儲(chǔ)的對(duì)接。

      PVC(Persistent Volume Claim)是持久卷聲明的意思,是用戶對(duì)于存儲(chǔ)需求的一種聲明。換句話說(shuō),PVC其實(shí)就是用戶向kubernetes系統(tǒng)發(fā)出的一種資源需求申請(qǐng)。

      使用了PV和PVC之后,工作可以得到進(jìn)一步的細(xì)分:

      • 存儲(chǔ):存儲(chǔ)工程師維護(hù)
      • PV: kubernetes管理員維護(hù)
      • PVC:kubernetes用戶維護(hù)

      PV

      PV是存儲(chǔ)資源的抽象,下面是資源清單文件:

      apiVersion: v1  
      kind: PersistentVolume
      metadata:
        name: pv2
      spec:
        nfs: # 存儲(chǔ)類型,與底層真正存儲(chǔ)對(duì)應(yīng)
        capacity:  # 存儲(chǔ)能力,目前只支持存儲(chǔ)空間的設(shè)置
          storage: 2Gi
        accessModes:  # 訪問(wèn)模式
        storageClassName: # 存儲(chǔ)類別
        persistentVolumeReclaimPolicy: # 回收策略
      

      PV 的關(guān)鍵配置參數(shù)說(shuō)明:

      • 存儲(chǔ)類型

        底層實(shí)際存儲(chǔ)的類型,kubernetes支持多種存儲(chǔ)類型,每種存儲(chǔ)類型的配置都有所差異

      • 存儲(chǔ)能力(capacity)

      目前只支持存儲(chǔ)空間的設(shè)置( storage=1Gi ),不過(guò)未來(lái)可能會(huì)加入IOPS、吞吐量等指標(biāo)的配置

      • 訪問(wèn)模式(accessModes)

        用于描述用戶應(yīng)用對(duì)存儲(chǔ)資源的訪問(wèn)權(quán)限,訪問(wèn)權(quán)限包括下面幾種方式:

        • ReadWriteOnce(RWO):讀寫權(quán)限,但是只能被單個(gè)節(jié)點(diǎn)掛載

        • ReadOnlyMany(ROX): 只讀權(quán)限,可以被多個(gè)節(jié)點(diǎn)掛載

        • ReadWriteMany(RWX):讀寫權(quán)限,可以被多個(gè)節(jié)點(diǎn)掛載

        需要注意的是,底層不同的存儲(chǔ)類型可能支持的訪問(wèn)模式不同

      • 回收策略(persistentVolumeReclaimPolicy)

        當(dāng)PV不再被使用了之后,對(duì)其的處理方式。目前支持三種策略:

        • Retain (保留) 保留數(shù)據(jù),需要管理員手工清理數(shù)據(jù)

        • Recycle(回收) 清除 PV 中的數(shù)據(jù),效果相當(dāng)于執(zhí)行 rm -rf /thevolume/*

        • Delete (刪除) 與 PV 相連的后端存儲(chǔ)完成 volume 的刪除操作,當(dāng)然這常見于云服務(wù)商的存儲(chǔ)服務(wù)

        需要注意的是,底層不同的存儲(chǔ)類型可能支持的回收策略不同

      • 存儲(chǔ)類別

        PV可以通過(guò)storageClassName參數(shù)指定一個(gè)存儲(chǔ)類別

        • 具有特定類別的PV只能與請(qǐng)求了該類別的PVC進(jìn)行綁定

        • 未設(shè)定類別的PV則只能與不請(qǐng)求任何類別的PVC進(jìn)行綁定

      • 狀態(tài)(status)

        一個(gè) PV 的生命周期中,可能會(huì)處于4中不同的階段:

        • Available(可用): 表示可用狀態(tài),還未被任何 PVC 綁定

        • Bound(已綁定): 表示 PV 已經(jīng)被 PVC 綁定

        • Released(已釋放): 表示 PVC 被刪除,但是資源還未被集群重新聲明

        • Failed(失敗): 表示該 PV 的自動(dòng)回收失敗

      實(shí)驗(yàn)

      使用NFS作為存儲(chǔ),來(lái)演示PV的使用,創(chuàng)建3個(gè)PV,對(duì)應(yīng)NFS中的3個(gè)暴露的路徑。

      1. 準(zhǔn)備NFS環(huán)境
      # 創(chuàng)建目錄
      [root@nfs ~]# mkdir /root/data/{pv1,pv2,pv3} -pv
      
      # 暴露服務(wù)
      [root@nfs ~]# more /etc/exports
      /root/data/pv1     172.16.5.0/24(rw,no_root_squash)
      /root/data/pv2     172.16.5.0/24(rw,no_root_squash)
      /root/data/pv3     172.16.5.0/24(rw,no_root_squash)
      
      # 重啟服務(wù)
      [root@nfs ~]#  systemctl restart nfs
      
      1. 創(chuàng)建pv.yaml
      apiVersion: v1
      kind: PersistentVolume
      metadata:
        name:  pv1
      spec:
        capacity: 
          storage: 1Gi
        accessModes:
        - ReadWriteMany
        persistentVolumeReclaimPolicy: Retain
        nfs:
          path: /root/data/pv1
          server: 172.16.5.6
      
      ---
      
      apiVersion: v1
      kind: PersistentVolume
      metadata:
        name:  pv2
      spec:
        capacity: 
          storage: 2Gi
        accessModes:
        - ReadWriteMany
        persistentVolumeReclaimPolicy: Retain
        nfs:
          path: /root/data/pv2
          server: 172.16.5.6
          
      ---
      
      apiVersion: v1
      kind: PersistentVolume
      metadata:
        name:  pv3
      spec:
        capacity: 
          storage: 3Gi
        accessModes:
        - ReadWriteMany
        persistentVolumeReclaimPolicy: Retain
        nfs:
          path: /root/data/pv3
          server: 172.16.5.6
      
      # 創(chuàng)建 pv
      [root@k8s-master01 ~]# kubectl create -f pv.yaml
      persistentvolume/pv1 created
      persistentvolume/pv2 created
      persistentvolume/pv3 created
      
      # 查看pv
      [root@k8s-master01 ~]# kubectl get pv -o wide
      NAME   CAPACITY   ACCESS MODES  RECLAIM POLICY  STATUS      AGE   VOLUMEMODE
      pv1    1Gi        RWX            Retain        Available    10s   Filesystem
      pv2    2Gi        RWX            Retain        Available    10s   Filesystem
      pv3    3Gi        RWX            Retain        Available    9s    Filesystem
      

      PVC

      PVC是資源的申請(qǐng),用來(lái)聲明對(duì)存儲(chǔ)空間、訪問(wèn)模式、存儲(chǔ)類別需求信息。下面是資源清單文件:

      apiVersion: v1
      kind: PersistentVolumeClaim
      metadata:
        name: pvc
        namespace: dev
      spec:
        accessModes: # 訪問(wèn)模式
        selector: # 采用標(biāo)簽對(duì)PV選擇
        storageClassName: # 存儲(chǔ)類別
        resources: # 請(qǐng)求空間
          requests:
            storage: 5Gi
      

      PVC 的關(guān)鍵配置參數(shù)說(shuō)明:

      • 訪問(wèn)模式(accessModes)

      用于描述用戶應(yīng)用對(duì)存儲(chǔ)資源的訪問(wèn)權(quán)限

      • 選擇條件(selector)

        通過(guò)Label Selector的設(shè)置,可使PVC對(duì)于系統(tǒng)中己存在的PV進(jìn)行篩選

      • 存儲(chǔ)類別(storageClassName)

        PVC在定義時(shí)可以設(shè)定需要的后端存儲(chǔ)的類別,只有設(shè)置了該class的pv才能被系統(tǒng)選出

      • 資源請(qǐng)求(Resources )

        描述對(duì)存儲(chǔ)資源的請(qǐng)求

      實(shí)驗(yàn)

      1. 創(chuàng)建pvc.yaml,申請(qǐng)pv
      apiVersion: v1
      kind: PersistentVolumeClaim
      metadata:
        name: pvc1
        namespace: dev
      spec:
        accessModes: 
        - ReadWriteMany
        resources:
          requests:
            storage: 1Gi
      ---
      apiVersion: v1
      kind: PersistentVolumeClaim
      metadata:
        name: pvc2
        namespace: dev
      spec:
        accessModes: 
        - ReadWriteMany
        resources:
          requests:
            storage: 1Gi
      ---
      apiVersion: v1
      kind: PersistentVolumeClaim
      metadata:
        name: pvc3
        namespace: dev
      spec:
        accessModes: 
        - ReadWriteMany
        resources:
          requests:
            storage: 1Gi
      
      # 創(chuàng)建pvc
      [root@k8s-master01 ~]# kubectl create -f pvc.yaml
      persistentvolumeclaim/pvc1 created
      persistentvolumeclaim/pvc2 created
      persistentvolumeclaim/pvc3 created
      
      # 查看pvc
      [root@k8s-master01 ~]# kubectl get pvc  -n dev -o wide
      NAME   STATUS   VOLUME   CAPACITY   ACCESS MODES   STORAGECLASS   AGE   VOLUMEMODE
      pvc1   Bound    pv1      1Gi        RWX                           15s   Filesystem
      pvc2   Bound    pv2      2Gi        RWX                           15s   Filesystem
      pvc3   Bound    pv3      3Gi        RWX                           15s   Filesystem
      
      # 查看pv
      [root@k8s-master01 ~]# kubectl get pv -o wide
      NAME  CAPACITY ACCESS MODES  RECLAIM POLICY  STATUS    CLAIM       AGE     VOLUMEMODE
      pv1    1Gi        RWx        Retain          Bound    dev/pvc1    3h37m    Filesystem
      pv2    2Gi        RWX        Retain          Bound    dev/pvc2    3h37m    Filesystem
      pv3    3Gi        RWX        Retain          Bound    dev/pvc3    3h37m    Filesystem   
      
      1. 創(chuàng)建pods.yaml, 使用pv
      apiVersion: v1
      kind: Pod
      metadata:
        name: pod1
        namespace: dev
      spec:
        containers:
        - name: busybox
          image: busybox:1.30
          command: ["/bin/sh","-c","while true;do echo pod1 >> /root/out.txt; sleep 10; done;"]
          volumeMounts:
          - name: volume
            mountPath: /root/
        volumes:
          - name: volume
            persistentVolumeClaim:
              claimName: pvc1
              readOnly: false
      ---
      apiVersion: v1
      kind: Pod
      metadata:
        name: pod2
        namespace: dev
      spec:
        containers:
        - name: busybox
          image: busybox:1.30
          command: ["/bin/sh","-c","while true;do echo pod2 >> /root/out.txt; sleep 10; done;"]
          volumeMounts:
          - name: volume
            mountPath: /root/
        volumes:
          - name: volume
            persistentVolumeClaim:
              claimName: pvc2
              readOnly: false
      
      # 創(chuàng)建pod
      [root@k8s-master01 ~]# kubectl create -f pods.yaml
      pod/pod1 created
      pod/pod2 created
      
      # 查看pod
      [root@k8s-master01 ~]# kubectl get pods -n dev -o wide
      NAME   READY   STATUS    RESTARTS   AGE   IP            NODE   
      pod1   1/1     Running   0          14s   10.244.1.69   node1   
      pod2   1/1     Running   0          14s   10.244.1.70   node1  
      
      # 查看pvc
      [root@k8s-master01 ~]# kubectl get pvc -n dev -o wide
      NAME   STATUS   VOLUME   CAPACITY   ACCESS MODES      AGE   VOLUMEMODE
      pvc1   Bound    pv1      1Gi        RWX               94m   Filesystem
      pvc2   Bound    pv2      2Gi        RWX               94m   Filesystem
      pvc3   Bound    pv3      3Gi        RWX               94m   Filesystem
      
      # 查看pv
      [root@k8s-master01 ~]# kubectl get pv -n dev -o wide
      NAME   CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM       AGE     VOLUMEMODE
      pv1    1Gi        RWX            Retain           Bound    dev/pvc1    5h11m   Filesystem
      pv2    2Gi        RWX            Retain           Bound    dev/pvc2    5h11m   Filesystem
      pv3    3Gi        RWX            Retain           Bound    dev/pvc3    5h11m   Filesystem
      
      # 查看nfs中的文件存儲(chǔ)
      [root@nfs ~]# more /root/data/pv1/out.txt
      node1
      node1
      [root@nfs ~]# more /root/data/pv2/out.txt
      node2
      node2
      

      生命周期

      PVC和PV是一一對(duì)應(yīng)的,PV和PVC之間的相互作用遵循以下生命周期:

      • 資源供應(yīng):管理員手動(dòng)創(chuàng)建底層存儲(chǔ)和PV

      • 資源綁定:用戶創(chuàng)建PVC,kubernetes負(fù)責(zé)根據(jù)PVC的聲明去尋找PV,并綁定

        在用戶定義好PVC之后,系統(tǒng)將根據(jù)PVC對(duì)存儲(chǔ)資源的請(qǐng)求在已存在的PV中選擇一個(gè)滿足條件的

        • 一旦找到,就將該P(yáng)V與用戶定義的PVC進(jìn)行綁定,用戶的應(yīng)用就可以使用這個(gè)PVC了

        • 如果找不到,PVC則會(huì)無(wú)限期處于Pending狀態(tài),直到等到系統(tǒng)管理員創(chuàng)建了一個(gè)符合其要求的PV

        PV一旦綁定到某個(gè)PVC上,就會(huì)被這個(gè)PVC獨(dú)占,不能再與其他PVC進(jìn)行綁定了

      • 資源使用:用戶可在pod中像volume一樣使用pvc

        Pod使用Volume的定義,將PVC掛載到容器內(nèi)的某個(gè)路徑進(jìn)行使用。

      • 資源釋放:用戶刪除pvc來(lái)釋放pv

        當(dāng)存儲(chǔ)資源使用完畢后,用戶可以刪除PVC,與該P(yáng)VC綁定的PV將會(huì)被標(biāo)記為“已釋放”,但還不能立刻與其他PVC進(jìn)行綁定。通過(guò)之前PVC寫入的數(shù)據(jù)可能還被留在存儲(chǔ)設(shè)備上,只有在清除之后該P(yáng)V才能再次使用。

      • 資源回收:kubernetes根據(jù)pv設(shè)置的回收策略進(jìn)行資源的回收

        對(duì)于PV,管理員可以設(shè)定回收策略,用于設(shè)置與之綁定的PVC釋放資源之后如何處理遺留數(shù)據(jù)的問(wèn)題。只有PV的存儲(chǔ)空間完成回收,才能供新的PVC綁定和使用

      配置存儲(chǔ)

      ConfigMap

      ConfigMap是一種比較特殊的存儲(chǔ)卷,它的主要作用是用來(lái)存儲(chǔ)配置信息的。

      創(chuàng)建configmap.yaml,內(nèi)容如下:

      apiVersion: v1
      kind: ConfigMap
      metadata:
        name: configmap
        namespace: dev
      data:
        info: |
          username:admin
          password:123456
      

      接下來(lái),使用此配置文件創(chuàng)建configmap

      # 創(chuàng)建configmap
      [root@k8s-master01 ~]# kubectl create -f configmap.yaml
      configmap/configmap created
      
      # 查看configmap詳情
      [root@k8s-master01 ~]# kubectl describe cm configmap -n dev
      Name:         configmap
      Namespace:    dev
      Labels:       <none>
      Annotations:  <none>
      
      Data
      ====
      info:
      ----
      username:admin
      password:123456
      
      Events:  <none>
      

      接下來(lái)創(chuàng)建一個(gè)pod-configmap.yaml,將上面創(chuàng)建的configmap掛載進(jìn)去

      apiVersion: v1
      kind: Pod
      metadata:
        name: pod-configmap
        namespace: dev
      spec:
        containers:
        - name: nginx
          image: nginx:1.18.0
          volumeMounts: # 將configmap掛載到目錄
          - name: config
            mountPath: /configmap/config
        volumes: # 引用configmap
        - name: config
          configMap:
            name: configmap
      
      # 創(chuàng)建pod
      [root@k8s-master01 ~]# kubectl create -f pod-configmap.yaml
      pod/pod-configmap created
      
      # 查看pod
      [root@k8s-master01 ~]# kubectl get pod pod-configmap -n dev
      NAME            READY   STATUS    RESTARTS   AGE
      pod-configmap   1/1     Running   0          6s
      
      #進(jìn)入容器
      [root@k8s-master01 ~]# kubectl exec -it pod-configmap -n dev /bin/sh
      # cd /configmap/config/
      # ls
      info
      # more info
      username:admin
      password:123456
      
      # 可以看到映射已經(jīng)成功,每個(gè)configmap都映射成了一個(gè)目錄
      # key--->文件     value---->文件中的內(nèi)容
      # 此時(shí)如果更新configmap的內(nèi)容, 容器中的值也會(huì)動(dòng)態(tài)更新
      

      Secret

      在kubernetes中,還存在一種和ConfigMap非常類似的對(duì)象,稱為Secret對(duì)象。它主要用于存儲(chǔ)敏感信息,例如密碼、秘鑰、證書等等。

      1. 首先使用base64對(duì)數(shù)據(jù)進(jìn)行編碼
      [root@k8s-master01 ~]# echo -n 'admin' | base64 #準(zhǔn)備username
      YWRtaW4=
      [root@k8s-master01 ~]# echo -n '123456' | base64 #準(zhǔn)備password
      MTIzNDU2
      
      1. 接下來(lái)編寫secret.yaml,并創(chuàng)建Secret
      apiVersion: v1
      kind: Secret
      metadata:
        name: secret
        namespace: dev
      type: Opaque
      data:
        username: YWRtaW4=
        password: MTIzNDU2
      
      # 創(chuàng)建secret
      [root@k8s-master01 ~]# kubectl create -f secret.yaml
      secret/secret created
      
      # 查看secret詳情
      [root@k8s-master01 ~]# kubectl describe secret secret -n dev
      Name:         secret
      Namespace:    dev
      Labels:       <none>
      Annotations:  <none>
      Type:  Opaque
      Data
      ====
      password:  6 bytes
      username:  5 bytes
      
      1. 創(chuàng)建pod-secret.yaml,將上面創(chuàng)建的secret掛載進(jìn)去:
      apiVersion: v1
      kind: Pod
      metadata:
        name: pod-secret
        namespace: dev
      spec:
        containers:
        - name: nginx
          image: nginx:1.18.0
          volumeMounts: # 將secret掛載到目錄
          - name: config
            mountPath: /secret/config
        volumes:
        - name: config
          secret:
            secretName: secret
      
      # 創(chuàng)建pod
      [root@k8s-master01 ~]# kubectl create -f pod-secret.yaml
      pod/pod-secret created
      
      # 查看pod
      [root@k8s-master01 ~]# kubectl get pod pod-secret -n dev
      NAME            READY   STATUS    RESTARTS   AGE
      pod-secret      1/1     Running   0          2m28s
      
      # 進(jìn)入容器,查看secret信息,發(fā)現(xiàn)已經(jīng)自動(dòng)解碼了
      [root@k8s-master01 ~]# kubectl exec -it pod-secret /bin/sh -n dev
      / # ls /secret/config/
      password  username
      / # more /secret/config/username
      admin
      / # more /secret/config/password
      123456
      

      至此,已經(jīng)實(shí)現(xiàn)了利用secret實(shí)現(xiàn)了信息的編碼。

      posted @ 2025-07-25 09:49  講文張字  閱讀(603)  評(píng)論(0)    收藏  舉報(bào)
      返回頂部
      主站蜘蛛池模板: 亚洲成人资源在线观看| 午夜一区二区三区视频| 中文无码乱人伦中文视频在线| 久久欧洲精品成av人片| 国产乱老熟女乱老熟女视频| 亚洲精品无码高潮喷水A| 性xxxx搡xxxxx搡欧美| 亚洲激情一区二区三区在线| 国产毛片三区二区一区| 婷婷成人丁香五月综合激情| 99久久亚洲综合网精品| 亚洲欧洲精品日韩av| 成人无码午夜在线观看| 亚洲国产午夜精品福利| 亚洲人成网站18禁止无码| 国内精品九九久久久精品| 国产私拍大尺度在线视频| 亚洲综合区激情国产精品| 亚洲香蕉免费有线视频| 无码国产偷倩在线播放| 贞丰县| 午夜色大片在线观看免费| 亚洲高清WWW色好看美女| 久艹视频免费看| 国产精品免费中文字幕| 亚洲精品777| 亚洲V天堂V手机在线 | 东方av四虎在线观看| 乌兰县| 精品黄色av一区二区三区| 国产在线视频导航| 色噜噜一区二区三区| 美女内射福利大全在线看| 精品国产一区二区三区国产馆| 日本欧美一区二区三区在线播放| 97在线碰| 精品无码黑人又粗又大又长 | 激情综合网激情五月俺也想| 日本va欧美va欧美va精品| 亚洲av免费成人精品区| A毛片毛片看免费|