k8s練習--StorageClass詳細解釋與應用

文章目錄

  • 前言
    • StorageClass是什么
  • 一、實驗目的
    • 配置過程
  • 二、實驗環境
  • 實驗步驟
    • 一、配置網絡存儲NFS:
      • 1.主機基礎配置
      • 2.配置 NFS:
    • 二、開啟rbac權限:
    • 三、創建nfs-deployment.yaml
    • 四、創建storageclass資源
    • 五、驗證:
      • 1.創建PVC驗證
      • 2.創建一個pod驗證
      • 3.刪除pod、pvc,pv會自動刪除,nfs數據未刪除


前言

StorageClass是什么

簡單理解
由于在大型環境應用部署環境中,利用靜態方式創建大量的pv是很麻煩的事情,所以為了方便運維人員,我們可以使用StorageClass
storageclass是一種網絡存儲的動態供給方式,它通過連接存儲插件,根據PVC的消費需求,動態生成PV,從而實現方便管理的效果。

詳細解釋
在 Kubernetes 中,StorageClass 是一種抽象,用于定義不同存儲提供者的存儲配置。它提供了一種靈活的方式來管理和動態分配存儲資源。StorageClass 允許集群管理員定義不同類型的存儲(例如 SSD、HDD、網絡存儲等),以及不同的存儲配置(例如不同的性能和備份策略)。

StorageClass 的核心概念

Provisioner(供應者):
Provisioner 是指具體的存儲插件,用于創建實際的存儲卷。例如,常見的 Provisioner 包括 kubernetes.io-ebs(AWS 的 EBS 卷)、kubernetes.io/gce-pd(Google Cloud 的 Persistent Disk)、kubernetes.io/nfs(NFS 存儲)等。

Parameters(參數):
Parameters 定義了存儲類的具體配置選項。這些參數因不同的 Provisioner 而異。例如,對于 AWS EBS,可能包括卷的類型(如 gp2、io1)、I/O 性能參數等。

ReclaimPolicy(回收策略):
ReclaimPolicy 定義了當持久卷(PersistentVolume)不再使用時該如何處理。常見的策略包括:

Retain:
保留卷和數據,需要手動處理。

Delete:
刪除卷和數據。

Recycle:
清空卷并重新用于其他請求(注意,這種策略已經不推薦使用)。

MountOptions(掛載選項):
這些選項指定了掛載卷時使用的掛載參數。例如,可以指定文件系統的掛載選項來優化性能或可靠性。

VolumeBinding(卷綁定模式):
VolumeBinding 控制卷綁定的時機,通常有兩種模式:

Immediate:
立即綁定卷,默認模式。
ForFirst:
等待第一個消費者(Pod)請求時再綁定卷,適用于需要考慮 Pod 調度位置的場景。

一、實驗目的

驗證k8s中StorageClass的動態生產pv

配置過程

(1) 配置網絡存儲—>
(2) 開啟賬號訪問權限(創建賬號、創建權限、給賬號關聯權限)—>
(3) 通過中間件將賬號與共享存儲關聯—>
(4) 配置StorageClass與中間件關聯—>
(5) 創建PVC關聯StorageClass—>
(6) 創建pod關聯pvc,動態生成pv
(7) 驗證

二、實驗環境

Ip主機名cpu內存硬盤
192.168.10.11master1cpu雙核2G40G
192.168.10.12node011cpu雙核2G40G
192.168.10.13node021cpu雙核2G40G
192.168.10.17nfs1cpu1核1G40G

虛擬機 centos7.9

master node01 node02 已部署k8s集群
版本 1.18.0

nfs服務器部署nfs

實驗步驟

一、配置網絡存儲NFS:

1.主機基礎配置

由于nfs是新創建的虛擬機需要關閉防火墻,關閉沙盒

systemctl stop firewalld
systemctl disable firewalld
setenforce 0
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/sysconfig/selinux

2.配置 NFS:

所有主機都需要安裝nfs

yum -y install nfs-utils rpcbind

其次在nfs主機上

mkdir /nfsdata
vim /etc/exports
輸入
/nfsdata *(rw,sync,no_root_squash)
systemctl start rpcbind
systemctl start nfs-server
systemctl enable rpcbind
systemctl enable nfs-server
showmount -e

看到這個nfs就部署成功了
在這里插入圖片描述

二、開啟rbac權限:

RBAC(Role-Based Access Control):基于角色的訪問控制
vim account.yaml

kind: Namespace 
apiVersion: v1 
metadata: name: test 					#自定義了一個名稱空間 
--- 
apiVersion: v1 
kind: ServiceAccount 			#服務類賬號 
metadata: name: nfs-provisioner 		#創建賬號 nfs-provisionernamespace: test 				#指定好自定義的名稱空間。 
--- 
apiVersion: rbac.authorization.k8s.io/v1 
kind: ClusterRole 							#集群類的角色 
metadata: name: nfs-provisioner-runner namespace: test 
rules: 										#規則,指定有什么樣的權限 - apiGroups: [""] 							#“”不寫代表對所有api組具有的權限 resources: ["persistentvolumes"] 					#對pv可以進行什么樣的操作 verbs: ["get", "list", "watch", "create", "delete"] 		#有獲得,創建,刪掉等 等權限- apiGroups: [""] resources: ["persistentvolumeclaims"] 				#pvc有什么樣的權限 verbs: ["get", "list", "watch", "update"] 				#具體權限 - apiGroups: ["storage.k8s.io"] resources: ["storageclasses"] verbs: ["get", "list", "watch"] - apiGroups: [""] resources: ["events"] verbs: ["watch", "create", "update", "patch"] - apiGroups: [""] resources: ["services", "endpoints"] verbs: ["get","create","list", "watch","update"]- apiGroups: ["extensions"] resources: ["podsecuritypolicies"] resourceNames: ["nfs-provisioner"] verbs: ["use"]  
--- 
kind: ClusterRoleBinding 	#cluster開頭的指的都是整個k8s的權限范圍,在集群內都生效 
apiVersion: rbac.authorization.k8s.io/v1 
metadata: name: run-nfs-provisioner 
subjects: - kind: ServiceAccount name: nfs-provisioner namespace: test 
roleRef: kind: ClusterRole name: nfs-provisioner-runner apiGroup: rbac.authorization.k8s.io

簡單注釋
這個 YAML 文件定義了一個 Kubernetes 命名空間 test,在其中創建了一個名為 nfs-provisioner 的服務賬號,并為該賬號設置了一組權限規則,允許其對持久卷、持久卷聲明、存儲類等資源進行特定操作。最后,通過集群角色綁定將權限規則與服務賬號進行了關聯,使得該賬號能夠在指定命名空間內執行相應的操作。

執行這個yaml文件,看到三個created就是運行成功了,如果報錯仔細查看,大概率是字符錯誤

kubectl apply -f nfs-deployment.yaml

在這里插入圖片描述

獲取命名空間 test 中的服務賬號,可以看到已經存在

kubectl -n test get serviceaccounts

在這里插入圖片描述

三、創建nfs-deployment.yaml

通過中間件將訪問賬號與共享存儲關聯
vim nfs-deployment.yaml

apiVersion: apps/v1 
kind: Deployment 
metadata: name: nfs-client-provisioner namespace: test 
spec: selector: matchLabels: app: nfs-client-provisioner replicas: 1 strategy: type: Recreate template: metadata: labels: app: nfs-client-provisioner spec: serviceAccount: nfs-provisioner 		#nfs-provisioner為已創建的服務類賬號   containers: - name: nfs-client-provisioner image: registry.cn-hangzhou.aliyuncs.com/open-ali/nfs-client-provisioner  	#中間件鏡像imagePullPolicy: IfNotPresent volumeMounts: - name: nfs-client-root mountPath: /persistentvolumes env: - name: PROVISIONER_NAME value: pro-test - name: NFS_SERVER value: 192.168.10.17 - name: NFS_PATHvalue: /nfsdata volumes: - name: nfs-client-root nfs:server: 192.168.10.17path: /nfsdata

簡單注釋
在 Kubernetes 集群中部署了一個 NFS 客戶端 provisioner,用于動態創建持久卷,并將其掛載到容器中,以便應用程序可以訪問 NFS 服務器上的數據。

創建然后查看一下,看到即可

kubectl apply -f nfs-deployment.yaml
kubectl -n test get pod

在這里插入圖片描述

四、創建storageclass資源

vim storageclass.yaml
(配置storageclass與中間件關聯)

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:name: storageclassnamespace: test
provisioner: pro-test
#reclaimPolicy: Retain
reclaimPolicy: Delete

創建并查看

kubectl apply -f storageclass.yamlkubectl get sc   

在這里插入圖片描述

五、驗證:

1.創建PVC驗證

vim test-pvc1.yaml

kind: PersistentVolumeClaim
apiVersion: v1
metadata:name: test-pvc1namespace: test
spec:storageClassName: storageclassaccessModes:- ReadWriteManyresources:requests:storage: 200Mi

創建并查看

kubectl apply -f test-pvc1.yaml
kubectl -n test get pv,pvc

在這里插入圖片描述
nfs服務器上查看

 ls /nfsdata/

在這里插入圖片描述

查看pod容器掛載目錄,目錄中無文件

[root@master ~]# kubectl -n test exec -it nfs-client-provisioner-5878bf7b9c-2294l /bin/sh
/ # ls persistentvolumes/
test-test-pvc1-pvc-1738bcd6-3d9b-49f6-9005-3eee8e61eae6
/ # ls persistentvolumes/test-test-pvc1-pvc-1738bcd6-3d9b-49f6-9005-3eee
8e61eae6/
/ #exit

2.創建一個pod驗證

vim test-pod1.yaml

apiVersion: v1
kind: Pod
metadata:name: test-pod1namespace: test
spec:containers:- name: test-pod1image: busyboximagePullPolicy: IfNotPresentargs:- /bin/sh- -c- sleep 3000volumeMounts:- name: nfs-pvmountPath: /testvolumes:- name: nfs-pvpersistentVolumeClaim:claimName: test-pvc1
kubectl apply -f test-pod1.yaml
kubectl get pod -n test

在這里插入圖片描述
向pod1中寫入文件測試

kubectl exec -it -n test test-pod1 -- touch /test/test1.txt

nfs服務器上查看:

 ls /nfsdata/test-test-pvc1-pvc-1738bcd6-3d9b-49f6-9005-3eee8e61eae6/

在這里插入圖片描述

3.刪除pod、pvc,pv會自動刪除,nfs數據未刪除

kubectl -n test get pv,pvc

查看nfs會發現目錄名發生變化,但數據還在

ls /nfsdata/archived-test-test-pvc1-pvc-1738bcd6-3d9b-49f6-9005-3eee8e61eae6/

在這里插入圖片描述

實驗完成

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/21909.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/21909.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/21909.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

C++青少年簡明教程:數組

C青少年簡明教程:數組 C數組是一種存儲固定大小連續元素的數據結構。數組中的每個元素都有一個索引,通過索引可以訪問或修改數組中的元素。 在C中,數組中的元素數據類型必須一致。數組是一個連續的內存區域,用于存儲相同類型的元…

期權懂帶你懂50etf認沽期權和認購期權有什么區別?

今天帶你了解期權懂帶你懂50etf認沽期權和認購期權有什么區別?在金融市場中,期權是一種允許持有者在未來某個時間以特定價格買入或賣出基礎資產的金融衍生品。 50etf認沽期權和認購期權有什么區別? 50ETF認沽期權和認購期權的主要區別在于它…

算法題day39(補5.25日卡:貪心算法day6)

一、刷題 1.leetcode題目 738. 單調遞增的數字 - 力扣(LeetCode)(medium) 解決: class Solution:def monotoneIncreasingDigits(self, n: int) -> int:list_n list(str(n))list_n [int(i) for i in list_n]for…

聚類算法—DBSCAN算法

文章目錄 DBSCAN算法基本概念1個核心思想:基于密度2個算法參數:鄰域半徑R和最少點數目minpoints3種點的類別:核心點,邊界點和噪聲點4種點的關系:密度直達,密度可達,密度相連,非密度相…

3131. 找出與數組相加的整數 I

給你兩個長度相等的數組 nums1 和 nums2。 數組 nums1 中的每個元素都與變量 x 所表示的整數相加。如果 x 為負數,則表現為元素值的減少。 在與 x 相加后,nums1 和 nums2 相等 。當兩個數組中包含相同的整數,并且這些整數出現的頻次相同時&…

Spi Pwm Tim 對比分析

spi SPI時序圖 (spi是主從機 所以主機需要從機數據 需要主極先喊從機 把從機喊答應了 才能開始讀從機的數據) cpol時鐘極性 和cpha時鐘相位分析 1.cpha為高,cpol為高,則偶數上升沿有效 2.cpha為高,cpol為低,則偶數…

JVM之【GC-垃圾清除算法】

Java虛擬機(JVM)中的垃圾收集算法主要分為以下幾種: 標記-清除算法(Mark-Sweep)復制算法(Copying)標記-整理算法(Mark-Compact)分代收集算法(Generational C…

vue3+three.js給glb模型設置視頻貼圖

1.在網上下載一個顯示屏或者自己畫一個,在blender中設置好顯示屏的Mesh,UV設置好,這樣方便代碼中添加紋理貼圖。可以讓美術在建模軟件中,先隨機設置一張圖片作為紋理,驗證UV是否設置好 關于如何 在blender中給模型設置UV貼圖百度很多的 // 視頻 import * as THREE from…

MacOS13-將數據庫轉為markdown,docx格式

MacOS13-將數據庫轉為markdown,docx格式 文章目錄 先說踩坑點各種模塊缺失 代碼效果總結參考 先說踩坑點 各種模塊缺失 tkinter mysql 沒錯,你可以直接點擊安裝; 如果還出現報錯 你需要打開終端 pip install mysqlclient再次點進去安…

xcode開發swift允許發送http請求設置

Xcode 現在新建項目默認只支持HTTPS請求,認為HTTP請求不安全,所以不支持。但是開發環境一般都是http模式,所以需要單獨配置才可以訪問。 需要到項目的設置里面,點擊info,如果沒有App Transport Security Setting這一項…

項目優化方案之---實現郵箱用戶登錄

之前的項目中我寫的基于SpringBoot和Vue的全棧項目已經實現了基本的用戶接口開發, 不過其代碼的功能單一,而且寫的也是有不少漏洞(基本就像剛接手的代碼*山一樣) 那之后的幾篇文章都來分享一下如何優化項目(每一章都獨…

Python優化、異常處理與性能提升技巧

Python作為一種高效的編程語言,其靈活性和強大的功能使得它成為了許多開發者的首選。在日常的編程實踐中,掌握一些高效的Python技巧可以極大地提升開發效率和代碼質量。本文將介紹五個關于Python使用技巧,幫助你更加熟練地運用Python解決問題…

JMeter性能測試實現與分析分享

JMeter是由著名開源軟件巨頭Apache組織開發的純Java的壓力測試工具,它即能測試動態服務(WebService),也能測試靜態資源,包括Servlet服務、CGI腳本等,還能測試動態語言服務(PHP、Java、ASP.NET等…

Cocos Creator開發學習路線

1.JavaScript與TypeScript程序設計 由于可以跨平臺發布,同時要能支持h5的游戲,cocos creator選擇了JavaScript與TypeScript來做為它的開發語言,所以我們要先學習JavaScript與TypeScript。TypeScript是基于JavaScript的一個語法糖,運行的時候被編譯為JavaScript,所以我們要…

JVM學習-監控工具(二)

jmap:導出內存映像文件&內存使用情況 基本情況 jmap(JVM Memory Map):一方法獲取dump文件(堆轉儲快照文件,二進制文件),還可以獲取目標Java進程的內存相關信息,包括Java堆各區域的使用情況、堆中對象的統計信息、…

MyBatis學習(二)--MyBatis獲取參數值的兩種方式

1、搭建新的module:mybatis_parameter MyBatis獲取參數值的兩種方式:${}和#{} ${}的本質就是字符串拼接,采用sql拼接,無法防止sql注入 #{}的本質就是占位符賦值 ,采用預編譯 防止sql注入 不同參數使用案例 2、單個字面量類型…

OpenHarmony嵌套類對象屬性變化:@Observed裝飾器和@ObjectLink裝飾器

上文所述的裝飾器僅能觀察到第一層的變化,但是在實際應用開發中,應用會根據開發需要,封裝自己的數據模型。對于多層嵌套的情況,比如二維數組,或者數組項class,或者class的屬性是class,他們的第二…

實時瞳孔分割算法-RITnet論文復現

源代碼在這里RITnet-Github 這個模型比較小眾,我們實驗室使用了官方提供的模型進行瞳孔中心位置提取,以實現視線追蹤,效果很好 一、數據集準備 RITnet也是那一屆openEDS數據集挑戰賽的冠軍模型,openEDS數據集可以從Kaggle上下載&a…

數據結構--關鍵路徑

事件v1-表示整個工程開始(源點:入度為0的頂點) 事件v9-表示整個工程結束(匯點:出度為0的頂點) 關鍵路徑:路徑長度最長的路徑 求解關鍵路徑問題(AOE網) 定義四個描述量 …

網絡網絡層之(6)ICMPv4協議

網絡網絡層之(6)ICMPv4協議 Author: Once Day Date: 2024年6月2日 一位熱衷于Linux學習和開發的菜鳥,試圖譜寫一場冒險之旅,也許終點只是一場白日夢… 漫漫長路,有人對你微笑過嘛… 全系列文章可參考專欄: 通信網絡技術_Once-Day的博客-CS…