偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

K8S 經典實戰(zhàn)案例:NFS+StorageClass+PV/PVC+Deployment

運維
本篇文章分享一下在 Kubernetes (K8s) 中搭建 NFS 存儲,以及通過 Deployment 使用這些存儲卷的完整流程。

本篇文章分享一下在 Kubernetes (K8s) 中搭建 NFS 存儲,并實現 PersistentVolume (PV)、PersistentVolumeClaim (PVC)、動態(tài)存儲卷StorageClass,以及通過 Deployment 使用這些存儲卷的完整流程,可以按照以下步驟進行。

實驗步驟:

  • 配置 NFS 服務器
  • 創(chuàng)建 StorageClass
  • 創(chuàng)建 PV
  • 創(chuàng)建 PVC
  • 創(chuàng)建 Deployment,并掛載 PVC 到應用

掛載驗證實驗架構圖

圖片圖片

步驟 1: 配置 NFS 服務器

首先,在 Kubernetes 集群外部的服務器上,我們需要搭建一個后端存儲:NFS 服務器。

NFS服務器IP地址:10.0.0.103

(1) 安裝 NFS 服務

yum install -y nfs-utils

(2) 創(chuàng)建共享目錄

mkdir -p /data/nfs

(3) 配置 NFS 共享目錄

編輯 /etc/exports 文件以設置 NFS 共享目錄。

vim /etc/exports

在文件中添加以下行:

/data/nfs *(rw,sync,no_subtree_check)

將 /data/nfs 目錄以讀寫(rw)方式對所有客戶端(*)共享。

(4) 啟動 NFS 服務

啟動并將NFS服務設置開機自啟

systemctl enable --now nfs-server

(5) 導出共享目錄

使共享目錄立即生效:

exportfs -a
 showmount -e

(6) 配置防火墻

如果啟用了防火墻,需要允許 NFS 服務的相關端口:

firewall-cmd --per --add-service=nfs
firewall-cmd --per --add-service=mountd
firewall-cmd --per --add-service=rpc-bind
firewall-cmd --reload

步驟 2: 配置StorageClass

在 Kubernetes 中,我們將使用 StorageClass 來動態(tài)配置存儲卷。通過 PVC 綁定現有的 NFS 存儲。

(1) 創(chuàng)建 StorageClass 配置

創(chuàng)建一個名為 nfs-storage-class.yaml 的文件,內容如下:

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: nfs-storage-class
provisioner: kubernetes.io/no-provisioner  # NFS 不需要動態(tài) provisioner
reclaimPolicy: retain  # 默認值是 Delete
volumeBindingMode: WaitForFirstConsumer   # 等待 Pod 使用 PVC 時才綁定 PV,默認使用 Immediate 模式:立即綁定

(2) 應用 StorageClass 配置

kubectl apply -f nfs-storage-class.yaml

檢查StorageClass狀態(tài)

[root@k8s-master data]# kubectl get storageclass
NAME                PROVISIONER                    RECLAIMPOLICY   VOLUMEBINDINGMODE      ALLOWVOLUMEEXPANSION   AGE
nfs-storage-class   kubernetes.io/no-provisioner   Delete          WaitForFirstConsumer   false                  14s

步驟 3: 創(chuàng)建 PV

創(chuàng)建一個 PersistentVolume (PV),將它指向 NFS 共享的目錄。

(1) 創(chuàng)建 PV 配置文件

創(chuàng)建一個 nfs-pv.yaml 文件,內容如下:

apiVersion: v1
kind: PersistentVolume
metadata:
  name: nfs-pv
spec:
  capacity:
    storage: 10Gi  # 定義 PV 的存儲容量
  volumeMode: Filesystem
  accessModes:
    - ReadWriteMany  # 允許多個 Pod 同時訪問此 PV
  persistentVolumeReclaimPolicy: Retain  # 釋放 PVC 后保留 PV 數據
  storageClassName: nfs-storage-class  # 與 StorageClass 名稱一致
  nfs:
    path: /data/nfs  # NFS 共享目錄的路徑
    server: 10.0.0.103  # 替換為實際的 NFS 服務器 IP

(2) 應用 PV 配置

kubectl apply -f nfs-pv.yaml

檢查 PV 的狀態(tài):

[root@k8s-master data]# kubectl get pv
NAME     CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS        CLAIM            STORAGECLASS        REASON   AGE
nfs-pv   5Gi        RWX            Retain           Available                      nfs-storage-class            5s

如果 PV 配置正確,它應該處于 Available 狀態(tài)。

步驟 4: 創(chuàng)建PVC

創(chuàng)建一個 PersistentVolumeClaim (PVC),它請求使用 NFS 存儲。

(1) 創(chuàng)建 PVC 配置文件

創(chuàng)建一個 nfs-pvc.yaml 文件,內容如下:

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: nfs-pvc
spec:
  accessModes:
    - ReadWriteMany  # 允許多個 Pod 同時訪問
  volumeMode: Filesystem
  resources:
    requests:
      storage: 3Gi  # 請求的存儲容量,不能大于PV容量
  storageClassName: nfs-storage-class  # 與 StorageClass 名稱一致

(2) 應用 PVC 配置

應用 PVC 配置文件:

kubectl apply -f nfs-pvc.yaml

檢查 PVC 的狀態(tài):

[root@k8s-master data]# kubectl get pvc
NAME      STATUS    VOLUME   CAPACITY   ACCESS MODES   STORAGECLASS        AGE
nfs-pvc   Pending                                      nfs-storage-class   4m30s

【溫馨提示】由于在聲明StorageClass時,將volumeBindingMode設置為WaitForFirstConsumer,等待 Pod 使用 PVC 時才綁定 PV,所以現在的PVC是Pending狀態(tài),沒有綁定對應的Pod。

如果volumeBindingMode設置為Immediate,則會立即綁定,顯示為Bound。

步驟 5: 掛載 PVC

創(chuàng)建一個 Deployment,并將 PVC 掛載到 Pod 中。

(1) 創(chuàng)建 Deployment 配置文件

創(chuàng)建一個名為 nginx-deployment.yaml 的文件,內容如下:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  replicas: 1  # 部署 1 個副本(Pod)
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
        - name: nginx
          image: docker.m.daocloud.io/nginx:1.25
          volumeMounts:
            - mountPath: /usr/share/nginx/html  # 將 PVC 掛載到此目錄
              name: nfs-volume
      volumes:
        - name: nfs-volume
          persistentVolumeClaim:
            claimName: nfs-pvc  # 掛載 PVC

(2) 應用 Deployment 配置

kubectl apply -f nginx-deployment.yaml

(3) 再次檢查PVC狀態(tài)

[root@k8s-master data]# kubectl get pvc
NAME      STATUS   VOLUME   CAPACITY   ACCESS MODES   STORAGECLASS        AGE
nfs-pvc   Bound    nfs-pv   5Gi        RWX            nfs-storage-class   10m

此時可以看到已經是Bound狀態(tài),說明已經和Pod產生了關聯。

(4) 檢查 Pod 狀態(tài)

使用以下命令檢查 Pod 狀態(tài):

[root@k8s-master data]# kubectl get pod 
NAME                                READY   STATUS    RESTARTS   AGE
nginx-deployment-645c47fd8b-sjv5m   1/1     Running   0          8m35s

確保 Pod 正在運行并沒有錯誤。

【溫馨提示】如果使用NFS作為后端存儲,需要在每個節(jié)點上安裝NFS客戶端,不然Pod無法連接NFS,導致創(chuàng)建Pod失敗。

步驟 6: 驗證掛載

驗證 Nginx Pod 是否正確掛載了 NFS 存儲。

(1) 進入 Pod 檢查掛載

首先,通過 kubectl exec 命令進入 Pod,檢查 /usr/share/nginx/html 目錄,看看是否已掛載 NFS 存儲

[root@k8s-master data]# kubectl exec -it nginx-deployment-645c47fd8b-sjv5m -- /bin/bash 
root@nginx-deployment-645c47fd8b-sjv5m:/# ls /usr/share/nginx/html
kube-system-es-pv-claim-pvc-ef2cc9a4-d836-49fe-8d30-b9c98238f5b5
root@nginx-deployment-645c47fd8b-sjv5m:/#

如果一切正常,你應該能夠看到 NFS 存儲中的內容。如果是空的,那就意味著 Nginx Pod 已經成功掛載了 NFS 存儲卷。

(2) 測試驗證

測試:給index.html文件增加內容

root@nginx-deployment-645c47fd8b-sjv5m:/usr/share/nginx/html# echo  "hello nginx" > index.html

驗證:進入后端NFS掛載目錄查看:

[root@harbor ~]# cd /data/nfs
[root@harbor nfs]# ls
index.html  kube-system-es-pv-claim-pvc-ef2cc9a4-d836-49fe-8d30-b9c98238f5b5
[root@harbor nfs]# cat index.html 
hello nginx

可以看到在Pod里面創(chuàng)建的數據已經存儲到NFS存儲中。

至此,整個持久化存儲的環(huán)境已經搭建完成。

責任編輯:趙寧寧 來源: 運維李哥不背鍋
相關推薦

2023-09-18 14:34:07

Kubernetes云原生

2023-09-13 09:02:22

PVPVC存儲

2021-05-07 14:03:36

大數據存儲接口CSI

2023-09-06 08:12:04

k8s云原生

2021-08-05 07:28:26

K8sNFS ProvisiSubdir

2021-07-28 10:10:57

K8SMount PVCPod

2022-10-10 12:54:00

Flink運維

2023-11-06 01:17:25

主機容器選項

2024-02-01 09:48:17

2022-04-22 13:32:01

K8s容器引擎架構

2023-09-08 08:09:12

k8sservice服務

2023-02-27 07:40:00

2023-11-06 07:16:22

WasmK8s模塊

2024-06-18 13:22:42

Nginx云原生Kubernetes

2023-11-15 13:44:00

k8s-域名日志

2023-11-27 13:54:00

kubernetes高可用

2023-03-06 07:19:50

2023-09-15 08:00:20

Ingress網關Istio

2023-03-03 07:54:21

2022-11-08 08:55:31

點贊
收藏

51CTO技術棧公眾號