91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Kubernetes存儲(chǔ)管理功能的落地實(shí)踐

馬哥Linux運(yùn)維 ? 來(lái)源:馬哥Linux運(yùn)維 ? 2026-02-26 14:45 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

Kubernetes存儲(chǔ)管理:PV、PVC與StorageClass

一、概述

1.1 背景介紹

容器本身是無(wú)狀態(tài)的,Pod重啟后容器內(nèi)的數(shù)據(jù)全部丟失。數(shù)據(jù)庫(kù)、消息隊(duì)列、文件存儲(chǔ)這類有狀態(tài)服務(wù)跑在K8s上,必須解決持久化存儲(chǔ)問(wèn)題。Kubernetes通過(guò)PersistentVolume(PV)、PersistentVolumeClaim(PVC)和StorageClass三層抽象來(lái)管理存儲(chǔ)。

實(shí)際生產(chǎn)中踩過(guò)的坑:開(kāi)發(fā)團(tuán)隊(duì)直接在Pod里用hostPath掛載宿主機(jī)目錄,Pod漂移到其他節(jié)點(diǎn)后數(shù)據(jù)就丟了。還有團(tuán)隊(duì)手動(dòng)創(chuàng)建了100個(gè)PV,每次擴(kuò)容都要運(yùn)維手動(dòng)操作,效率極低。StorageClass的動(dòng)態(tài)供給機(jī)制就是解決這個(gè)問(wèn)題的。

本文覆蓋靜態(tài)供給、動(dòng)態(tài)供給、本地存儲(chǔ)、NFS、Ceph RBD等常見(jiàn)存儲(chǔ)方案,基于Kubernetes 1.28.x版本。

1.2 技術(shù)特點(diǎn)

存儲(chǔ)與計(jì)算解耦:PV是集群級(jí)別的存儲(chǔ)資源,PVC是用戶對(duì)存儲(chǔ)的申請(qǐng),兩者通過(guò)綁定關(guān)系關(guān)聯(lián),Pod只需要引用PVC

動(dòng)態(tài)供給:StorageClass配合Provisioner自動(dòng)創(chuàng)建PV,無(wú)需運(yùn)維手動(dòng)干預(yù)

訪問(wèn)模式控制:ReadWriteOnce(單節(jié)點(diǎn)讀寫(xiě))、ReadOnlyMany(多節(jié)點(diǎn)只讀)、ReadWriteMany(多節(jié)點(diǎn)讀寫(xiě)),不同存儲(chǔ)后端支持的模式不同

回收策略:Retain(保留數(shù)據(jù))、Delete(刪除數(shù)據(jù))、Recycle(已廢棄),控制PVC刪除后PV的處理方式

1.3 適用場(chǎng)景

場(chǎng)景一:數(shù)據(jù)庫(kù)(MySQL、PostgreSQL)持久化存儲(chǔ),要求高IOPS和數(shù)據(jù)安全

場(chǎng)景二:日志、文件上傳等共享存儲(chǔ),多個(gè)Pod需要同時(shí)讀寫(xiě)同一份數(shù)據(jù)

場(chǎng)景三:AI訓(xùn)練數(shù)據(jù)集存儲(chǔ),大容量、高吞吐量讀取

場(chǎng)景四:StatefulSet有狀態(tài)應(yīng)用,每個(gè)Pod需要獨(dú)立的持久化卷

1.4 環(huán)境要求

組件 版本要求 說(shuō)明
Kubernetes 1.24+ CSI驅(qū)動(dòng)在1.13 GA,本文使用1.28
NFS Server NFSv4 共享存儲(chǔ)方案,需要獨(dú)立NFS服務(wù)器
Ceph 16.x+ (Pacific) 分布式存儲(chǔ)方案,生產(chǎn)推薦
nfs-subdir-external-provisioner 4.0+ NFS動(dòng)態(tài)供給控制器
ceph-csi 3.9+ Ceph CSI驅(qū)動(dòng)
存儲(chǔ)節(jié)點(diǎn)磁盤(pán) SSD/HDD按需 數(shù)據(jù)庫(kù)用SSD,歸檔用HDD

二、詳細(xì)步驟

2.1 準(zhǔn)備工作

2.1.1 存儲(chǔ)基礎(chǔ)概念

PV、PVC、StorageClass的關(guān)系:

用戶視角:Pod → PVC(我需要10Gi存儲(chǔ))
        ↓ 綁定
管理員視角:  PV(這塊10Gi的存儲(chǔ)可以用)
        ↑ 創(chuàng)建
自動(dòng)化視角:  StorageClass + Provisioner(自動(dòng)創(chuàng)建PV)
# 查看集群現(xiàn)有的StorageClass
kubectl get sc

# 查看PV和PVC
kubectl get pv
kubectl get pvc -A

# 查看CSI驅(qū)動(dòng)
kubectl get csidrivers

2.1.2 存儲(chǔ)方案選型

存儲(chǔ)方案 訪問(wèn)模式 性能 適用場(chǎng)景 運(yùn)維復(fù)雜度
hostPath RWO 高(本地磁盤(pán)) 測(cè)試環(huán)境,單節(jié)點(diǎn)
Local PV RWO 高(本地SSD) 數(shù)據(jù)庫(kù),對(duì)IO敏感
NFS RWO/ROX/RWX 共享文件存儲(chǔ)
Ceph RBD RWO 數(shù)據(jù)庫(kù),塊存儲(chǔ)
CephFS RWO/ROX/RWX 中高 共享文件存儲(chǔ)
云廠商EBS/云盤(pán) RWO 云環(huán)境數(shù)據(jù)庫(kù)
Longhorn RWO/RWX 輕量級(jí)分布式存儲(chǔ)

2.1.3 搭建NFS服務(wù)器

NFS是最簡(jiǎn)單的共享存儲(chǔ)方案,適合中小規(guī)模集群:

# NFS服務(wù)器(192.168.1.50)上執(zhí)行
apt-get install -y nfs-kernel-server

# 創(chuàng)建共享目錄
mkdir -p /data/nfs/k8s
chown nobody:nogroup /data/nfs/k8s
chmod 755 /data/nfs/k8s

# 配置NFS導(dǎo)出
cat > /etc/exports <

K8s所有Worker節(jié)點(diǎn)安裝NFS客戶端:

# Ubuntu
apt-get install -y nfs-common

# CentOS
yum install -y nfs-utils

# 驗(yàn)證能掛載
mount -t nfs 192.168.1.50:/data/nfs/k8s /mnt
ls /mnt
umount /mnt

注意:no_root_squash允許客戶端以root身份寫(xiě)入,生產(chǎn)環(huán)境如果安全要求高,改為root_squash并通過(guò)initContainer設(shè)置目錄權(quán)限。

2.2 核心配置

2.2.1 靜態(tài)PV/PVC(手動(dòng)創(chuàng)建)

適合存儲(chǔ)資源固定、數(shù)量少的場(chǎng)景:

# 文件:nfs-pv-static.yaml
apiVersion:v1
kind:PersistentVolume
metadata:
name:nfs-pv-data-01
labels:
 type:nfs
 env:production
spec:
capacity:
 storage:50Gi
accessModes:
 -ReadWriteMany
persistentVolumeReclaimPolicy:Retain
storageClassName:""
nfs:
 server:192.168.1.50
 path:/data/nfs/k8s/data-01
---
apiVersion:v1
kind:PersistentVolumeClaim
metadata:
name:app-data-pvc
namespace:production
spec:
accessModes:
 -ReadWriteMany
resources:
 requests:
  storage:50Gi
storageClassName:""
selector:
 matchLabels:
  type:nfs
  env:production
# 先在NFS服務(wù)器上創(chuàng)建目錄
mkdir -p /data/nfs/k8s/data-01

# 創(chuàng)建PV和PVC
kubectl apply -f nfs-pv-static.yaml

# 驗(yàn)證綁定狀態(tài)
kubectl get pv nfs-pv-data-01
# STATUS應(yīng)該是Bound

kubectl get pvc app-data-pvc -n production
# STATUS應(yīng)該是Bound

注意:靜態(tài)PV的storageClassName設(shè)為空字符串"",PVC也要設(shè)為空字符串,這樣PVC只會(huì)綁定沒(méi)有StorageClass的PV。如果不設(shè)置這個(gè)字段,PVC會(huì)嘗試使用默認(rèn)StorageClass進(jìn)行動(dòng)態(tài)供給。

2.2.2 NFS動(dòng)態(tài)供給(StorageClass)

安裝nfs-subdir-external-provisioner,實(shí)現(xiàn)NFS的動(dòng)態(tài)PV創(chuàng)建:

# 使用Helm安裝
helm repo add nfs-subdir-external-provisioner 
 https://kubernetes-sigs.github.io/nfs-subdir-external-provisioner/

helm install nfs-provisioner nfs-subdir-external-provisioner/nfs-subdir-external-provisioner 
 --namespace kube-system 
 --setnfs.server=192.168.1.50 
 --setnfs.path=/data/nfs/k8s 
 --setstorageClass.name=nfs-client 
 --setstorageClass.defaultClass=false
 --setstorageClass.reclaimPolicy=Retain 
 --setstorageClass.archiveOnDelete=true

# 驗(yàn)證StorageClass創(chuàng)建成功
kubectl get sc nfs-client

手動(dòng)創(chuàng)建StorageClass(不用Helm的方式):

# 文件:nfs-storageclass.yaml
apiVersion:storage.k8s.io/v1
kind:StorageClass
metadata:
name:nfs-client
annotations:
 storageclass.kubernetes.io/is-default-class:"false"
provisioner:cluster.local/nfs-provisioner
parameters:
archiveOnDelete:"true"
reclaimPolicy:Retain
volumeBindingMode:Immediate
allowVolumeExpansion:true
mountOptions:
-hard
-nfsvers=4.1
-timeo=600
-retrans=3

參數(shù)說(shuō)明

archiveOnDelete: "true":PVC刪除時(shí)不刪除NFS上的數(shù)據(jù),而是重命名目錄加archived-前綴,防止誤刪

reclaimPolicy: Retain:PVC刪除后PV保留,需要手動(dòng)清理。生產(chǎn)環(huán)境必須用Retain,用Delete會(huì)直接刪數(shù)據(jù)

volumeBindingMode: Immediate:PVC創(chuàng)建后立即綁定PV。Local PV要用WaitForFirstConsumer

allowVolumeExpansion: true:允許PVC擴(kuò)容,NFS支持在線擴(kuò)容

2.2.3 Local PV(本地持久卷)

適合數(shù)據(jù)庫(kù)等對(duì)IO性能敏感的場(chǎng)景,數(shù)據(jù)存儲(chǔ)在節(jié)點(diǎn)本地SSD上:

# 文件:local-storageclass.yaml
apiVersion:storage.k8s.io/v1
kind:StorageClass
metadata:
name:local-ssd
provisioner:kubernetes.io/no-provisioner
volumeBindingMode:WaitForFirstConsumer
reclaimPolicy:Retain
# 文件:local-pv.yaml
apiVersion:v1
kind:PersistentVolume
metadata:
name:local-pv-worker01-ssd01
spec:
capacity:
 storage:100Gi
accessModes:
 -ReadWriteOnce
persistentVolumeReclaimPolicy:Retain
storageClassName:local-ssd
local:
 path:/data/local-volumes/ssd01
nodeAffinity:
 required:
  nodeSelectorTerms:
   -matchExpressions:
     -key:kubernetes.io/hostname
      operator:In
      values:
       -k8s-worker-01
# 在對(duì)應(yīng)節(jié)點(diǎn)上創(chuàng)建目錄
mkdir -p /data/local-volumes/ssd01

# 如果是獨(dú)立SSD,掛載到該目錄
# mkfs.xfs /dev/sdb
# mount /dev/sdb /data/local-volumes/ssd01
# echo '/dev/sdb /data/local-volumes/ssd01 xfs defaults 0 0' >> /etc/fstab

kubectl apply -flocal-storageclass.yaml
kubectl apply -flocal-pv.yaml

警告:Local PV的數(shù)據(jù)和節(jié)點(diǎn)綁定,節(jié)點(diǎn)故障數(shù)據(jù)就丟了。生產(chǎn)環(huán)境用Local PV必須配合應(yīng)用層的數(shù)據(jù)復(fù)制(如MySQL主從、Redis Sentinel)來(lái)保證數(shù)據(jù)安全。

2.2.4 Ceph RBD存儲(chǔ)(生產(chǎn)推薦)

Ceph提供塊存儲(chǔ)(RBD)和文件存儲(chǔ)(CephFS),通過(guò)ceph-csi驅(qū)動(dòng)接入K8s:

# 前提:已有Ceph集群,獲取以下信息
# - Ceph Monitor地址:192.168.1.60:6789,192.168.1.61:6789,192.168.1.62:6789
# - Ceph集群ID:通過(guò) ceph fsid 獲取
# - 管理員密鑰:通過(guò) ceph auth get-key client.admin 獲取

# 在Ceph集群上創(chuàng)建K8s專用pool和用戶
ceph osd pool create k8s-rbd 128 128
ceph osd pool applicationenablek8s-rbd rbd
rbd pool init k8s-rbd

ceph auth get-or-create client.k8s-rbd 
 mon'profile rbd'
 osd'profile rbd pool=k8s-rbd'
 -o /etc/ceph/ceph.client.k8s-rbd.keyring

在K8s中配置ceph-csi:

# 安裝ceph-csi(使用Helm)
helm repo add ceph-csi https://ceph.github.io/csi-charts

helm install ceph-csi-rbd ceph-csi/ceph-csi-rbd 
 --namespace ceph-csi 
 --create-namespace 
 --setcsiConfig[0].clusterID= 
 --setcsiConfig[0].monitors[0]=192.168.1.60:6789 
 --setcsiConfig[0].monitors[1]=192.168.1.61:6789 
 --setcsiConfig[0].monitors[2]=192.168.1.62:6789

創(chuàng)建Secret和StorageClass:

# 文件:ceph-rbd-secret.yaml
apiVersion:v1
kind:Secret
metadata:
name:ceph-rbd-secret
namespace:ceph-csi
type:kubernetes.io/rbd
stringData:
userID:k8s-rbd
userKey:
---
apiVersion:v1
kind:Secret
metadata:
name:ceph-rbd-admin-secret
namespace:ceph-csi
type:kubernetes.io/rbd
stringData:
userID:admin
userKey:
# 文件:ceph-rbd-storageclass.yaml
apiVersion:storage.k8s.io/v1
kind:StorageClass
metadata:
name:ceph-rbd
annotations:
 storageclass.kubernetes.io/is-default-class:"true"
provisioner:rbd.csi.ceph.com
parameters:
clusterID:
pool:k8s-rbd
imageFormat:"2"
imageFeatures:layering
csi.storage.k8s.io/provisioner-secret-name:ceph-rbd-secret
csi.storage.k8s.io/provisioner-secret-namespace:ceph-csi
csi.storage.k8s.io/controller-expand-secret-name:ceph-rbd-secret
csi.storage.k8s.io/controller-expand-secret-namespace:ceph-csi
csi.storage.k8s.io/node-stage-secret-name:ceph-rbd-secret
csi.storage.k8s.io/node-stage-secret-namespace:ceph-csi
reclaimPolicy:Retain
allowVolumeExpansion:true
volumeBindingMode:Immediate
mountOptions:
-discard
kubectl apply -f ceph-rbd-secret.yaml
kubectl apply -f ceph-rbd-storageclass.yaml

# 驗(yàn)證
kubectl get sc ceph-rbd

2.2.5 PVC擴(kuò)容

# 確認(rèn)StorageClass支持?jǐn)U容
kubectl get sc ceph-rbd -o jsonpath='{.allowVolumeExpansion}'
# 輸出:true

# 編輯PVC,修改storage大小
kubectl patch pvc mysql-data -n database -p'{"spec":{"resources":{"requests":{"storage":"200Gi"}}}}'

# 查看擴(kuò)容狀態(tài)
kubectl get pvc mysql-data -n database
# 如果顯示 FileSystemResizePending,需要Pod重啟后才能完成文件系統(tǒng)擴(kuò)容
# Ceph RBD支持在線擴(kuò)容,不需要重啟Pod

kubectl get events -n database --field-selector involvedObject.name=mysql-data

注意:PVC只能擴(kuò)容不能縮容。NFS支持在線擴(kuò)容,Ceph RBD支持在線擴(kuò)容,Local PV不支持?jǐn)U容。

2.3 啟動(dòng)和驗(yàn)證

2.3.1 使用PVC的Pod

# 文件:app-with-pvc.yaml
apiVersion:apps/v1
kind:Deployment
metadata:
name:app-with-storage
namespace:default
spec:
replicas:3
selector:
 matchLabels:
  app:app-storage
template:
 metadata:
  labels:
   app:app-storage
 spec:
  containers:
   -name:app
    image:nginx:1.24
    volumeMounts:
     -name:shared-data
      mountPath:/usr/share/nginx/html
     -name:logs
      mountPath:/var/log/nginx
    resources:
     requests:
      cpu:100m
      memory:128Mi
  volumes:
   -name:shared-data
    persistentVolumeClaim:
     claimName:app-shared-pvc
   -name:logs
    persistentVolumeClaim:
     claimName:app-logs-pvc
---
apiVersion:v1
kind:PersistentVolumeClaim
metadata:
name:app-shared-pvc
namespace:default
spec:
accessModes:
 -ReadWriteMany
storageClassName:nfs-client
resources:
 requests:
  storage:10Gi
---
apiVersion:v1
kind:PersistentVolumeClaim
metadata:
name:app-logs-pvc
namespace:default
spec:
accessModes:
 -ReadWriteMany
storageClassName:nfs-client
resources:
 requests:
  storage:20Gi
kubectl apply -f app-with-pvc.yaml

# 驗(yàn)證PVC綁定
kubectl get pvc -n default
# NAME       STATUS  VOLUME                   CAPACITY  ACCESS MODES  STORAGECLASS
# app-shared-pvc  Bound  pvc-xxxx-xxxx               10Gi    RWX      nfs-client
# app-logs-pvc   Bound  pvc-yyyy-yyyy               20Gi    RWX      nfs-client

# 驗(yàn)證Pod掛載
kubectlexec-it $(kubectl get pod -l app=app-storage -o jsonpath='{.items[0].metadata.name}') -- df -h /usr/share/nginx/html

2.3.2 StatefulSet的volumeClaimTemplates

StatefulSet的每個(gè)Pod自動(dòng)創(chuàng)建獨(dú)立的PVC:

# 文件:redis-statefulset.yaml
apiVersion:apps/v1
kind:StatefulSet
metadata:
name:redis
namespace:default
spec:
serviceName:redis
replicas:3
selector:
 matchLabels:
  app:redis
template:
 metadata:
  labels:
   app:redis
 spec:
  containers:
   -name:redis
    image:redis:7.2
    ports:
     -containerPort:6379
    volumeMounts:
     -name:redis-data
      mountPath:/data
    resources:
     requests:
      cpu:200m
      memory:256Mi
volumeClaimTemplates:
 -metadata:
   name:redis-data
  spec:
   accessModes:["ReadWriteOnce"]
   storageClassName:ceph-rbd
   resources:
    requests:
     storage:10Gi
kubectl apply -f redis-statefulset.yaml

# 驗(yàn)證:每個(gè)Pod有獨(dú)立的PVC
kubectl get pvc -l app=redis
# redis-data-redis-0  Bound  pvc-aaa  10Gi  RWO  ceph-rbd
# redis-data-redis-1  Bound  pvc-bbb  10Gi  RWO  ceph-rbd
# redis-data-redis-2  Bound  pvc-ccc  10Gi  RWO  ceph-rbd

注意:StatefulSet刪除后PVC不會(huì)自動(dòng)刪除,需要手動(dòng)清理。這是設(shè)計(jì)如此,防止誤刪數(shù)據(jù)。

三、示例代碼和配置

3.1 完整配置示例

3.1.1 MySQL主從 + Ceph RBD完整存儲(chǔ)方案

# 文件:mysql-storage-complete.yaml
# MySQL主庫(kù) - 使用Ceph RBD高性能塊存儲(chǔ)
apiVersion:v1
kind:PersistentVolumeClaim
metadata:
name:mysql-master-data
namespace:database
spec:
accessModes:
 -ReadWriteOnce
storageClassName:ceph-rbd
resources:
 requests:
  storage:100Gi
---
apiVersion:v1
kind:PersistentVolumeClaim
metadata:
name:mysql-master-logs
namespace:database
spec:
accessModes:
 -ReadWriteOnce
storageClassName:ceph-rbd
resources:
 requests:
  storage:50Gi
---
apiVersion:apps/v1
kind:Deployment
metadata:
name:mysql-master
namespace:database
spec:
replicas:1
strategy:
 type:Recreate
selector:
 matchLabels:
  app:mysql
  role:master
template:
 metadata:
  labels:
   app:mysql
   role:master
 spec:
  containers:
   -name:mysql
    image:mysql:8.0.35
    ports:
     -containerPort:3306
    env:
     -name:MYSQL_ROOT_PASSWORD
      valueFrom:
       secretKeyRef:
        name:mysql-secret
        key:root-password
    args:
     ---innodb-buffer-pool-size=2G
     ---innodb-log-file-size=512M
     ---innodb-flush-method=O_DIRECT
     ---innodb-io-capacity=2000
     ---innodb-io-capacity-max=4000
    resources:
     requests:
      cpu:"2"
      memory:4Gi
     limits:
      cpu:"4"
      memory:8Gi
    volumeMounts:
     -name:mysql-data
      mountPath:/var/lib/mysql
     -name:mysql-logs
      mountPath:/var/log/mysql
     -name:mysql-config
      mountPath:/etc/mysql/conf.d
    livenessProbe:
     exec:
      command:
       -mysqladmin
       -ping
       --h
       -localhost
     initialDelaySeconds:30
     periodSeconds:10
    readinessProbe:
     exec:
      command:
       -mysql
       --h
       -localhost
       --e
       -"SELECT 1"
     initialDelaySeconds:10
     periodSeconds:5
  volumes:
   -name:mysql-data
    persistentVolumeClaim:
     claimName:mysql-master-data
   -name:mysql-logs
    persistentVolumeClaim:
     claimName:mysql-master-logs
   -name:mysql-config
    configMap:
     name:mysql-config

注意:MySQL的Deployment用strategy: Recreate而不是RollingUpdate,因?yàn)镽BD卷是RWO模式,不能同時(shí)被兩個(gè)Pod掛載。RollingUpdate會(huì)先創(chuàng)建新Pod再刪舊Pod,新Pod掛載會(huì)失敗。

3.1.2 存儲(chǔ)容量監(jiān)控腳本

#!/bin/bash
# PVC使用率監(jiān)控腳本
# 文件:/opt/scripts/pvc-usage-monitor.sh
# 通過(guò)kubelet的metrics獲取PVC使用率

set-euo pipefail

ALERT_THRESHOLD=85
LOG_FILE="/var/log/pvc-monitor.log"

echo"[$(date)] Starting PVC usage check...">>"${LOG_FILE}"

# 獲取所有節(jié)點(diǎn)的kubelet metrics中的volume信息
fornodein$(kubectl get nodes -o jsonpath='{.items[*].metadata.name}');do
# 通過(guò)API proxy訪問(wèn)kubelet metrics
 kubectl get --raw"/api/v1/nodes/${node}/proxy/stats/summary"2>/dev/null | 
  jq -r'.pods[]? | select(.volume != null) | .podRef.namespace + "/" + .podRef.name + " " + (.volume[]? | select(.pvcRef != null) | .pvcRef.name + " " + (.usedBytes|tostring) + " " + (.capacityBytes|tostring))'2>/dev/null | 
 whilereadns_pod pvc used capacity;do
  if[ -n"${capacity}"] && ["${capacity}"!="0"];then
    usage_pct=$((used * 100 / capacity))
    used_gi=$((used / 1073741824))
    cap_gi=$((capacity / 1073741824))

   if["${usage_pct}"-ge"${ALERT_THRESHOLD}"];then
    echo"[ALERT]${ns_pod}PVC:${pvc}Usage:${usage_pct}% (${used_gi}Gi/${cap_gi}Gi)">>"${LOG_FILE}"
   fi
  fi
 done
done

echo"[$(date)] PVC usage check completed.">>"${LOG_FILE}"

3.2 實(shí)際應(yīng)用案例

案例一:多Pod共享NFS存儲(chǔ)實(shí)現(xiàn)文件上傳

場(chǎng)景描述:Web應(yīng)用有3個(gè)副本,用戶上傳的文件需要所有副本都能訪問(wèn)。用NFS的RWX模式實(shí)現(xiàn)共享存儲(chǔ)。

實(shí)現(xiàn)代碼

# 文件:file-upload-app.yaml
apiVersion:v1
kind:PersistentVolumeClaim
metadata:
name:upload-files-pvc
namespace:production
spec:
accessModes:
 -ReadWriteMany
storageClassName:nfs-client
resources:
 requests:
  storage:100Gi
---
apiVersion:apps/v1
kind:Deployment
metadata:
name:file-upload-api
namespace:production
spec:
replicas:3
selector:
 matchLabels:
  app:file-upload-api
template:
 metadata:
  labels:
   app:file-upload-api
 spec:
  containers:
   -name:api
    image:file-upload-api:v1.2.0
    ports:
     -containerPort:8080
    volumeMounts:
     -name:uploads
      mountPath:/app/uploads
    resources:
     requests:
      cpu:200m
      memory:256Mi
  volumes:
   -name:uploads
    persistentVolumeClaim:
     claimName:upload-files-pvc

運(yùn)行結(jié)果

# 3個(gè)Pod都掛載了同一個(gè)NFS卷
kubectlexecfile-upload-api-xxx -- ls /app/uploads
# 在任一Pod中上傳的文件,其他Pod都能看到

案例二:PV數(shù)據(jù)遷移(從NFS遷移到Ceph RBD)

場(chǎng)景描述:業(yè)務(wù)初期用NFS存儲(chǔ)MySQL數(shù)據(jù),隨著數(shù)據(jù)量增長(zhǎng)NFS的IO性能成為瓶頸,需要遷移到Ceph RBD。

實(shí)現(xiàn)步驟

創(chuàng)建新的Ceph RBD PVC

啟動(dòng)數(shù)據(jù)遷移Job

切換應(yīng)用到新PVC

驗(yàn)證后清理舊PVC

# 文件:data-migration-job.yaml
apiVersion:batch/v1
kind:Job
metadata:
name:pvc-data-migration
namespace:database
spec:
template:
 spec:
  containers:
   -name:migrator
    image:ubuntu:22.04
    command:
     -/bin/bash
     --c
     -|
       apt-get update && apt-get install -y rsync
       echo "Starting data migration..."
       rsync -avz --progress /source/ /destination/
       echo "Migration completed. Verifying..."
       diff -r /source/ /destination/ && echo "Verification passed" || echo "Verification FAILED"
    volumeMounts:
     -name:source-vol
      mountPath:/source
      readOnly:true
     -name:dest-vol
      mountPath:/destination
    resources:
     requests:
      cpu:"1"
      memory:1Gi
  volumes:
   -name:source-vol
    persistentVolumeClaim:
     claimName:mysql-data-nfs
   -name:dest-vol
    persistentVolumeClaim:
     claimName:mysql-data-ceph
  restartPolicy:Never
backoffLimit:3
# 1. 停止MySQL寫(xiě)入(設(shè)為只讀)
kubectlexec-it mysql-master-xxx -n database -- mysql -e"SET GLOBAL read_only=1;"

# 2. 創(chuàng)建目標(biāo)PVC
kubectl apply -f mysql-data-ceph-pvc.yaml

# 3. 執(zhí)行遷移Job
kubectl apply -f data-migration-job.yaml
kubectl logs -f job/pvc-data-migration -n database

# 4. 修改MySQL Deployment引用新PVC
kubectl patch deployment mysql-master -n database --type='json'
 -p='[{"op":"replace","path":"/spec/template/spec/volumes/0/persistentVolumeClaim/claimName","value":"mysql-data-ceph"}]'

# 5. 驗(yàn)證MySQL正常啟動(dòng)
kubectl get pods -n database -l app=mysql,role=master
kubectlexec-it mysql-master-xxx -n database -- mysql -e"SHOW DATABASES;"

# 6. 取消只讀
kubectlexec-it mysql-master-xxx -n database -- mysql -e"SET GLOBAL read_only=0;"

四、最佳實(shí)踐和注意事項(xiàng)

4.1 最佳實(shí)踐

4.1.1 性能優(yōu)化

NFS掛載參數(shù)調(diào)優(yōu):默認(rèn)NFS掛載參數(shù)在高并發(fā)寫(xiě)入時(shí)性能差,生產(chǎn)環(huán)境必須調(diào)整。hard模式保證數(shù)據(jù)一致性,nfsvers=4.1支持并行IO,timeo=600避免網(wǎng)絡(luò)抖動(dòng)導(dǎo)致超時(shí)。

# StorageClass中設(shè)置mountOptions
mountOptions:
-hard
-nfsvers=4.1
-timeo=600
-retrans=3
-rsize=1048576
-wsize=1048576

實(shí)測(cè)調(diào)整rsize/wsize從默認(rèn)的32KB到1MB后,大文件順序?qū)懭胪掏铝繌?0MB/s提升到350MB/s。

Ceph RBD性能調(diào)優(yōu):RBD鏡像默認(rèn)特性包含exclusive-lock、object-map、fast-diff,生產(chǎn)環(huán)境建議全部開(kāi)啟。Ceph OSD的bluestore_cache_size默認(rèn)1GB,SSD節(jié)點(diǎn)建議調(diào)到4GB。

# 查看RBD鏡像特性
rbd info k8s-rbd/csi-vol-xxx

# Ceph OSD調(diào)優(yōu)(在Ceph節(jié)點(diǎn)執(zhí)行)
ceph configsetosd bluestore_cache_size_ssd 4294967296
ceph configsetosd osd_op_num_threads_per_shard_ssd 2

Local PV使用XFS文件系統(tǒng):相比ext4,XFS在大文件和高并發(fā)場(chǎng)景下性能更好,MySQL的InnoDB引擎在XFS上的隨機(jī)寫(xiě)性能提升約15%。

mkfs.xfs -f /dev/sdb
mount -o noatime,nodiratime /dev/sdb /data/local-volumes/ssd01

4.1.2 安全加固

PV訪問(wèn)權(quán)限控制:通過(guò)SecurityContext設(shè)置Pod的fsGroup,確保掛載的卷只有指定用戶組能訪問(wèn)。

spec:
securityContext:
 runAsUser:1000
 runAsGroup:1000
 fsGroup:1000
containers:
 -name:app
  volumeMounts:
   -name:data
    mountPath:/data

加密存儲(chǔ):Ceph RBD支持LUKS加密,數(shù)據(jù)在磁盤(pán)上是加密的,即使磁盤(pán)被盜也無(wú)法讀取數(shù)據(jù)。

# StorageClass中啟用加密
parameters:
encrypted:"true"
encryptionKMSID:vault-kms

限制PVC大小:通過(guò)LimitRange限制namespace中PVC的最大容量,防止用戶申請(qǐng)過(guò)大的存儲(chǔ)。

apiVersion:v1
kind:LimitRange
metadata:
name:storage-limits
namespace:production
spec:
limits:
 -type:PersistentVolumeClaim
  max:
   storage:500Gi
  min:
   storage:1Gi

4.1.3 高可用配置

HA方案一:Ceph RBD三副本存儲(chǔ),任一OSD節(jié)點(diǎn)故障數(shù)據(jù)不丟失,RBD卷自動(dòng)恢復(fù)

HA方案二:NFS服務(wù)器用DRBD + Pacemaker做主備高可用,VIP自動(dòng)漂移

備份策略:Ceph RBD使用快照功能定期備份,NFS使用rsync同步到備份服務(wù)器。VolumeSnapshot是K8s原生的快照機(jī)制:

apiVersion:snapshot.storage.k8s.io/v1
kind:VolumeSnapshot
metadata:
name:mysql-data-snapshot
namespace:database
spec:
volumeSnapshotClassName:ceph-rbd-snapclass
source:
 persistentVolumeClaimName:mysql-master-data

4.2 注意事項(xiàng)

4.2.1 配置注意事項(xiàng)

警告:存儲(chǔ)配置錯(cuò)誤可能導(dǎo)致數(shù)據(jù)丟失,修改前務(wù)必備份數(shù)據(jù)。

注意reclaimPolicy: Delete會(huì)在PVC刪除時(shí)同時(shí)刪除PV和后端存儲(chǔ)數(shù)據(jù)。生產(chǎn)環(huán)境必須用Retain,寧可手動(dòng)清理也不要自動(dòng)刪除。

注意Local PV的volumeBindingMode必須設(shè)為WaitForFirstConsumer,否則PVC可能綁定到一個(gè)節(jié)點(diǎn)的PV上,但Pod被調(diào)度到另一個(gè)節(jié)點(diǎn),導(dǎo)致掛載失敗。

注意NFS的no_root_squash選項(xiàng)允許客戶端以root身份操作文件,安全風(fēng)險(xiǎn)高。生產(chǎn)環(huán)境用root_squash,通過(guò)initContainer以root身份設(shè)置目錄權(quán)限后,主容器以非root用戶運(yùn)行。

4.2.2 常見(jiàn)錯(cuò)誤

錯(cuò)誤現(xiàn)象 原因分析 解決方案
PVC一直P(pán)ending 沒(méi)有匹配的PV或StorageClass的Provisioner未運(yùn)行 kubectl describe pvc 查看事件;檢查Provisioner Pod狀態(tài)
Pod掛載卷失敗,報(bào)Multi-Attach error RWO卷被多個(gè)節(jié)點(diǎn)的Pod同時(shí)掛載 確認(rèn)舊Pod已完全終止;檢查是否有殘留的VolumeAttachment
NFS掛載超時(shí) NFS服務(wù)器不可達(dá)或防火墻阻斷 檢查NFS服務(wù)器狀態(tài);確認(rèn)2049端口可訪問(wèn);Worker節(jié)點(diǎn)安裝nfs-common
Ceph RBD掛載報(bào)rbd: map failed Ceph集群不健康或認(rèn)證失敗 檢查Ceph集群狀態(tài)ceph -s;驗(yàn)證Secret中的key是否正確
PVC擴(kuò)容后容量沒(méi)變 文件系統(tǒng)未擴(kuò)展,需要Pod重啟 刪除Pod觸發(fā)重建,kubelet會(huì)自動(dòng)擴(kuò)展文件系統(tǒng)
StatefulSet縮容后PVC殘留 設(shè)計(jì)如此,PVC不隨Pod刪除 手動(dòng)刪除不需要的PVC:kubectl delete pvc

4.2.3 兼容性問(wèn)題

版本兼容:CSI驅(qū)動(dòng)版本需要和K8s版本匹配,ceph-csi 3.9.x支持K8s 1.24-1.28

平臺(tái)兼容:NFS在所有Linux發(fā)行版上都支持;Ceph RBD需要內(nèi)核4.x+;CephFS需要內(nèi)核4.17+

組件依賴:VolumeSnapshot需要安裝snapshot-controller和對(duì)應(yīng)的CSI驅(qū)動(dòng)支持

五、故障排查和監(jiān)控

5.1 故障排查

5.1.1 日志查看

# 查看CSI驅(qū)動(dòng)日志
kubectl logs -n ceph-csi -l app=ceph-csi-rbd-nodeplugin --tail=50
kubectl logs -n ceph-csi -l app=ceph-csi-rbd-provisioner --tail=50

# 查看NFS Provisioner日志
kubectl logs -n kube-system -l app=nfs-subdir-external-provisioner --tail=50

# 查看kubelet的卷掛載日志
journalctl -u kubelet | grep -i"volume|mount|pvc"| tail -30

# 查看PVC事件
kubectl describe pvc  -n 

# 查看VolumeAttachment
kubectl get volumeattachment

5.1.2 常見(jiàn)問(wèn)題排查

問(wèn)題一:PVC Pending,事件顯示no persistent volumes available

# 診斷命令
kubectl describe pvc  -n 
kubectl get pv --show-labels
kubectl get sc

解決方案

靜態(tài)供給:檢查是否有可用的PV,PV的容量、accessModes、storageClassName是否和PVC匹配

動(dòng)態(tài)供給:檢查StorageClass是否存在,Provisioner Pod是否Running

檢查PV的狀態(tài)是否為Available(已綁定的PV不能再綁定其他PVC)

問(wèn)題二:Pod卡在ContainerCreating,報(bào)FailedMount

# 診斷命令
kubectl describe pod  -n  | grep -A 10"Events"
kubectl get volumeattachment | grep 

# 檢查節(jié)點(diǎn)上的掛載情況
kubectl debug node/ -it --image=ubuntu:22.04 -- 
 mount | grep 

解決方案

NFS掛載失敗:確認(rèn)Worker節(jié)點(diǎn)安裝了nfs-common,NFS服務(wù)器可達(dá)

RBD掛載失?。簷z查Ceph集群健康狀態(tài),確認(rèn)Secret配置正確

Multi-Attach錯(cuò)誤:等待舊Pod完全終止,或手動(dòng)刪除殘留的VolumeAttachment

問(wèn)題三:存儲(chǔ)性能差,IO延遲高

癥狀:應(yīng)用響應(yīng)慢,數(shù)據(jù)庫(kù)查詢超時(shí)

排查

# 在Pod內(nèi)測(cè)試IO性能
kubectlexec-it  -- bash
# 安裝fio
apt-get update && apt-get install -y fio

# 隨機(jī)讀寫(xiě)測(cè)試
fio --name=randwrite --ioengine=libaio --iodepth=32 --rw=randwrite 
 --bs=4k --direct=1 --size=1G --numjobs=4 --runtime=60 
 --filename=/data/fio-test --group_reporting

# 順序?qū)憸y(cè)試
fio --name=seqwrite --ioengine=libaio --iodepth=32 --rw=write 
 --bs=1M --direct=1 --size=1G --numjobs=1 --runtime=60 
 --filename=/data/fio-test --group_reporting

解決

NFS性能差:調(diào)整rsize/wsize到1MB,升級(jí)到NFSv4.1

Ceph RBD性能差:檢查OSD磁盤(pán)是否為SSD,調(diào)整bluestore_cache_size

考慮遷移到Local PV獲取本地磁盤(pán)性能

5.1.3 調(diào)試模式

# 查看CSI驅(qū)動(dòng)詳細(xì)日志
kubectl logs -n ceph-csi  -c csi-rbdplugin --tail=200

# 手動(dòng)測(cè)試Ceph連接
kubectl run ceph-test --image=quay.io/ceph/ceph:v18 --rm -it -- bash
ceph -s --conf /etc/ceph/ceph.conf

# 查看節(jié)點(diǎn)上的塊設(shè)備
kubectl debug node/ -it --image=ubuntu:22.04 -- lsblk

# 查看掛載點(diǎn)
kubectl debug node/ -it --image=ubuntu:22.04 -- df -h

5.2 性能監(jiān)控

5.2.1 關(guān)鍵指標(biāo)監(jiān)控

# PVC使用率(需要kubelet metrics)
kubectl get --raw"/api/v1/nodes//proxy/stats/summary"| 
 jq'.pods[].volume[]? | select(.pvcRef != null) | {pvc: .pvcRef.name, used: .usedBytes, capacity: .capacityBytes}'

# Ceph集群狀態(tài)
ceph -s
ceph osd pool stats k8s-rbd

# NFS服務(wù)器IO
nfsstat -s
iostat -x 1 5

5.2.2 監(jiān)控指標(biāo)說(shuō)明

指標(biāo)名稱 正常范圍 告警閾值 說(shuō)明
PVC使用率 <70% >85% 超過(guò)85%需要擴(kuò)容或清理數(shù)據(jù)
Ceph集群健康狀態(tài) HEALTH_OK HEALTH_WARN WARN需要排查,ERR需要立即處理
Ceph OSD延遲 <10ms >50ms OSD延遲高影響所有RBD卷性能
NFS服務(wù)器IOPS 按硬件 接近硬件上限 IOPS飽和需要擴(kuò)容NFS或遷移到分布式存儲(chǔ)
卷掛載失敗次數(shù) 0 >0 任何掛載失敗都需要排查
PV Available數(shù)量 >5 <2 靜態(tài)供給時(shí)可用PV不足需要提前創(chuàng)建

5.2.3 Prometheus監(jiān)控規(guī)則

# 文件:storage-alerts.yaml
apiVersion:monitoring.coreos.com/v1
kind:PrometheusRule
metadata:
name:storage-alerts
namespace:monitoring
spec:
groups:
 -name:kubernetes-storage
  rules:
   -alert:PVCUsageHigh
    expr:|
      kubelet_volume_stats_used_bytes / kubelet_volume_stats_capacity_bytes > 0.85
    for:10m
    labels:
     severity:warning
    annotations:
     summary:"PVC{{ $labels.persistentvolumeclaim }}usage exceeds 85%"
     description:"Namespace:{{ $labels.namespace }}"

   -alert:PVCUsageCritical
    expr:|
      kubelet_volume_stats_used_bytes / kubelet_volume_stats_capacity_bytes > 0.95
    for:5m
    labels:
     severity:critical
    annotations:
     summary:"PVC{{ $labels.persistentvolumeclaim }}usage exceeds 95%"

   -alert:PVCPending
    expr:|
      kube_persistentvolumeclaim_status_phase{phase="Pending"} == 1
    for:15m
    labels:
     severity:warning
    annotations:
     summary:"PVC{{ $labels.persistentvolumeclaim }}has been Pending for 15 minutes"

   -alert:PVAvailableLow
    expr:|
      count(kube_persistentvolume_status_phase{phase="Available"}) < 2
? ? ? ? ??for:10m
? ? ? ? ??labels:
? ? ? ? ? ??severity:warning
? ? ? ? ??annotations:
? ? ? ? ? ??summary:"Less than 2 PVs available in the cluster"

? ? ? ??-alert:VolumeAttachmentFailed
? ? ? ? ??expr:|
? ? ? ? ? ? increase(storage_operation_errors_total[5m]) > 0
    for:5m
    labels:
     severity:warning
    annotations:
     summary:"Volume operation errors detected"

5.3 備份與恢復(fù)

5.3.1 備份策略

#!/bin/bash
# Ceph RBD快照備份腳本
# 文件:/opt/scripts/rbd-snapshot-backup.sh

set-euo pipefail

POOL="k8s-rbd"
BACKUP_PREFIX="scheduled-backup"
KEEP_SNAPSHOTS=24

# 獲取pool中所有RBD鏡像
forimagein$(rbd ls${POOL});do
 SNAP_NAME="${BACKUP_PREFIX}-$(date +%Y%m%d-%H%M%S)"

# 創(chuàng)建快照
 rbd snap create"${POOL}/${image}@${SNAP_NAME}"
echo"[$(date)] Created snapshot:${POOL}/${image}@${SNAP_NAME}"

# 清理過(guò)期快照(保留最近24個(gè))
 rbd snap ls"${POOL}/${image}"| grep"${BACKUP_PREFIX}"| 
  head -n -${KEEP_SNAPSHOTS}| awk'{print $2}'| 
 whilereadold_snap;do
   rbd snap rm"${POOL}/${image}@${old_snap}"
  echo"[$(date)] Removed old snapshot:${POOL}/${image}@${old_snap}"
 done
done

5.3.2 恢復(fù)流程

停止服務(wù):縮容使用該P(yáng)VC的Deployment/StatefulSet到0副本

恢復(fù)數(shù)據(jù):從快照恢復(fù)RBD鏡像或從備份rsync數(shù)據(jù)

驗(yàn)證完整性:掛載卷檢查數(shù)據(jù)完整性

重啟服務(wù):恢復(fù)Deployment/StatefulSet副本數(shù)

六、總結(jié)

6.1 技術(shù)要點(diǎn)回顧

要點(diǎn)一:生產(chǎn)環(huán)境reclaimPolicy必須設(shè)為Retain,Delete策略會(huì)在PVC刪除時(shí)直接刪除后端存儲(chǔ)數(shù)據(jù)

要點(diǎn)二:Local PV的volumeBindingMode必須用WaitForFirstConsumer,避免PV和Pod調(diào)度到不同節(jié)點(diǎn)

要點(diǎn)三:NFS適合共享文件存儲(chǔ)(RWX),Ceph RBD適合數(shù)據(jù)庫(kù)塊存儲(chǔ)(RWO),根據(jù)業(yè)務(wù)需求選型

要點(diǎn)四:StorageClass + Provisioner實(shí)現(xiàn)動(dòng)態(tài)供給,消除手動(dòng)創(chuàng)建PV的運(yùn)維負(fù)擔(dān)

要點(diǎn)五:PVC只能擴(kuò)容不能縮容,容量規(guī)劃時(shí)預(yù)留30%余量,配合監(jiān)控在85%使用率時(shí)告警

6.2 進(jìn)階學(xué)習(xí)方向

CSI驅(qū)動(dòng)開(kāi)發(fā):理解CSI接口規(guī)范,為自研存儲(chǔ)系統(tǒng)開(kāi)發(fā)K8s CSI驅(qū)動(dòng)

學(xué)習(xí)資源:CSI規(guī)范

實(shí)踐建議:從ceph-csi源碼入手,理解Provisioner和NodePlugin的工作流程

Rook-Ceph Operator:用Rook在K8s中自動(dòng)化部署和管理Ceph集群,降低Ceph運(yùn)維復(fù)雜度

學(xué)習(xí)資源:Rook官方文檔

實(shí)踐建議:測(cè)試環(huán)境用Rook部署3節(jié)點(diǎn)Ceph集群,體驗(yàn)自動(dòng)化運(yùn)維

VolumeSnapshot和數(shù)據(jù)保護(hù):基于CSI的快照機(jī)制實(shí)現(xiàn)應(yīng)用一致性備份

6.3 參考資料

Kubernetes存儲(chǔ)官方文檔- PV/PVC/SC完整說(shuō)明

Ceph CSI項(xiàng)目- Ceph CSI驅(qū)動(dòng)

NFS Provisioner- NFS動(dòng)態(tài)供給

Longhorn項(xiàng)目- 輕量級(jí)分布式存儲(chǔ)

附錄

A. 命令速查表

# PV操作
kubectl get pv                  # 查看所有PV
kubectl get pv -o wide              # 查看PV詳情(含StorageClass)
kubectl describe pv           # PV詳細(xì)信息
kubectl delete pv            # 刪除PV(Retain策略下數(shù)據(jù)不丟)

# PVC操作
kubectl get pvc -A                # 查看所有namespace的PVC
kubectl get pvc -n           # 查看指定namespace的PVC
kubectl describe pvc  -n   # PVC詳細(xì)信息和事件
kubectl patch pvc  -p'{"spec":{"resources":{"requests":{"storage":"100Gi"}}}}'# 擴(kuò)容

# StorageClass操作
kubectl get sc                  # 查看StorageClass列表
kubectl describe sc           # SC詳細(xì)信息
kubectl patch sc  -p'{"metadata":{"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}'# 設(shè)為默認(rèn)SC

# 排查命令
kubectl get volumeattachment           # 查看卷掛載關(guān)系
kubectl get events -A --field-selector reason=FailedMount # 掛載失敗事件

B. 配置參數(shù)詳解

StorageClass關(guān)鍵參數(shù)

參數(shù) 說(shuō)明 可選值
provisioner 存儲(chǔ)供給器 rbd.csi.ceph.com 、nfs.csi.k8s.io等
reclaimPolicy 回收策略 Retain (保留)、Delete(刪除)
volumeBindingMode 綁定模式 Immediate (立即)、WaitForFirstConsumer(延遲)
allowVolumeExpansion 允許擴(kuò)容 true /false
mountOptions 掛載選項(xiàng) 依存儲(chǔ)類型而定

PV訪問(wèn)模式

模式 縮寫(xiě) 說(shuō)明 支持的存儲(chǔ)
ReadWriteOnce RWO 單節(jié)點(diǎn)讀寫(xiě) 所有存儲(chǔ)類型
ReadOnlyMany ROX 多節(jié)點(diǎn)只讀 NFS、CephFS、云盤(pán)
ReadWriteMany RWX 多節(jié)點(diǎn)讀寫(xiě) NFS、CephFS、GlusterFS
ReadWriteOncePod RWOP 單Pod讀寫(xiě)(1.27 GA) CSI驅(qū)動(dòng)支持

C. 術(shù)語(yǔ)表

術(shù)語(yǔ) 英文 解釋
PV PersistentVolume 集群級(jí)別的存儲(chǔ)資源,由管理員創(chuàng)建或動(dòng)態(tài)供給
PVC PersistentVolumeClaim 用戶對(duì)存儲(chǔ)的申請(qǐng),綁定到PV后供Pod使用
SC StorageClass 存儲(chǔ)類,定義動(dòng)態(tài)供給的參數(shù)和策略
CSI Container Storage Interface 容器存儲(chǔ)接口標(biāo)準(zhǔn),存儲(chǔ)廠商實(shí)現(xiàn)CSI驅(qū)動(dòng)接入K8s
RBD RADOS Block Device Ceph的塊存儲(chǔ)設(shè)備,提供高性能塊級(jí)IO
Provisioner 供給器 負(fù)責(zé)根據(jù)PVC自動(dòng)創(chuàng)建PV的控制器
VolumeSnapshot 卷快照 基于CSI的存儲(chǔ)快照機(jī)制,用于數(shù)據(jù)備份
fsGroup 文件系統(tǒng)組 Pod SecurityContext中設(shè)置,控制掛載卷的文件組權(quán)限

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 存儲(chǔ)管理
    +關(guān)注

    關(guān)注

    0

    文章

    32

    瀏覽量

    9609
  • kubernetes
    +關(guān)注

    關(guān)注

    0

    文章

    263

    瀏覽量

    9494

原文標(biāo)題:從 Pod 重建不丟數(shù)據(jù)開(kāi)始:Kubernetes PV/PVC/StorageClass 落地實(shí)踐

文章出處:【微信號(hào):magedu-Linux,微信公眾號(hào):馬哥Linux運(yùn)維】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    KubePi:開(kāi)源Kubernetes可視化管理面板,讓集群管理如此簡(jiǎn)單

    的開(kāi)源Kubernetes可視化管理面板,正以其簡(jiǎn)潔的設(shè)計(jì)與強(qiáng)大的功能,讓集群管理變得前所未有的簡(jiǎn)單。 一、KubePi是什么?為什么你需要它? 1.1 誕生背景:簡(jiǎn)化
    發(fā)表于 02-11 12:53

    Kubernetes Ingress 高可靠部署最佳實(shí)踐

    摘要: 在Kubernetes集群中,Ingress作為集群流量接入層,Ingress的高可靠性顯得尤為重要,今天我們主要探討如何部署一套高性能高可靠的Ingress接入層。簡(jiǎn)介
    發(fā)表于 04-17 14:35

    不吹不黑,今天我們來(lái)聊一聊 Kubernetes 落地的三種方式

    Kubernetes 作為自己的基礎(chǔ)設(shè)施重心,"一萬(wàn)個(gè)人眼中就有一萬(wàn)個(gè)哈姆雷特",雖說(shuō) Kubernetes 是容器管理領(lǐng)域的事實(shí)標(biāo)準(zhǔn),但實(shí)際上在不同背景的企業(yè)中,Kubernetes
    發(fā)表于 10-12 16:07

    Kubernetes Dashboard實(shí)踐學(xué)習(xí)

    關(guān)于Kubernetes Dashboard的實(shí)踐學(xué)習(xí)
    發(fā)表于 04-10 14:09

    Kubernetes上運(yùn)行Kubernetes

    拍案叫絕的容器管理平臺(tái)卻遲遲未出現(xiàn)。 這樣的局面一直維持到2014年,谷歌將 Kubernetes 項(xiàng)目發(fā)布到開(kāi)放源代碼社區(qū)之前。 Kubernetes 一開(kāi)源,企業(yè)或者開(kāi)發(fā)人員就可以在 Ku
    發(fā)表于 09-30 13:33 ?0次下載
    在<b class='flag-5'>Kubernetes</b>上運(yùn)行<b class='flag-5'>Kubernetes</b>

    Kubernetes API詳解

    摘要:Kubernetes是Google開(kāi)源的容器集群管理系統(tǒng)。它構(gòu)建Ddocker技術(shù)之上,為容器化的應(yīng)用提供資源調(diào)度、部署運(yùn)行、服務(wù)發(fā)現(xiàn)、擴(kuò)容縮容等整一套功能,本文節(jié)選自龔正
    發(fā)表于 10-12 16:19 ?0次下載
    <b class='flag-5'>Kubernetes</b> API詳解

    阿里巴巴 Kubernetes 應(yīng)用管理實(shí)踐中的經(jīng)驗(yàn)與教訓(xùn)

    自帶的復(fù)雜性足以讓一批開(kāi)發(fā)者望而卻步。本文中,阿里巴巴技術(shù)專家孫健波在接受采訪時(shí)基于阿里巴巴 Kubernetes 應(yīng)用管理實(shí)踐過(guò)程提供了一些經(jīng)驗(yàn)與建議,以期對(duì)開(kāi)發(fā)者有所幫助。在互聯(lián)網(wǎng)時(shí)代,開(kāi)發(fā)者更多
    發(fā)表于 11-14 23:06 ?475次閱讀

    Kubernetes是什么,一文了解Kubernetes

    香了。 這時(shí)候就需要我們的主角 Kubernetes 上場(chǎng)了,先來(lái)了解一下 Kubernetes 的基本概念,后面再介紹實(shí)踐,由淺入深步步為營(yíng)。 關(guān)于 Kubernetes 的基本概念
    發(fā)表于 12-21 13:40 ?2081次閱讀
    <b class='flag-5'>Kubernetes</b>是什么,一文了解<b class='flag-5'>Kubernetes</b>

    Kubernetes上Java應(yīng)用的最佳實(shí)踐

    在本文中,您將了解在 Kubernetes 上運(yùn)行 Java 應(yīng)用程序的最佳實(shí)踐。大多數(shù)這些建議也適用于其他語(yǔ)言。但是,我正在考慮 Java 特性范圍內(nèi)的所有規(guī)則,并且還展示了可用于基于 JVM
    的頭像 發(fā)表于 03-14 17:47 ?1271次閱讀

    Awesome 工具如何更好地管理Kubernetes

    應(yīng)用程序,那么 Kubernetes 是必備工具之一。有數(shù)百種工具可與 Kubernetes 配合使用以添加更多功能。我說(shuō)的是用于更好地管理,安全性,儀表板和
    的頭像 發(fā)表于 06-25 16:12 ?1383次閱讀
    Awesome 工具如何更好地<b class='flag-5'>管理</b><b class='flag-5'>Kubernetes</b>

    戴爾科技再次榮獲Kubernetes數(shù)據(jù)存儲(chǔ)領(lǐng)導(dǎo)者

    近日,國(guó)際權(quán)威研究機(jī)構(gòu)GigaOm公布了《2023企業(yè)級(jí)Kubernetes存儲(chǔ)雷達(dá)報(bào)告》戴爾科技集團(tuán)連續(xù)兩年被評(píng)為Kubernetes數(shù)據(jù)存儲(chǔ)領(lǐng)導(dǎo)者。
    的頭像 發(fā)表于 10-26 10:16 ?1371次閱讀
    戴爾科技再次榮獲<b class='flag-5'>Kubernetes</b>數(shù)據(jù)<b class='flag-5'>存儲(chǔ)</b>領(lǐng)導(dǎo)者

    龍智出席2024零跑智能汽車技術(shù)論壇,分享功能安全、需求管理、版本管理、代碼掃描等DevSecOps落地實(shí)踐

    快訊!日前,龍智出席零跑汽車技術(shù)論壇,分享龍智DevSecOps解決方案在功能安全、精細(xì)化需求管理、流程自動(dòng)化、版本控制和代碼質(zhì)量分析等方面的落地實(shí)踐
    的頭像 發(fā)表于 12-27 16:06 ?1877次閱讀
    龍智出席2024零跑智能汽車技術(shù)論壇,分享<b class='flag-5'>功能</b>安全、需求<b class='flag-5'>管理</b>、版本<b class='flag-5'>管理</b>、代碼掃描等DevSecOps<b class='flag-5'>落地</b><b class='flag-5'>實(shí)踐</b>

    Kubernetes Pod常用管理命令詳解

    Kubernetes Pod常用管理命令詳解
    的頭像 發(fā)表于 02-17 14:06 ?1352次閱讀
    <b class='flag-5'>Kubernetes</b> Pod常用<b class='flag-5'>管理</b>命令詳解

    Kubernetes管理工具Helm的安裝和使用

    Helm 可以幫助我們管理 Kubernetes 應(yīng)用程序 - Helm Charts 可以定義、安裝和升級(jí)復(fù)雜的 Kubernetes 應(yīng)用程序,Charts 包很容易創(chuàng)建、版本管理
    的頭像 發(fā)表于 03-13 16:06 ?2186次閱讀

    生產(chǎn)環(huán)境中Kubernetes容器安全的最佳實(shí)踐

    隨著容器化技術(shù)的快速發(fā)展,Kubernetes已成為企業(yè)級(jí)容器編排的首選平臺(tái)。然而,在享受Kubernetes帶來(lái)的便利性和可擴(kuò)展性的同時(shí),安全問(wèn)題也日益凸顯。本文將從運(yùn)維工程師的角度,深入探討生產(chǎn)環(huán)境中Kubernetes容器
    的頭像 發(fā)表于 07-14 11:09 ?734次閱讀