k8s持久化存储

1、存储卷介绍

存储卷的分类

# kubectl explain pod.spec.volumes

存储卷的选择

  • 文件存储,如nfs、glusterfs、cephfs等,数据共享,但是性能较差

  • 块存储,如iscsi、rbd等,性能较好,不能实现数据共享(部分)

  • 对象存储,如ceph对象存储,性能好,数据共享,但是使用方式特殊,支持较少。

2、本地存储卷应用

2.1 emptyDir

实现pod内容器之间数据共享,随着pod被删除,该卷也会被删除

# cat volume-emptydir.yml 
apiVersion: v1
kind: Pod
metadata:
  name: volume-emptydir
spec:
  containers:
  - name: write
    image: centos:centos7
    imagePullPolicy: IfNotPresent
    command: ["bash", "-c", "echo haha > /data/1.txt;sleep 6000"]
    volumeMounts:
    - name: data
      mountPath: /data

  - name: read
    image: centos:centos7
    imagePullPolicy: IfNotPresent
    command: ["bash", "-c", "cat /data/1.txt; sleep 6000"]
    volumeMounts:
    - name: data
      mountPath: /data

  volumes:
  - name: data
    emptyDir: {}

# kubectl apply -f volume-emptydir.yml
# kubectl logs -f volume-emptydir write
# kubectl exec -it volume-emptydir -c write -- /bin/bash

2.2 hostPath

Pod内与集群节点主机目录映射

# cat volume-hostpath.yml 
apiVersion: v1
kind: Pod
metadata:
  name: volume-hostpath
spec:
  containers:
  - name: busybox
    image: busybox
    imagePullPolicy: IfNotPresent
    command: ["/bin/sh", "-c", "echo hahahah > /data/1.txt;sleep 6000"]
    volumeMounts:
    - name: data
      mountPath: /data

  volumes:
  - name: data
    hostPath:
      path: /opt
      type: Directory
# kubectl apply -f volume-hostpath.yml
2.3 nfs
# cat volume-nfs.yml 
apiVersion: apps/v1
kind: Deployment
metadata:
  name: volume-nfs
spec:
  replicas: 2
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.15-alpine
        imagePullPolicy: IfNotPresent
        volumeMounts:
        - name: documentroot
          mountPath: /usr/share/nginx/html
        ports:
        - containerPort: 80
      volumes:
      - name: documentroot
        nfs:
          server: 192.168.16.133
          path: /data/nfs

3、PV和PVC

kubernetes存储卷分类太丰富了,每种类型都要写相应的接口与参数才行,这就让维护与管理难度加大。
PersistentVolume(PV)是配置好的一段存储,可以是任意类型的存储卷
PersistentVolumeClaim(PVC)是用户pod使用PV的申请请求

pv与pvc之间的关系,pv提供存储资源,pvc使用存储资源,使用pvc绑定pv

创建pv

# cat pv-nfs.yml 
apiVersion: v1
kind: PersistentVolume
metadata:
  name: pv-nfs
spec:
  capacity:
    storage: 1Gi
  accessModes:
    - ReadWriteMany
  nfs:
    path: /data/nfs
    server: 192.168.16.131

创建pvc

# cat pvc-nfs.yml 
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: pvc-nfs
spec:
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 1Gi

创建使用pvc的deployment资源对象

# cat deploy-nginx-pvc.yml 
apiVersion: apps/v1
kind: Deployment
metadata:
  name: deploy-nginx-pvc
spec:
  replicas: 2
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.15-alpine
        imagePullPolicy: IfNotPresent
        ports:
        - containerPort: 80
        volumeMounts:
        - name: www
          mountPath: /usr/share/nginx/html
      volumes:
      - name: www
        persistentVolumeClaim:
          claimName: pvc-nfs

4、存储动态供给

通过nfs实现存储动态供给,官方不支持nfs,通过第三方插件实现

第三方插件地址:https://github.com/kubernetes-retired/external-storage

posted @   原来是你~~~  阅读(19)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具
点击右上角即可分享
微信分享提示