自学内容网 自学内容网

K8S的常见volumes存储卷

volumes分类
  1. 。emptyDir:临时存储,在 pod 生命周期内存在。可以对pod内多个容器进行数据持久化。典型应用: web日志,日志采集
  2. hostPath:挂载主机文件系统中的目录或文件。pod调度到节点,就会占用对应节点的目录
  3. persistentVolumeClaim:用于绑定持久化存储
  4. nfs:挂载网络文件系统
  5. configMap:从 ConfigMap 中挂载配置数据
  6. secret:从 Secret 中挂载敏感信息
  7. downwardAPI:获取 pod 的元数据
emptydir
emptydir介绍
  • emptydir是一种 K8S的一种存储卷类型,通常用在一个 Pod 中的多个容器之间共享数据。EmptyDir 默认将数据存储在节点的本地磁盘上,使用的是节点的文件系统

  • EmptyDir 无法跨节点共享数据

  • 当一个容器的日志需要采集时,就可以使用emptydir + 采集器实现数据共享

  • emptydir 存储卷的生命周期与 pod 一致,pod 终止时,存储卷会被释放,数据也随之被清除

  • 也可以将数据存储在内存中,适合需要高速度的数据访问场景,但也有内存限制

    • volumeMounts:
        - name: shared-data
          mountPath: /data
      volumes:
        - name: shared-data
          emptyDir:
            medium: Memory
      
使用emptydir使容器实现数据共享

1.在一个pod内创建2个容器,创建一个emptydir 卷给2个容器使用。如意第二个容器不要用apps

[root@master23107-volumes]# cat 01-emptydir_TwoPod.yaml 
apiVersion: v1
kind: Pod
metadata:
  name: emptydir-pod
spec:
  nodeName: worker233
  volumes:
  - name: zhiyong18-luckyboy
    emptyDir: {}
  containers:
  - name: xixipod
    image: registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps:v1
    volumeMounts:
    - name: zhiyong18-luckyboy
      mountPath: /xixi_pod
  - name: hahapod
    image: registry.cn-heyuan.aliyuncs.com/wzyall/alpine:3.20.2
    stdin: true
    volumeMounts:
    - name: zhiyong18-luckyboy
      mountPath: /haha_pod

2.连接进入容器,在其中一个容器查看到xixi目录,并创建文件

/ # cd /haha_pod/
/haha_pod # touch 1.txt
/haha_pod # 

3.在第二个容器查看到其他容器创建的文件

[root@master231~]# kubectl exec -it emptydir-pod -c xixipod -- sh
/ # ls /xixi_pod/
1.txt
/ # 

4.在对应的宿主机可以发现这个目录

/var/lib/kubelet/pods/030a766e-9166-4deb-b780-6ad2fe5b34af/plugins/kubernetes.io~empty-dir

5.删除kubectl delete pod yaml配置,一段时间后数据不存在

[root@worker232~]# find / -iname '*wenzhiyong666*'
[root@worker232~]# 
hostpath
  • 卷通过将宿主机文件系统上的路径挂载到 Pod 中,使得 Pod 内的容器可以访问该路径

  • 可以实现在宿主节点和 Pod 之间共享数据

  • 可以实现pod访问宿主机上特定的日志文件或数据目录

1.创建一个pod,然后在 pod调度到的节点创建目录:/hostpath-test

[root@master23107-volumes]# cat 02-hostpath.yaml 
apiVersion: v1
kind: Pod
metadata:
  name: hostpath-pod
spec:
  containers:
    - name: nginx
      image: registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps:v1
      volumeMounts:
        - mountPath: /data
          name: hostpath-volume
  volumes:
    - name: hostpath-volume
      hostPath:
        path: /hostpath-test
        type: Directory

2.进入pod写入数据,然后删除pod。

/ # touch /data/hostpath-test.txt

3.查看worker233节点数据被保留了

[root@worker233~]# ls /hostpath-test/
hostpath-test.txt
挂载总结

pod的数据持久化

  • emptyDir:
    应用场景:

    特点:
    1.删除pod内指定的容器时,数据并不丢失。
    2.当删除pod时,数据就丢失了,因此我们说emptyDir的生命周期随着pod。
    3.可以实现同一个pod不同容器的数据共享。

  • hostPath
    应用场景:
    pod内的容器需要访问worker节点的指定目录。

    特点:
    1.无论是删除pod还是容器,数据始终不丢失。
    2.可以实现同一个节点不同pod的数据共享


原文地址:https://blog.csdn.net/qq_73797346/article/details/144361217

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!