1. 首页 > Linux教程 > 正文

Linux教程FG438-Kubernetes持久化存储

内容简介:本文风哥教程参考Linux官方文档、Red Hat Enterprise Linux官方文档、Ansible Automation Platform官方文档、Docker官方文档、Kubernetes官方文档和Podman官方文档等内容,详细介绍了相关技术的配置和使用方法。

本文档介绍Kub

风哥提示:

ernetes持久化存储的配置和使用方法。

Part01-存储概念

1.1 存储组件

# Kubernetes存储概念
[root@k8s-master ~]# cat > /root/k8s-storage.txt << 'EOF' Kubernetes存储概念 ================= 1. PV (PersistentVolume) - 集群级资源 - 存储的抽象 - 独立于Pod生命周期 2. PVC (PersistentVolumeClaim) - 命名空间级资源 - 存储的声明 - 绑定到PV 3. StorageCl学习交流加群风哥QQ113257174ass - 动态存储供应 - 存储类型定义 - 自动创建PV 4. 访问模式 - ReadWriteOnce (RWO) - ReadOnlyMany (ROX) - ReadWriteMany (RWX) 5. 回收策略 - Retain: 保留数据 - Delete: 删除数据 - Recycle: 清理数据(已废弃) EOF

Part02-PV与PVC

2.1 创建PV

# 创建NFS PV
[root@k8s-master ~]# cat > fgedu-pv.yaml << 'EOF' apiVersion: v1 kind: PersistentVolume metadata: name: fgedu-pv-nfs labels: type: nfs app: fgedu spec: capacity: storage: 10Gi volumeMode: Filesystem accessModes: - ReadWriteMany persistentVolumeReclaimPolicy: Retain storageClassName: nfs nfs: server: 192.168.1.200 path: /data/fgedu EOF [root@k8s-master ~]# kubectl apply -f fgedu-pv.yaml persistentvolume/fgedu-pv-nfs created # 查看PV [root@k8s-master ~]# kubectl get pv NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS AGE fgedu-pv-nfs 10Gi RWX Retain Available nfs 10s # 创建PVC [root@k8s-master ~]# cat > fgedu-pvc.yaml << 'EOF' apiVersion: v1 kind: PersistentVolumeClaim metadata: name: fgedu-pvc spec: accessModes: - ReadWriteMany storageClassName: nfs resources: requests: storage: 5Gi selector: matchLabels: app: fgedu EOF [root@k8s-master ~]# kubectl apply -f fgedu-pvc.yaml persistentvolumeclaim/fgedu-pvc created # 查看PVC [root@k8s-master ~]# kubectl get pvc NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE fgedu-pvc Bound fgedu-pv-nfs 10Gi RWX nfs 10s # 查看PV绑定状态 [root@k8s-master ~]# kubectl get pv NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS AGE fgedu-pv-nfs 10Gi RWX Retain Bound default/fgedu-pvc nfs 1m

Part03-StorageClass

3.1 动态存储供应

# 创建StorageClfrom PG视频:www.itpux.comass
[root@k8s-master ~]# cat > fgedu-storageclass.yaml << 'EOF' apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: fgedu-nfs-storage provisioner: nfs.fgedu.net.cn parameters: archiveOnDelete: "true" reclaimPolicy: Delete volumeBindingMode: Immediate allowVolumeExpansion: true EOF [root@k8s-master ~]# kubectl apply -f fgedu-storageclass.yaml storageclass.storage.k8s.io/fgedu-nfs-storage created # 查看StorageClass [root@k8s-master ~]# kubectl get storageclass NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE AGE fgedu-nfs-storage nfs.fgedu.net.cn Delete Immediate 10s # 使用StorageClass创建PVC [root@k8s-master ~]# cat > fgedu-pvc-dynamic.yaml << 'EOF' apiVersion: v1 kind: PersistentVolumeClaim metadata: name: fgedu-pvc-dynamic spec: accessModes: - ReadWriteMany storageClassName: fgedu-nfs-storage resources: requests: storage: 20Gi EOF [root@k8s-master ~]# kubectl apply -f fgedu-pvc-dynamic.yaml persistentvolumeclaim/fgedu-pvc-dynamic created # 查看动态创建的PVC [root@k8s-master ~]# kubectl get pvc NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE fgedu-pvc Bound fgedu-pv-nfs 10Gi RWX nfs 5m fgedu-pvc-dynamic Bound pvc-abc123-def456-7890-123456789012 20Gi RWX fgedu-nfs-storage 10s

Part04-在Pod中使用PVC

4.1 Pod挂载PVC

# 创建使用PVC的Pod
[root@k8s-master ~]# cat > fgedu-pod-pvc.yaml << 'EOF' apiVersion: v1 kind: Pod metadata: name: fgedu-web-pvc spec: containers: - name: nginx image: nginx:1.25 ports: - containerPort: 80 volumeMounts: - name: data mountPath: /usr/share/nginx/html volumes: - name: data persistentVolumeClaim: claimName: fgedu-pvc EOF [root@k8s-master ~]# kubectl apply -f fgedu-pod-pvc.yaml pod/fgedu-web-pvc created # 创建使用PVC的Deployment [root@k8s-master ~]# cat > fgedu-deployment-pvc.yaml << 'EOF' apiVersion: apps/v1 kind: Deployment metadata: name: fgedu-mysql spec: replicas: 1 selector: matchLabels: app: fgedu-mysql template: metadata: labels: app: fgedu-mysql spec: containers: - name: mysql image: mysql:8.0 ports: - containerPort: 3306 env: - name: MYSQL_ROOT_PASSWORD value: root123 - name: MYSQL_DATABASE value: fgedudb volumeMounts: - name: mysql-data mountPath: /var/lib/mysql volumes: - name: mysql-data persistentVolumeClaim: claimName: fgedu-pvc-dynamic EOF [root@k8s-master ~]# kubectl apply -f fgedu-deployment-pvc.yaml deployment.apps/fgedu-mysql created # 查看Pod挂载状态 [root@k8s-master ~]# kubectl describe pod fgedu-web-pvc | grep -A 10 "Volumes:" Volumes: data: Type: PersistentVolumeClaim ClaimName: fgedu-pvc ReadOnly: false kube-api-access-abc12: Type: Projected (a volume that contains injected data from multiple sources) TokenExpirationSeconds: 3607 ConfigMapName: kube-root-ca.crt ConfigMapOptional:
DownwardAPI: true
风哥针对持久化存储建议:

  • 使用StorageClass动态供应
  • 配置适当的访问模式
  • 设置合理的回收策略
  • 定期备份重要数据
  • 监控存储使用情况

本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html

联系我们

在线咨询:点击这里给我发消息

微信号:itpux-com

工作日:9:30-18:30,节假日休息