欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Kubernetes中使用PersistentVolume掛載云盤方式

 更新時間:2024年02月27日 09:43:42   作者:Vic·Tory  
這篇文章主要介紹了Kubernetes中使用PersistentVolume掛載云盤方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教

Kubernetes中可用將本地磁盤作為存儲掛載到容器上,但這樣做的弊端是當容器出現(xiàn)異常而重啟之后數(shù)據(jù)也會隨之消失

    spec:
      containers:
      - name: logs
	   # 掛載
        volumeMounts:
        - name: varlog
          mountPath: /tmp/log
      # 定義本地存儲
      volumes:
      - name: varlog
        hostPath:
          path: /var/log

為了實現(xiàn)容器存儲與計算的分離,可將容器的數(shù)據(jù)單獨存放到**網絡共享存儲(Network File System,NFS)**服務器上,當容器掛掉之后并不會影響到數(shù)據(jù),之后容器重啟或一個新的容器連接到服務器后可以重新讀取到數(shù)據(jù)

1 NFS的使用

首先需要將一臺服務器配置為NFS服務器

# 安裝nfs
yum install -y nfs-utils
# 創(chuàng)建存放數(shù)據(jù)的目錄
mkdir -p /data/nfs
# 創(chuàng)建并設置掛載路徑
vim /etc/exports
/data/nfs *(rw,no_root_squash)
# 啟動服務
systemctl start nfs

之后在K8s集群的Node節(jié)點上也安裝nfs服務

yum install -y nfs-utils

最后就可以使用nfs作為數(shù)據(jù)掛載點了,在其中定義nfs服務器的地址server和其上面的存儲路徑path。

通過如下配置文件就將pod中的 /usr/share/nginx/html 掛載到了 192.168.44.134/data/nfs

    spec:
      containers:
      - name: nginx
        image: nginx
        volumeMounts:
        # 掛載nfs
        - name: mynfs
          mountPath: /usr/share/nginx/html
        ports:
        - containerPort: 80
      volumes:
      # 定義nfs數(shù)據(jù)掛載點
        - name: mynfs
          nfs:
            server: 192.168.44.134
            path: /data/nfs

2 PV與PVC

上面的nfs掛載時ip 和端口是直接寫在容器yaml文件中的,這樣管理起來可能不方便。PV 和 PVC 是持久性存儲的概念,它們可幫助我們在集群中管理持久性存儲,使數(shù)據(jù)更加穩(wěn)定可靠:

1.PV(Persistent Volume):一個抽象的存儲資源,可以由管理員預先設置,并由集群中的一個 Pod 來使用。它可以是磁盤,NFS 共享或云存儲等存儲資源。PV 可以被動態(tài)或靜態(tài)地綁定到一個 PVC 上,以供 Pod 使用。

2.PVC(Persistent Volume Claim):一個聲明,它請求一個特定的 PV 資源。PVC 定義了我們所需的存儲容量、訪問模式、數(shù)據(jù)持久性和其他細節(jié),從而與 PV 進行匹配。當 PVC 綁定到 PV 上時,它就可以被 Pod 使用了。

2.1 使用

如下所示PV定義文件mypv.yaml,在其中定義其存儲大小、路徑等信息,通過kubectl apply -f mypv.yaml創(chuàng)建PV

apiVersion: v1
kind: PersistentVolume
metadata:
  name: my-pv
spec:
  capacity:
    storage: 5Gi
  accessModes:
    - ReadWriteMany
  nfs:
  	# 定義PV的存儲路徑
    path: /k8s/nfs
    server: 192.168.44.134

創(chuàng)建PVC,系統(tǒng)會自動選擇合適的PV分配給它進行綁定,可以在其中定義需要的存儲容量、訪問模式等信息

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: my-pvc
spec:
  # 訪問模式;描述用戶應用對存儲資源的訪問權限
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      # 資源請求的存儲大小
      storage: 5Gi

其中,accessModes有如下三種模式

  • RWO:ReadWriteOnce,僅允許單個節(jié)點掛載進行讀寫;
  • ROX:ReadOnlyMany,允許多個節(jié)點掛載且只讀;
  • RWX:ReadWriteMany,允許多個節(jié)點掛載進行讀寫;

最后在創(chuàng)建容器時就可以通過PVC的方式掛載存儲,不必關心其底層存儲PV的實現(xiàn)細節(jié)

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-dep1
spec:
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx
        volumeMounts:
        - name: wwwroot
          mountPath: /usr/share/nginx/html
        ports:
        - containerPort: 80
      volumes:
      - name: wwwroot
        # 掛載到my-pvc
        persistentVolumeClaim:
          claimName: my-pvc

2.2 PV和PVC的生命周期

如圖所示,PVC在與PV綁定之后狀態(tài)就會變?yōu)?code>Bound,PVC一共有如下幾種狀態(tài):

  • Available: 可用狀態(tài),無PV綁定;
  • Bound:綁定狀態(tài),已經和某個PV綁定;
  • Released:釋放狀態(tài),被綁定的PV已刪除,資源釋放,但沒有被集群回收;
  • Failed:失敗狀態(tài),自動資源回收失?。?/li>

如下所示,容器Pod經過PVC -> PV 使用存儲資源,其生命周期可以分為供應、綁定、使用、釋放和回收

  • 資源供應:通過PV建立對不同磁盤資源的描述,提供PV資源給消費者使用
  • 資源綁定:創(chuàng)建好PVC后,PVC會在已存在的PV中選擇合適的PV進行綁定,綁定成功,狀態(tài)變成Bound,且該PV被對應的PVC獨占綁定,不可以再被其他PVC綁定,除非該PVC釋放。若在k8s系統(tǒng)中沒有找到合適的PV,則PVC一直處于Pending狀態(tài)。
  • 資源使用:在通過Deployment創(chuàng)建容器時,在spec.template.spec.volumes進行磁盤掛載時選擇persistentVolumeClaim掛載到對應的PVC。
  • 資源釋放:刪除PVC,與該PVC綁定的PV狀態(tài)就會變成“Released”,該PVC在存儲設備上的數(shù)據(jù)刪除后,對應的PV才能與其他的PVC進行綁定。
  • 資源回收:PV中可以通過spec.persistentVolumeReclaimPolicy設置回收策略,用于在綁定的PVC刪除后,資源釋放后如何處理PVC寫入存儲設備的數(shù)據(jù):
  • Retain:保留,刪除PVC后,PV保留數(shù)據(jù);
  • Recycle:回收空間,刪除PVC后,簡單的清除文件;(NFS和HostPath存儲支持)
  • Delete:刪除,刪除PVC后,與PV相連接的后端存儲會刪除數(shù)據(jù);(AWS EBS、Azure Disk、Cinder volumes、GCE PD支持)

2.3 PV與PVC的綁定

PV與PVC之間可以通過靜態(tài)綁定或者動態(tài)綁定建立連接:

  • 靜態(tài)模式就是集群管理員預先創(chuàng)建對應的PV對存儲特性進行設置;
  • 動態(tài)模式就是管理員預先創(chuàng)建好StorageClass資源對后端存儲進行描述,PVC創(chuàng)建時對存儲類型進行聲明,k8s會自動創(chuàng)建合適的PV與PVC進行綁定。

手動綁定

如下所示,首先定義一個test-pv1

[root@k8s /pv_test]#  vim test_pv1.yaml 
apiVersion: v1
kind: PersistentVolume
metadata:
	# 定義PV的名字
  name: test-pv1
  labels:
    pv: test-pv1
spec:
  capacity:
    storage: 2Mi
  accessModes:
  - ReadWriteMany
  persistentVolumeReclaimPolicy: Retain
  nfs:
    path: /date-nfs/k8s
    server: 10.139.12.14

之后定義 PVC,在其中通過spec.selector.matchLabels標簽匹配上面定義的test-pv1

[root@k8s /pvc_test]#  vim test_pvc1.yaml 
#persistent Volume Claim
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: test-pvc1
  namespace: t1
spec:
  #storageClassName: managed-nfs-storage
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 1Mi
  selector:
    # 手動進行綁定
    matchLabels:
      pv: test-pv1

動態(tài)綁定

上面的手動綁定無法根據(jù)PVC的訪問模式,容量大小等實際需要靈活地匹配到合適的PV,每次去手動選擇或創(chuàng)建PV會變得十分繁瑣。

這時可以通過StorageClass根據(jù)pvc定義的來動態(tài)創(chuàng)建合適的pv,不僅節(jié)省了管理員的時間,還可以封裝不同類型的存儲供pvc選用。

如下所示通過StorageClass將PVC和PV進行自動綁定的過程

首先創(chuàng)建一個StorageClass

[root@master1 sc]# cat nfs-sc.yaml
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: statefu-nfs
  namespace: default
# 云盤資源提供方
provisioner: nfs-deploy     
reclaimPolicy: Retain

[root@master1 sc]# kubectl apply -f nfs-sc.yaml
storageclass.storage.k8s.io/statefu-nfs created

然后創(chuàng)建PVC,在其中配置spec.storageClassName為上面的創(chuàng)建的statefu-nfs。

[root@master1 sc]# cat test-pvc.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: test-claim
  namespace: default
spec:
  storageClassName: statefu-nfs   #sc一定要指向上面創(chuàng)建的sc名稱
  accessModes:
    - ReadWriteMany   #采用ReadWriteMany的訪問模式
  resources:
    requests:
      storage: 1Gi
      
[root@master1 sc]# kubectl apply -f test-pvc.yaml

可以看到PVC test-claim創(chuàng)建成功之后,隨之自動創(chuàng)建了對應的PV并且綁定到了test-claim

[root@master1 sc]# kubectl get pvc
NAME         STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS   AGE
test-claim   Bound    pvc-0b9e1107-fefc-48b9-a5ec-8f8690e94435   1Gi        RWX            statefu-nfs    107m

[root@master1 sc]# kubectl get pv
NAME             CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM            STORAGECLASS   REASON   AGE
pvc-0b9e1107-fefc-48b9-a5ec-8f8690e94435  1Gi  RWX  Delete   Bound   default/test-claim statefu-nfs          107m

總結

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。 

相關文章

  • kubectl?命令詳解

    kubectl?命令詳解

    這篇文章主要介紹了kubectl?命令的相關資料,包括常用命令,基本命令和使用說明,本文給大家介紹的非常詳細,感興趣的朋友一起看看吧
    2025-04-04
  • 虛擬化和云計算的區(qū)別分析

    虛擬化和云計算的區(qū)別分析

    這篇文章主要介紹了虛擬化和云計算的區(qū)別,深入淺出的列舉分析了虛擬化與云計算的幾點常見區(qū)別,需要的朋友可以參考下
    2016-10-10
  • 超詳細的Kubernetes?(k8s)常用命令整理

    超詳細的Kubernetes?(k8s)常用命令整理

    這篇文章主要介紹了Kubernetes?(k8s)常用命令整理的相關資料,講解了Kubernetes集群管理、節(jié)點資源查看、Pod管理、部署管理、命名空間管理、服務負載均衡、調試排錯以及備份恢復等操作的命令,需要的朋友可以參考下
    2025-03-03
  • K8s學習之Pod的定義及詳細資源調用案例

    K8s學習之Pod的定義及詳細資源調用案例

    Kubernetes將所有內容抽象為資源,通過操作資源管理集群,核心單元是Pod,通過控制器管理Pod,資源管理分為命令式對象管理、命令式對象配置和聲明式對象配置,各有適用場景,需要的朋友可以參考下
    2024-09-09
  • k8s高可用集群安裝教程

    k8s高可用集群安裝教程

    本文給大家介紹k8s高可用集群安裝教程,本文通過圖文示例相結合給大家介紹的非常詳細,感興趣的朋友一起看看吧
    2025-03-03
  • 理解k8s控制器DaemonSet創(chuàng)建及使用場景

    理解k8s控制器DaemonSet創(chuàng)建及使用場景

    這篇文章主要為大家介紹了k8s控制器DaemonSet創(chuàng)建及使用場景詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-09-09
  • Rainbond配置組件自動構建部署官方文檔講解

    Rainbond配置組件自動構建部署官方文檔講解

    這篇文章主要為大家介紹了Rainbond配置組件自動構建部署官方文檔講解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-04-04
  • Jenkins打包、發(fā)布、部署完整驟記錄

    Jenkins打包、發(fā)布、部署完整驟記錄

    這篇文章主要介紹了Jenkins的基本概念,服務器環(huán)境檢查,以及如何安裝和配置Jenkins,包括安裝FTP服務、Maven、Git和Jenkins本身,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2025-03-03
  • 普通人如何在區(qū)塊鏈行業(yè)賺錢

    普通人如何在區(qū)塊鏈行業(yè)賺錢

    區(qū)塊鏈是一項新技術。之所以快速吸引人們的關注,是因為比特幣在2017年的暴漲,迅速吸引了大眾的視線。而比特幣的底層技術,主要是區(qū)塊鏈技術
    2018-03-03
  • 從小飯館客流量變大論云原生負載均衡

    從小飯館客流量變大論云原生負載均衡

    這篇文章主要為大家介紹了從小飯館客流量變大來討論云原生負載均衡,為大家做出更生動易懂的云原生解釋說明有需要的朋友可以借鑒參考下
    2022-03-03

最新評論