1.存储卷

emptyDir存储卷:

什么是emptyDir:
    是一个临时存储卷,与Pod的生命周期绑定到一起,如果Pod被删除了,这意味着数据也被随之删除。
    
emptyDir作用:
    (1)可以实现持久化;
    (2)同一个Pod的多个容器可以实现数据共享,多个不同的Pod之间不能进行数据通信;
    (3)随着Pod的生命周期而存在,当我们删除Pod时,其数据也会被随之删除;
    
    
emptyDir的应用场景:
    (1)临时缓存空间,比如基于磁盘的归并排序;
    (2)为较耗时计算任务提供检查点,以便任务能方便的从崩溃前状态恢复执行;
    (3)存储Web访问日志及错误日志等信息;
    
    
emptyDir优缺点:
    优点:
        (1)可以实现同一个Pod内多个容器之间数据共享;
        (2)当Pod内的某个容器被强制删除时,数据并不会丢失,因为Pod没有删除;
    缺点:
        (1)当Pod被删除时,数据也会被随之删除;
        (2)不同的Pod之间无法实现数据共享;
   

emptyDir的使用方式

apiVersion: v1
kind: Pod
metadata:
  name: mingcheng
spec:
  # 定义存储卷
  volumes:
    # 声明存储卷的名称
  - name: data
    # 声明存储卷类型为emptyDir.
    emptyDir: {}
  containers:
  - name: web
    image: harbor.www.com/www-web/nginx:1.25.1-alpine
    # 挂载存储卷
    volumeMounts:
      # 要挂载的存储卷名称
    - name: data
      # 指定容器的挂载点
      mountPath: /usr/share/nginx/html

hotsPath数据卷:

hotsPath数据卷:
    挂载Node文件系统(Pod所在节点)上文件或者目录到Pod中的容器。如果Pod删除了,宿主机的数据并不会被删除。


应用场景:
    Pod中容器需要访问宿主机文件。


hotsPath优缺点:
    优点:
        (1)可以实现同一个Pod不同容器之间的数据共享;
        (2)可以实现同一个Node节点不同Pod之间的数据共享;

    缺点:
        无法满足跨节点Pod之间的数据共享。

hotsPath的使用方式

apiVersion: v1
kind: Pod
metadata:
  name: hostpath
spec:
  # 定义存储卷
  volumes:
    # 声明存储卷的名称
  - name: data
    # 声明存储卷类型为hostPath
    hostPath:
      # 指定宿主机的路径
      path: /data
  nodeName: worker101
  containers:
  - name: web
    image: harbor.www.com/www-web/nginx:1.25.1-alpine
    # 挂载存储卷
    volumeMounts:
      # 要挂载的存储卷名称
    - name: data
      # 指定容器的挂载点
      mountPath: /usr/share/nginx/html

NFS数据卷:

NFS数据卷:
    提供对NFS挂载支持,可以自动将NFS共享路径挂载到Pod中。


NFS:
    英文全称为"Network File System"(网络文件系统),是由SUN公司研制的UNIX表示层协议(presentation layer protocol),能使使用者访问网络上别处的文件就像在使用自己的计算机一样。
    NFS是一个主流的文件共享服务器,但存在单点故障,我们需要对数据进行备份哟,如果有必要可以使用分布式文件系统哈。
 

nfs使用案例

(1)所有节点安装nfs相关软件包
 

[root@master101 ]# yum -y install nfs-utils
[root@worker102 ~]# yum -y install nfs-utils
[root@worker103 ~]# yum -y install nfs-utils

(2)master231节点设置共享目录

[root@master101 pod]# mkdir -pv /222/data/kubernetes
[root@master101 pod]# cat > /etc/exports <<'EOF'
/oldboyedu/data/kubernetes *(rw,no_root_squash)
EOF
[root@master101 pod]#

(3)配置nfs服务开机自启动


[root@master101 ]# systemctl enable --now nfs

(4)服务端检查NFS挂载信息

[root@master101]# exportfs 
/www/data/kubernetes
		<world>
[root@master101]#

(5)编写资源清单

apiVersion: v1
kind: Pod
metadata:
  name: nfs
spec:
  # 定义存储卷
  volumes:
    # 声明存储卷的名称
  - name: data
    # 声明nfs类型
    nfs:
      server: master231
      path: /www/data/kubernetes
  nodeName: worker102
  containers:
  - name: web
    image: harbor.www.com/www-web/nginx:1.25.1-alpine
    # 挂载存储卷
    volumeMounts:
      # 要挂载的存储卷名称
    - name: data
      # 指定容器的挂载点
      mountPath: /usr/share/nginx/html

其他参数

# 指定subPath,声明其在挂载点的文件名称。要和"po.spec.volumes.configMap.items.path"相同。
      # subPath: nginx.conf

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐