日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

nfs服务器_Kubernetes集群下部署NFS持久存储

發布時間:2024/7/23 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 nfs服务器_Kubernetes集群下部署NFS持久存储 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

NFS是網絡文件系統Network File System的縮寫,NFS服務器可以讓PC將網絡中的NFS服務器共享的目錄掛載到本地的文件系統中,而在本地的系統中來看,那個遠程主機的目錄就好像是自己的一個磁盤分區一樣。

kubernetes使用NFS共享存儲有兩種方式:

1.手動方式靜態創建所需要的PV和PVC。

2.通過創建PVC動態地創建對應PV,無需手動創建PV。

下面對這兩種方式進行配置并進行演示。

一、搭建NFS服務器

k8s集群準備,以這篇文章為例:https://www.toutiao.com/i6768745162030973447/?group_id=6768745162030973447

這里演示在master節點上部署NFS服務器。服務器操作系統:Centos7.5.

#master節點安裝nfsyum -y install nfs-utils#創建nfs目錄mkdir /data#修改權限chmod??-R 777 /data#編輯export文件vim /etc/exports/data *(rw,no_root_squash,sync)#配置生效exportfs -r#查看生效exportfs#啟動rpcbind、nfs服務systemctl restart rpcbind && systemctl enable rpcbindsystemctl restart nfs && systemctl enable nfs#所有node節點安裝客戶端?(很重要)yum -y install nfs-utils?systemctl start nfs && systemctl enable nfs?#查看?RPC?服務的注冊狀況rpcinfo -p localhost#showmount測試showmount -e 10.211.55.4

二、靜態申請PV卷

添加pv卷對應目錄,這里創建1個pv卷,則添加1個pv卷的目錄作為掛載點。

#創建pv卷對應的目錄mkdir -p /data/pv01#配置exportrsvim /etc/exports/data *(rw,no_root_squash,sync)/data/pv01 *(rw,no_root_squash,sync)#配置生效exportfs -r#重啟rpcbind、nfs服務systemctl restart rpcbind && systemctl restart nfs

創建PV

下面創建1個名為pv01的PV卷,配置文件 nfspv01.yaml 如下:

apiVersion: v1kind: PersistentVolumemetadata:??name: nfspv01??labels:????pv: nfspv01spec:??capacity:????storage: 1Gi??accessModes:????- ReadWriteOnce??persistentVolumeReclaimPolicy: Recycle??storageClassName: nfs??nfs:????path: /data/pv01????server: 10.211.55.4?

配置說明:

① capacity 指定 PV 的容量為 1G。

② accessModes 指定訪問模式為 ReadWriteOnce,支持的訪問模式有:

ReadWriteOnce – PV 能以 read-write 模式 mount 到單個節點。

ReadOnlyMany – PV 能以 read-only 模式 mount 到多個節點。

ReadWriteMany – PV 能以 read-write 模式 mount 到多個節點。

③ persistentVolumeReclaimPolicy 指定當 PV 的回收策略為 Recycle,支持的策略有:

Retain – 需要管理員手工回收。

Recycle – 清除 PV 中的數據,效果相當于執行 rm -rf /thevolume/*。

Delete – 刪除 Storage Provider 上的對應存儲資源,例如 AWS EBS、GCE PD、Azure

Disk、OpenStack Cinder Volume 等。

④ storageClassName 指定 PV 的 class 為 nfs。相當于為 PV 設置了一個分類,PVC 可以指定 class 申請相應 class 的PV。

⑤ 指定 PV 在 NFS 服務器上對應的目錄

創建PV命令:kubectl create -f nfspv01.yaml

創建成功后查看PV:kubectl get pv

創建PVC

接下來創建一個名為pvc01的PVC,配置文件 nfspvc01.yaml 如下:

apiVersion: v1kind: PersistentVolumeClaimmetadata:??name: nfspvc01spec:??accessModes:????- ReadWriteOnce??resources:????requests:??????storage: 1Gi??storageClassName: nfs??selector:????matchLabels:??????pv: nfspv01

創建PVC命令: kubectl create -f nfspvc01.yaml

創建成功后查看PVC:kubectl get pvc

創建測試POD

Pod 配置文件 nfspodtest.yaml 如下:

kind: PodapiVersion: v1metadat:??name: nfspodtestspec:??containers:????- name: nfspodtest??????image: nginx??????volumeMounts:??????- mountPath: "/var/www/html"????????name: nfsvolumetest??volumes:????- name: nfsvolumetest??????persistentVolumeClaim:????????claimName: nfspvc01

創建POD命令:kubectl create -f nfspodtest.yaml

查看POD命令:kubectl get pod

驗證 PV

進入容器目錄創建文件:kubectl exec nfspodtest touch /var/www/html/test.html

查看NFS服務器真實目錄: ll /data/pv01

進入pod查看掛載情況

kubectl exec -it nfspodtest /bin/bash

root@nfs-pod001:/# df -h

刪除pv

刪除pod,pv和pvc不會被刪除,nfs存儲的數據不會被刪除。

刪除POD命令: kubectl delete pod nfspodtest

刪除pvc,pv將被釋放,處于 Available 可用狀態,并且nfs存儲中的數據被刪除。

刪除PVC命令: kubectl delete pvc nfspvc01

刪除pv

刪除PV命令: kubectl delete pv nfspv01

動態申請PV卷

External NFS驅動的工作原理

K8S的外部NFS驅動,可以按照其工作方式(是作為NFS server還是NFS client)分為兩類:

1.nfs-client:

也就是我們接下來演示的這一類,它通過K8S的內置的NFS驅動掛載遠端的NFS服務器到本地目錄;然后將自身作為storage provider,關聯storage class。當用戶創建對應的PVC來申請PV時,該provider就將PVC的要求與自身的屬性比較,一旦滿足就在本地掛載好的NFS目錄中創建PV所屬的子目錄,為Pod提供動態的存儲服務。

2.nfs:

與nfs-client不同,該驅動并不使用k8s的NFS驅動來掛載遠端的NFS到本地再分配,而是直接將本地文件映射到容器內部,然后在容器內使用ganesha.nfsd來對外提供NFS服務;在每次創建PV的時候,直接在本地的NFS根目錄中創建對應文件夾,并export出該子目錄。

利用NFS動態提供Kubernetes后端存儲卷

本文將介紹使用nfs-client-provisioner這個應用,利用NFS Server給Kubernetes作為持久存儲的后端,并且動態提供PV。前提條件是有已經安裝好的NFS服務器,并且NFS服務器與Kubernetes的Slave節點都能網絡連通。將nfs-client驅動做一個deployment部署到K8S集群中,然后對外提供存儲服務。nfs-client-provisioner 是一個Kubernetes的簡易NFS的外部provisioner,本身不提供NFS,需要現有的NFS服務器提供存儲

部署nfs-client-provisioner

首先克隆倉庫獲取yaml文件

git clone https://github.com/kubernetes-incubator/external-storage.git

cp -R external-storage/nfs-client/deploy/ $HOME

cd deploy

配置授權

如果集群啟用了RBAC,則必須執行如下命令授權provisioner,rbac.yaml文件內容:

apiVersion: v1kind: ServiceAccountmetadata:?name: nfs-client-provisioner??# replace with namespace where provisioner is deployed??namespace: default---kind: ClusterRoleapiVersion: rbac.authorization.k8s.io/v1metadata:??name: nfs-client-provisioner-runnerrules:??- apiGroups: [""]????resources: ["persistentvolumes"]????verbs: ["get", "list", "watch", "create", "delete"]??- apiGroups: [""]????resources: ["persistentvolumeclaims"]????verbs: ["get", "list", "watch", "update"]??- apiGroups: ["storage.k8s.io"]????resources: ["storageclasses"]????verbs: ["get", "list", "watch"]??- apiGroups: [""]????resources: ["events"]????verbs: ["create", "update", "patch"]---kind: ClusterRoleBindingapiVersion: rbac.authorization.k8s.io/v1metadata:??name: run-nfs-client-provisionersubjects:??- kind: ServiceAccount????name: nfs-client-provisioner????# replace with namespace where provisioner is deployed????namespace: defaultroleRef:??kind: ClusterRole??name: nfs-client-provisioner-runner??apiGroup: rbac.authorization.k8s.io---kind: RoleapiVersion: rbac.authorization.k8s.io/v1metadata:??name: leader-locking-nfs-client-provisioner????# replace with namespace where provisioner is deployed??namespace: defaultrules:??- apiGroups: [""]????resources: ["endpoints"]????verbs: ["get", "list", "watch", "create", "update", "patch"]---kind: RoleBindingapiVersion: rbac.authorization.k8s.io/v1metadata:??name: leader-locking-nfs-client-provisionersubjects:??- kind: ServiceAccount????name: nfs-client-provisioner????# replace with namespace where provisioner is deployed????namespace: defaultroleRef:??kind: Role??name: leader-locking-nfs-client-provisioner??apiGroup: rbac.authorization.k8s.io

命令: kubectl create -f rbac.yaml

修改deployment.yaml文件

這里修改的參數包括NFS服務器所在的IP地址(10.211.55.4),以及NFS服務器共享的路徑(/data),兩處都需要修改為你實際的NFS服務器和共享目錄。

apiVersion: apps/v1kind: Deploymentmetadata:??name: nfs-client-provisioner??labels:????app: nfs-client-provisioner??# replace with namespace where provisioner is deployed??namespace: defaultspec:??replicas: 1??selector:????matchLabels:??????app: nfs-client-provisioner??strategy:????type: Recreate??selector:????matchLabels:??????app: nfs-client-provisioner??template:????metadata:??????labels:????????app: nfs-client-provisioner????spec:??????serviceAccountName: nfs-client-provisioner??????containers:????????- name: nfs-client-provisioner??????????image:?willdockerhub/nfs-client-provisioner:latest??????????volumeMounts:????????????- name: nfs-client-root??????????????mountPath: /persistentvolumes??????????env:????????????- name: PROVISIONER_NAME??????????????value: fuseim.pri/ifs????????????- name: NFS_SERVER??????????????value: 10.211.55.4????????????- name: NFS_PATH??????????????value: /data??????volumes:????????- name: nfs-client-root??????????nfs:????????????server: 10.211.55.4????????????path: /data

執行命令:kubectl create-f deployment.yaml

查看POD:kubectl get pod

創建StorageClass

class.yaml 文件內容: kubectl create -f class.yaml

apiVersion: storage.k8s.io/v1kind: StorageClassmetadata:??name: managed-nfs-storageprovisioner: fuseim.pri/ifs # or choose another name, must match deployment's env PROVISIONER_NAME'parameters:??archiveOnDelete: "false"

查看創建的storageclass: kubectl get sc

創建測試PVC

test-claim.yaml文件內容:

kind: PersistentVolumeClaimapiVersion: v1metadata:??name: test-claim??annotations:????volume.beta.kubernetes.io/storage-class: "managed-nfs-storage"spec:??accessModes:????- ReadWriteMany??resources:????requests:??????storage: 1Mi

命令:kubectl create -f test-claim.yaml

查看PVC,自動創建的PV,它們的綁定關系:

查看NFS服務器實際目錄, 我們進入到NFS的export目錄,可以看到對應該volume name的目錄已經創建出來了。其中volume的名字是namespace,PVC name以及uuid的組合:

創建測試Pod

test-pod.yaml 文件內容:

kind: PodapiVersion: v1metadata:??name: test-podspec:??containers:??- name: test-pod????image: gcr.io/google_containers/busybox:1.24????command:??????- "/bin/sh"????args:??????- "-c"??????- "touch /mnt/SUCCESS && exit 0 || exit 1"????volumeMounts:??????- name: nfs-pvc????????mountPath: "/mnt"??restartPolicy: "Never"??volumes:????- name: nfs-pvc??????persistentVolumeClaim:????????claimName: test-claim

命令:kubectl create -f test-pod.yaml

查看POD,實際目錄有無產生文件:

清理測試環境

刪除測試POD:kubectl delete -f test-pod.yaml

刪除測試PVC: kubectl delete -f test-claim.yaml

發現在NFS服務器上的共享目錄下查看NFS的PV卷已經被刪除:

總結

以上是生活随笔為你收集整理的nfs服务器_Kubernetes集群下部署NFS持久存储的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。