k8s存儲介紹(六)StorangeClass

一、Kubernetes 存儲類(StorageClass)詳解

1. 什么是 StorageClass?

在 Kubernetes 中,StorageClass(存儲類)是一種用于動態創建 PersistentVolume(PV)的資源對象。它允許管理員根據不同的存儲需求創建不同的存儲策略,用戶只需要聲明 PersistentVolumeClaim(PVC)并指定 StorageClass,Kubernetes 就能自動分配相應的存儲。

2. 為什么需要 StorageClass?

在沒有 StorageClass 的情況下,管理員需要手動創建 PersistentVolume,并與 PersistentVolumeClaim 進行匹配。這種方式適用于靜態存儲,但在大規模集群或云環境下,動態創建存儲更加靈活。因此,StorageClass 解決了以下問題:

  • 自動化存儲分配:無需手動創建 PV,而是由 Kubernetes 負責創建和管理。

  • 支持不同的存儲后端:適用于 AWS EBS、Google Persistent Disk、Azure Disk、NFS、Ceph 等多種存儲方案。

  • 提供不同的存儲策略:支持不同的存儲性能(高 IOPS、低延遲)、快照、備份等需求。

3. StorageClass 的關鍵字段

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:name: fast-storage
provisioner: kubernetes.io/aws-ebs
parameters:type: gp2
reclaimPolicy: Delete
volumeBindingMode: Immediate
allowVolumeExpansion: true
主要字段解析:
  • provisioner:指定存儲供應商,例如 AWS EBS(kubernetes.io/aws-ebs)、Google Cloud Persistent Disk(kubernetes.io/gce-pd)等。

  • parameters:存儲類的參數,例如磁盤類型、性能級別等。

  • reclaimPolicy(回收策略):定義存儲釋放后的行為。

    • Delete(刪除):刪除 PV 和底層存儲。

    • Retain(保留):數據仍然保留,需要手動清理。

    • Recycle(回收):(已廢棄)清理數據后重新使用。

  • volumeBindingMode(卷綁定模式):

    • Immediate(立即綁定):PVC 創建時立即綁定。

    • WaitForFirstConsumer(等待首個消費者):只有 Pod 使用 PVC 時才會綁定 PV,適用于多可用區調度。

  • allowVolumeExpansion(允許擴容):是否允許存儲動態擴展。

4. 常見存儲供應商

存儲后端Provisioner適用場景
AWS EBSkubernetes.io/aws-ebsAWS 云環境,塊存儲
GCE PDkubernetes.io/gce-pdGCP 云存儲
Azure Diskkubernetes.io/azure-diskAzure 云存儲
NFSkubernetes.io/nfs共享存儲
Cephceph.com/rbd分布式存儲

5. PVC 使用 StorageClass 示例

創建 PVC 時使用 StorageClass
apiVersion: v1
kind: PersistentVolumeClaim
metadata:name: example-pvc
spec:accessModes:- ReadWriteOnceresources:requests:storage: 10GistorageClassName: fast-storage
Pod 掛載 PVC 示例
apiVersion: v1
kind: Pod
metadata:name: example-pod
spec:containers:- name: app-containerimage: nginxvolumeMounts:- mountPath: "/usr/share/nginx/html"name: storagevolumes:- name: storagepersistentVolumeClaim:claimName: example-pvc

6. StorageClass 的應用場景

  1. 自動化存儲管理:減少手動創建 PV 的復雜性,適用于云環境。

  2. 多種存儲策略:支持不同的存儲性能需求,如 SSD、高吞吐磁盤等。

  3. 多可用區支持:結合 WaitForFirstConsumer 模式,提高存儲調度靈活性。

  4. 動態擴展存儲:支持 PVC 擴容,提高存儲彈性。

7. 總結

  • StorageClass 允許 Kubernetes 動態創建 PV,簡化存儲管理。

  • 適用于云存儲、分布式存儲和本地存儲等多種場景。

  • 通過 reclaimPolicyvolumeBindingModeallowVolumeExpansion 提供靈活的存儲策略。

  • 在 CI/CD、數據庫存儲、日志存儲等場景下廣泛應用。

二、在 Kubernetes 中使用 NFS 作為存儲類(StorageClass)

1. 部署 NFS 服務器與客戶端

在 Kubernetes 集群的某個節點上安裝 NFS 服務器。(但是在每個節點都要安裝NFS客戶端)

安裝 NFS 服務器(以 Ubuntu 為例)
sudo apt update && sudo apt install -y nfs-kernel-server
sudo mkdir -p /mnt/nfs-share
sudo chmod 777 /mnt/nfs-share
sudo echo "/mnt/nfs-share *(rw,sync,no_root_squash,no_subtree_check)" | sudo tee -a /etc/exports
sudo exportfs -rav
sudo systemctl restart nfs-kernel-server

安裝 NFS 客戶端

sudo apt update && sudo apt install -y nfs-common

2. 創建 NFS StorageClass

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:name: nfs-storage
provisioner: nfs-provisioner
parameters:archiveOnDelete: "false"

3. 部署 NFS Provisioner(Dynamic Provisioning)

apiVersion: apps/v1
kind: Deployment
metadata:name: nfs-provisioner
spec:replicas: 1selector:matchLabels:app: nfs-provisionertemplate:metadata:labels:app: nfs-provisionerspec:containers:- name: nfs-provisionerimage: quay.io/external_storage/nfs-client-provisioner:latestvolumeMounts:- mountPath: /persistentvolumesname: nfs-volumeenv:- name: NFS_SERVERvalue: "<NFS服務器IP>"- name: NFS_PATHvalue: "/mnt/nfs-share"volumes:- name: nfs-volumenfs:server: "<NFS服務器IP>"path: "/mnt/nfs-share"

4. 創建 PersistentVolumeClaim (PVC)

apiVersion: v1
kind: PersistentVolumeClaim
metadata:name: nfs-pvc
spec:accessModes:- ReadWriteManyresources:requests:storage: 5GistorageClassName: nfs-storage

5. 在 Pod 中掛載 PVC

apiVersion: v1
kind: Pod
metadata:name: nfs-pod
spec:containers:- name: app-containerimage: nginxvolumeMounts:- mountPath: "/usr/share/nginx/html"name: nfs-storagevolumes:- name: nfs-storagepersistentVolumeClaim:claimName: nfs-pvc

6. 驗證 NFS 掛載是否成功

kubectl apply -f nfs-storageclass.yaml
kubectl apply -f nfs-provisioner.yaml
kubectl apply -f nfs-pvc.yaml
kubectl apply -f nfs-pod.yaml
kubectl get pods
kubectl exec -it nfs-pod -- df -h

如果成功,Pod 內 /usr/share/nginx/html 目錄將會掛載到 NFS 服務器的 /mnt/nfs-share,多個 Pod 可以共享此存儲。

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

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

相關文章

C++:allocator類(動態數組續)

1.為什么需要 allocator&#xff1f; 在 C 中&#xff0c;動態內存管理通常通過 new 和 delete 完成&#xff1a; int* p new int; // 分配內存 構造對象 delete p; // 析構對象 釋放內存 但 new 和 delete 有兩個問題&#xff1a; 耦合性&#xff1a;將內…

北斗導航 | 中國北斗衛星導航系統的發展歷程——“三步走”戰略:背景,信號頻點,調制方式,短報文,等

中國北斗衛星導航系統的發展歷程按照“三步走”戰略逐步推進,從區域服務到全球覆蓋,形成了北斗一號、北斗二號、北斗三號三代系統的迭代升級,展現了中國航天科技的自主創新與突破。以下是各階段的核心內容與發展特點綜述:一、北斗一號:中國衛星導航的奠基(1994-2003年) …

Headless Chrome 優化:減少內存占用與提速技巧

在當今數據驅動的時代&#xff0c;爬蟲技術在各行各業扮演著重要角色。傳統的爬蟲方法往往因為界面渲染和資源消耗過高而無法滿足大規模數據采集的需求。本文將深度剖析 Headless Chrome 的優化方案&#xff0c;重點探討如何利用代理 IP、Cookie 和 User-Agent 設置實現內存占用…

英偉達GB300新寵:新型LPDDR5X SOCAMM內存

隨著人工智能&#xff08;AI&#xff09;、機器學習&#xff08;ML&#xff09;和高性能計算&#xff08;HPC&#xff09;應用的快速發展&#xff0c;對于高效能、大容量且低延遲內存的需求日益增長。NVIDIA在其GB系列GPU中引入了不同的內存模塊設計&#xff0c;以滿足這些嚴格…

靜態網頁應用開發環境搭建實戰教程

1. 前言 靜態網頁開發是前端工程師的基礎技能之一&#xff0c;無論是個人博客、企業官網還是簡單的Web應用&#xff0c;都離不開HTML、CSS和JavaScript。搭建一個高效的開發環境&#xff0c;能夠極大提升開發效率&#xff0c;減少重復工作&#xff0c;并優化調試體驗。 本教程…

Python每日一題(9)

Python每日一題 2025.3.29 一、題目二、分析三、源代碼四、deepseek答案五、源代碼與ai分析 一、題目 question["""企業發放的獎金根據利潤提成。利潤(I)低于或等于10萬元時,獎金可提10%,利潤高于10萬元,低于20萬元時,低于10萬元的部分按10%提成,高于10萬元的部…

游戲引擎學習第187天

看起來觀眾解決了上次的bug 昨天遇到了一個相對困難的bug&#xff0c;可以說它相當棘手。剛開始的時候&#xff0c;沒有立刻想到什么合適的解決辦法&#xff0c;所以今天得從頭開始&#xff0c;逐步驗證之前的假設&#xff0c;收集足夠的信息&#xff0c;逐一排查可能的原因&a…

【入門初級篇】布局類組件的使用(1)

【入門初級篇】布局類組件的使用&#xff08;1&#xff09; 視頻要點 &#xff08;1&#xff09;章節大綱介紹 &#xff08;2&#xff09;布局類組件類型介紹&#xff1a;行布局、列布局、標題 &#xff08;3&#xff09;實操演示&#xff1a;列表統計查詢布局模型 點擊訪問my…

對內核fork進程中寫時復制的理解記錄

前言 文章寫于學習Redis時對aof后臺重寫中寫時復制的疑問 一、感到不理解的歧義 在部分技術文檔中&#xff08;以小林的文章為例&#xff09;&#xff0c;對寫時復制后的內存權限存在如歧義&#xff1a; ! 二、正確技術表述 根據Linux內核實現&#xff08;5.15版本&#x…

Ditto-Talkinghead:阿里巴巴數字人技術新突破 [特殊字符]?

Ditto-Talkinghead&#xff1a;阿里巴巴數字人技術新突破 &#x1f5e3;? 阿里巴巴推出了一項新的數字人技術&#xff0c;名為 Ditto-Talkinghead。這項技術主要用于生成由音頻驅動的說話頭&#xff0c;也就是我們常說的“數字人”。不過&#xff0c;現有的基于擴散模型的同類…

.NET開發基礎知識1-10

1. 依賴注入&#xff08;Dependency Injection&#xff09; 技術知識&#xff1a;依賴注入是一種設計模式&#xff0c;它允許將對象的依賴關系從對象本身中分離出來&#xff0c;通過構造函數、屬性或方法參數等方式注入到對象中。這樣可以提高代碼的可測試性、可維護性和可擴展…

每日一題 MySQL基礎知識----(三)

數據庫常用基礎知識&#xff1a;代碼講解和實驗 1.創建數據庫student 02&#xff0c;創建一個名為student02的數據庫 CREATE DATABASE student02; 2.在student02中創建一張 students表&#xff0c;并且具有學生的編號id&#xff0c;姓名name&#xff0c;年齡age&#xff0c;生…

MySQL多表查詢實驗

1.數據準備 -- 以下語句用于創建 students 表&#xff0c;該表存儲學生的基本信息 -- 定義表名為 students CREATE TABLE students (-- 定義學生的唯一標識符&#xff0c;類型為整數&#xff0c;作為主鍵&#xff0c;且支持自動遞增student_id INT PRIMARY KEY AUTO_INCREMENT…

windows第二十章 單文檔應用程序

文章目錄 單文檔定義新建一個單文檔應用程序單文檔應用程序組成&#xff1a;APP應用程序類框架類&#xff08;窗口類&#xff09;視圖類&#xff08;窗口類&#xff0c;屬于框架的子窗口&#xff09;文檔類&#xff08;對數據進行保存讀取操作&#xff09; 直接用向導創建單文檔…

C++ 初階總復習 (16~30)

C 初階總復習 &#xff08;16~30&#xff09; 目的16. 2009. volatile關鍵字的作用17. 2010.什么是多態 簡單介紹下C的多態18. 2011. 什么是虛函數 介紹下C中虛函數的原理19. 2012 構造函數可以是虛函數嘛20. 2013.析構函數一定要是虛函數嘛&#xff1f;21. 2015. 什么是C中的虛…

第一天 Linux驅動程序簡介

目錄 一、驅動的作用 二、裸機驅動 VS linux驅動 1、裸機驅動 2、linux驅動 三、linux驅動位于哪里&#xff1f; 四、應用編程 VS 內核編程 1、共同點 2、不同點 五、linux驅動分類 1、字符設備 2、塊設備 3、網絡設備 六、Linux驅動學習難點與誤區 1、學習難點 …

PaddleX產線集成功能的使用整理

一、環境搭建 1.1 安裝paddle-gpu 需要根據安裝機器的cuda的版本&#xff0c;選擇合適的版本進行安裝 #安裝paddle-gpu 官網鏈接 https://www.paddlepaddle.org.cn/install/quick?docurl/documentation/docs/zh/install/pip/linux-pip.html python -m pip install paddle…

docker-compese 啟動mysql8.0.36與phpmyadmin,并使用web連接數據庫

1、找一個文件夾&#xff0c;比如 E:\zqy\file\mysql&#xff0c;cd到這個目錄下創建文件docker-compose.yml 2、將下面的代碼塊復制到docker-compose.yml文件中 version: 3.3 services:mysql:image: mysql:8.0.36container_name: mysqlrestart: alwaysports:- 3306:3306netw…

解決 Gradle 構建錯誤:Could not get unknown property ‘withoutJclOverSlf4J’

解決 Gradle 構建錯誤&#xff1a;Could not get unknown property ‘withoutJclOverSlf4J’ 在構建 Spring 源碼或其他基于 Gradle 的項目時&#xff0c;可能會遇到如下錯誤&#xff1a; Could not get unknown property withoutJclOverSlf4J for object of type org.gradle…

mcp 接freecad畫齒輪

from mcp.server.fastmcp import FastMCP import freecad.gears.commands import os from freecad import app from freecad import part mcp FastMCP("Demo")mcp.tool() def create_gear(num_teeth20,height10,double_helix True):"""創建一個漸開線…