Storage-Klassen implementieren Service-Level-Abstraktion für Storage-Bereitstellung in OpenShift durch policy-basierte Storage-Charakteristik-Definition und automatisierte Provisioning-Workflows. Diese Template-Mechanismen ermöglichen Self-Service Storage-Bereitstellung mit vordefinierten Performance-, Verfügbarkeits- und Kostenprofilen für verschiedene Anwendungsanforderungen.
Storage-Klassen fungieren als Blueprint-Definitionen für dynamische Volume-Bereitstellung und spezifizieren Storage-Backend-Parameter, Performance-Charakteristika und Provisioning-Policies. Diese template-basierten Definitionen standardisieren Storage-Bereitstellungs-Workflows und reduzieren die Konfigurationskomplexität für Entwicklungsteams.
Die Provisioner-Integration definiert spezifische Storage-Backend-Treiber und deren Parameter für automatisierte Volume-Erstellungsprozesse. Diese Provisioner-Abstraktion ermöglicht vendor-neutrale Storage-Anfragen bei gleichzeitiger backend-spezifischer Optimierung.
Grundlegende Storage Class Struktur:
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: high-performance-ssd
annotations:
storageclass.kubernetes.io/is-default-class: "false"
provisioner: kubernetes.io/aws-ebs
parameters:
type: gp3
iops: "3000"
throughput: "125"
encrypted: "true"
reclaimPolicy: Delete
volumeBindingMode: WaitForFirstConsumer
allowVolumeExpansion: trueDas Policy-Framework implementiert Governance-Kontrollen für Storage-Bereitstellung mit Standard-Parametern, Ressourcenquoten und Zugriffsbeschränkungen. Diese Policy-Integration gewährleistet konsistente Storage-Bereitstellung entsprechend organisatorischen Standards und Budget-Einschränkungen.
QoS-Klassifikation ermöglicht Service-Level-Agreement-Definition für verschiedene Storage-Tiers mit Performance-, Verfügbarkeits- und Dauerhaftigkeits-Garantien. Diese QoS-Integration unterstützt anwendungsspezifische Storage-Anforderungen und Kostenoptimierungs-Strategien.
[Diagramm: Storage-Class-Architektur mit Provisioner, Policies und QoS-Ebenen]
Die verschiedenen Storage-Tiers adressieren unterschiedliche Anwendungsanforderungen mit spezifischen Performance- und Kostencharakteristika.
| Tier | IOPS | Durchsatz | Latenz | Kosten | Anwendungsfall |
|---|---|---|---|---|---|
| Premium | > 10.000 | > 500 MB/s | < 1ms | Hoch | Datenbanken, Real-time Analytics |
| Standard | 3.000-10.000 | 100-500 MB/s | < 5ms | Mittel | Web-Apps, APIs |
| Basic | < 3.000 | < 100 MB/s | < 10ms | Niedrig | Entwicklung, Testing |
| Archive | < 100 | < 10 MB/s | > 100ms | Sehr niedrig | Backups, Compliance |
High-Performance Storage-Classes spezifizieren SSD-basierte Storage mit niedrigen Latenzen und hohen IOPS-Charakteristika für performance-kritische Anwendungen:
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: database-tier
labels:
performance: high
cost: premium
provisioner: ebs.csi.aws.com
parameters:
type: io2
iopsPerGB: "50"
fsType: xfs
encrypted: "true"
reclaimPolicy: Retain # Wichtige Daten behalten
volumeBindingMode: WaitForFirstConsumer
allowVolumeExpansion: true
mountOptions:
- noatime
- nodiratimeStandard Storage-Classes balancieren Performance und Kosten für allgemeine Anwendungen mit moderaten Performance-Anforderungen:
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: general-purpose
annotations:
storageclass.kubernetes.io/is-default-class: "true"
provisioner: ebs.csi.aws.com
parameters:
type: gp3
iops: "3000"
throughput: "125"
fsType: ext4
reclaimPolicy: Delete
volumeBindingMode: WaitForFirstConsumer
allowVolumeExpansion: trueArchive Storage-Classes implementieren kostenoptimierte Storage für langfristige Datenaufbewahrung mit reduzierten Performance-Anforderungen:
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: archive-storage
labels:
performance: low
cost: optimized
provisioner: efs.csi.aws.com
parameters:
provisioningMode: efs-ap
fileSystemId: fs-12345678
directoryPerms: "0755"
performanceMode: generalPurpose
throughputMode: provisioned
reclaimPolicy: Retain
volumeBindingMode: ImmediateRegionale Storage-Classes definieren geografisch spezifische Storage-Bereitstellung für Datenresidenz und Compliance-Anforderungen:
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: eu-compliant-storage
provisioner: kubernetes.io/azure-disk
parameters:
storageaccounttype: Premium_LRS
location: westeurope
cachingmode: ReadOnly
reclaimPolicy: Retain
allowedTopologies:
- matchLabelExpressions:
- key: failure-domain.beta.kubernetes.io/zone
values:
- westeurope-1
- westeurope-2CSI-Provisioner implementieren Container Storage Interface Standards für moderne Storage-Backend-Integration:
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: ceph-csi-rbd
provisioner: rbd.csi.ceph.com
parameters:
clusterID: ceph-cluster-1
pool: kubernetes-rbd
imageFormat: "2"
imageFeatures: layering
csi.storage.k8s.io/provisioner-secret-name: csi-rbd-secret
csi.storage.k8s.io/provisioner-secret-namespace: ceph-csi-rbd
csi.storage.k8s.io/controller-expand-secret-name: csi-rbd-secret
csi.storage.k8s.io/controller-expand-secret-namespace: ceph-csi-rbd
csi.storage.k8s.io/node-stage-secret-name: csi-rbd-secret
csi.storage.k8s.io/node-stage-secret-namespace: ceph-csi-rbd
reclaimPolicy: Delete
allowVolumeExpansion: true
mountOptions:
- discardIn-Tree-Provisioner repräsentieren Legacy Storage-Integration-Methoden mit direkter Kubernetes-Code-Integration:
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: legacy-nfs-storage
annotations:
storageclass.kubernetes.io/deprecated: "true"
provisioner: kubernetes.io/nfs
parameters:
server: nfs-server.example.com
path: /exports/kubernetes
readOnly: "false"
reclaimPolicy: Retain
mountOptions:
- hard
- nfsvers=4.1
- proto=tcp
- timeo=600
- retrans=2External-Provisioner ermöglichen Third-Party Storage-System-Integration ohne Core-Kubernetes-Modifikationen:
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: netapp-ontap-nas
provisioner: csi.trident.netapp.io
parameters:
backendType: ontap-nas
media: ssd
provisioningType: thin
snapshots: "true"
clones: "true"
encryption: "true"
unixPermissions: "---rwxr-xr-x"
snapshotPolicy: default
exportPolicy: default
reclaimPolicy: Delete
allowVolumeExpansion: trueVolume-Binding-Mode-Konfiguration steuert das Timing von Volume-Bereitstellung und Pod-Scheduling:
Immediate Binding:
volumeBindingMode: Immediate
# Volume wird sofort nach PVC-Erstellung bereitgestellt
# Gut für: Shared Storage, weniger topology-sensitive WorkloadsWaitForFirstConsumer (Empfohlen):
volumeBindingMode: WaitForFirstConsumer
# Volume wird erst bereitgestellt, wenn Pod erstellt wird
# Gut für: Topology-aware provisioning, lokale StorageTopology-Spezifikation beschränkt Storage-Bereitstellung auf spezifische Node-Pools oder Availability-Zones:
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: zone-specific-storage
provisioner: kubernetes.io/aws-ebs
parameters:
type: gp3
volumeBindingMode: WaitForFirstConsumer
allowedTopologies:
- matchLabelExpressions:
- key: topology.kubernetes.io/zone
values:
- us-west-2a
- us-west-2b
- key: node.kubernetes.io/instance-type
values:
- m5.large
- m5.xlargeMount-Options-Definition spezifiziert Dateisystem-Mount-Parameter für Performance-Tuning oder Security-Hardening:
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: performance-optimized
provisioner: ebs.csi.aws.com
parameters:
type: gp3
fsType: xfs
Mount-Options definieren wichtige Dateisystem-Parameter für Performance-Tuning und Security-Hardening. Die Option noatime verhindert Access-Time-Updates für bessere Performance, während nodiratime Directory-Access-Time-Updates deaktiviert. Weitere Performance-Optimierungen umfassen nobarrier für deaktivierte Write-Barriers, inode64 für 64-bit-Inodes in großen Dateisystemen und allocsize=16m für optimierte Allocation-Größen.Das PVC-zu-StorageClass-Binding initiiert automatische Volume-Bereitstellung basierend auf Storage-Class-Spezifikationen:
# PVC mit expliziter Storage Class
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: database-storage
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 100Gi
storageClassName: database-tier # Explizite Storage Class# PVC ohne Storage Class (verwendet Default)
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: app-storage
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10Gi
# storageClassName weggelassen = Default Storage ClassVolume-Size-Management implementiert Minimum-, Maximum- und Standard-Size-Constraints:
# Erweiterte Storage Class mit Size-Constraints
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: size-controlled-storage
annotations:
# Metadata für Size-Management (implementierungsabhängig)
storage.alpha.kubernetes.io/minimum-size: "1Gi"
storage.alpha.kubernetes.io/maximum-size: "1Ti"
storage.alpha.kubernetes.io/default-size: "10Gi"
provisioner: ebs.csi.aws.com
parameters:
type: gp3
allowVolumeExpansion: trueRetry-Logik für fehlgeschlagene Provisioning-Versuche wird automatisch von Kubernetes gehandhabt, kann aber konfiguriert werden:
# Provisioning-Status prüfen
oc describe pvc failed-pvc
# Events für Troubleshooting
oc get events --field-selector reason=ProvisioningFailed
# Storage Class Parameter validieren
oc describe storageclass problematic-storage-classIOPS-Provisioning-Profile definieren Input/Output-Operations-Per-Second-Garantien für verschiedene Performance-Tiers:
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: iops-optimized
provisioner: ebs.csi.aws.com
parameters:
type: io2
iopsPerGB: "50" # 50 IOPS pro GB
# Für 100GB Volume = 5000 IOPS garantiert
reclaimPolicy: Delete
allowVolumeExpansion: trueThroughput-Optimierungs-Parameter spezifizieren Bandbreiten-Charakteristika für Streaming- oder Batch-Processing-Anwendungen:
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: throughput-optimized
provisioner: ebs.csi.aws.com
parameters:
type: gp3
throughput: "1000" # 1000 MB/s Durchsatz
iops: "16000" # Maximale IOPS für Throughput
reclaimPolicy: DeleteLatenz-Optimierung durch Storage-Tier-Auswahl und Caching-Konfiguration:
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: ultra-low-latency
provisioner: local.csi.k8s.io # Lokale NVMe-SSDs
parameters:
volumeType: nvme
fsType: xfs
directIO: "true" # Direct I/O für niedrigste Latenz
volumeBindingMode: WaitForFirstConsumer
allowedTopologies:
- matchLabelExpressions:
- key: node.kubernetes.io/instance-type
values:
- i3.large # Instance-Typen mit lokalen NVMe-SSDs
- i3.xlargeEncryption-at-Rest-Policies definieren Standard-Verschlüsselungseinstellungen für verschiedene Storage-Classes:
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: encrypted-storage
labels:
security: high
compliance: required
provisioner: ebs.csi.aws.com
parameters:
type: gp3
encrypted: "true"
kmsKeyId: "arn:aws:kms:us-west-2:123456789012:key/12345678-1234-1234-1234-123456789012"
reclaimPolicy: Retain # Verschlüsselte Daten behaltenAccess-Control-Integration mit RBAC-Systemen beschränkt Storage-Class-Nutzung basierend auf Benutzerrollen:
# RBAC für Storage Class Nutzung
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
namespace: production
name: premium-storage-user
rules:
- apiGroups: [""]
resources: ["persistentvolumeclaims"]
verbs: ["create", "get", "list"]
resourceNames: []
- apiGroups: ["storage.k8s.io"]
resources: ["storageclasses"]
verbs: ["get"]
resourceNames: ["database-tier", "high-performance-ssd"] # Nur bestimmte Storage ClassesAutomatisches Tagging von bereitgestellten Volumes für Compliance-Tracking:
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: gdpr-compliant-storage
provisioner: ebs.csi.aws.com
parameters:
type: gp3
encrypted: "true"
# Cloud-Provider-spezifische Tags
tagSpecification_1: "compliance=gdpr"
tagSpecification_2: "data-classification=personal"
tagSpecification_3: "retention-policy=7years"
reclaimPolicy: RetainCost-Tier-Definition implementiert Preis-Performance-Optimierung durch Storage-Backend-Auswahl:
# Budget Storage Class
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: budget-storage
labels:
cost-tier: budget
performance-tier: basic
provisioner: ebs.csi.aws.com
parameters:
type: gp2 # Günstigere GP2 statt GP3
fsType: ext4
reclaimPolicy: Delete
allowVolumeExpansion: false # Expansion deaktiviert für Kostenkontrolle
---
# Premium Storage Class
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: premium-storage
labels:
cost-tier: premium
performance-tier: high
provisioner: ebs.csi.aws.com
parameters:
type: io2
iopsPerGB: "50"
encrypted: "true"
reclaimPolicy: Retain
allowVolumeExpansion: trueAutomatisierte Lifecycle-Management-Policies für Kostenoptimierung:
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: lifecycle-managed-storage
annotations:
# Lifecycle-Policies (implementierungsabhängig)
lifecycle.storage.k8s.io/tier-transition: "standard-30d,archive-90d"
lifecycle.storage.k8s.io/deletion-policy: "delete-after-365d"
provisioner: s3.csi.aws.com
parameters:
mounter: geesefs
bucket: app-data-bucket
# S3 Lifecycle-Konfiguration
storageClass: STANDARD_IA
reclaimPolicy: DeleteNative Cloud-Storage-Services-Nutzung durch Kubernetes-Abstraktionen:
# AWS Storage Class
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: aws-multi-az-storage
provisioner: ebs.csi.aws.com
parameters:
type: gp3
encrypted: "true"
allowedTopologies:
- matchLabelExpressions:
- key: topology.kubernetes.io/zone
values: ["us-west-2a", "us-west-2b", "us-west-2c"]
---
# Azure Storage Class
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: azure-premium-storage
provisioner: disk.csi.azure.com
parameters:
skuName: Premium_LRS
location: westeurope
cachingmode: ReadOnlyMulti-Cloud-Data-Protection-Strategien für Disaster Recovery:
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: replicated-storage
annotations:
replication.storage.k8s.io/targets: "aws-us-west,azure-westeurope,gcp-us-central"
provisioner: rook-ceph.rbd.csi.ceph.com
parameters:
clusterID: multi-cloud-ceph
pool: replicated-pool
replication: "3" # 3-fache Replikation über CloudsKonsistente Namenskonventionen für Storage Classes erleichtern die Verwaltung:
# Empfohlene Namensstruktur: [provider]-[performance]-[features]
metadata:
name: aws-premium-encrypted # AWS, Premium Performance, Verschlüsselt
name: azure-standard-replicated # Azure, Standard Performance, Repliziert
name: local-fast-dev # Lokal, Schnell, DevelopmentStrukturierte Labels ermöglichen bessere Organisation und Auswahl von Storage Classes. Typische Label-Kategorien umfassen provider für den Cloud-Anbieter, performance für die Leistungsklasse, encryption für Verschlüsselungsstatus, cost-tier für Kostenkategorien, compliance für Compliance-Anforderungen und environment für die Umgebungsklassifikation.
Sorgfältige Verwaltung der Standard-Storage-Class:
# Aktuelle Default Storage Class anzeigen
oc get storageclass | grep "(default)"
# Default Storage Class ändern
oc patch storageclass old-default -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"false"}}}'
oc patch storageclass new-default -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}'Wichtige Metriken für Storage Class Monitoring:
# ServiceMonitor für Storage Class Metriken
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
name: storage-class-metrics
spec:
selector:
matchLabels:
app: csi-driver
endpoints:
- port: metrics
interval: 30sStorage Class Monitoring erfordert verschiedene wichtige Metriken wie Provisioning-Erfolgsrate pro Storage Class, durchschnittliche Provisioning-Zeit, Volume-Utilization nach Storage Class und Cost-per-GB nach Storage Class. Diese Metriken ermöglichen proaktive Kapazitätsplanung und Kostenoptimierung.
Häufige Probleme und Lösungsansätze:
# Storage Classes auflisten
oc get storageclass
# Storage Class Details anzeigen
oc describe storageclass problematic-storage-class
# PVC-Provisioning-Probleme debuggen
oc describe pvc stuck-pvc
# CSI-Driver-Status prüfen
oc get csidriver
# Storage Class Events prüfen
oc get events --all-namespaces | grep StorageClass