【kubernetes】持久化存储 —— nfs,emptyDir,hostPath

一,概要

1,实现步骤

想要使用存储卷,需要经历如下步骤
1、定义pod的volume,这个volume指明它要关联到哪个存储上的
2、在容器中要使用volumemounts挂载对应的存储

2,常用存储类型

# kubectl explain pods.spec.volumes

emptyDir	<Object>   # 临时目录,随之删除
hostPath	<Object>   # 宿主机目录
nfs	        <Object>
persistentVolumeClaim	<Object>
glusterfs	<Object>
cephfs	    <Object>
configMap	<Object>
secret	    <Object>

二,应用

(1)emptyDir类型

在宿主机上,创建临时目录作为存储地址。当pod删除后,该临时目录一并删除。

# cat emptydir.yaml 

apiVersion: v1
kind: Pod
metadata:
  name: name-emptydir
spec:
  containers:
  - name: pod-emptydir
    image: nginx
    imagePullPolicy: IfNotPresent
    volumeMounts:       # 定义pod的目录参数
    - name: pod-volume  # 目录名字必须与volumes的名字相同
      mountPath: /cache # pod内的指定的挂在目录
  volumes:              # 定义宿主机目录参数
  - emptyDir: {}        # 设定宿主机指定临时目录
    name: pod-volume    # 目录名字必须与 volumeMounts名字相同

【查找临时目录的位置】:

第一步:查找uid

kubectl get pods name-emptydir -o yaml | grep uid

uid: a105fca2-b82c-46c2-8ba3-e0aa3f528540

第二步:在pod分配node节点拼接路径

/var/lib/kubelet/pods/ + uid值 可以通过tree命令向下查找

完整地址
第三步:测试内容同步
在这里插入图片描述

缺点:
pod删除,数据删除。

(2)hostPath类型

hostPath Volume是指Pod挂载宿主机上的目录或文件。
hostPath Volume使得容器可以使用宿主机的文件系统进行存储,

hostpath(宿主机路径):节点级别的存储卷,在pod被删除,这个存储卷还是存在的,不会被删除,所以只要同一个pod被调度到同一个节点上来,在pod被删除重新被调度到这个节点之后,对应的数据依然是存在的。

# cat hostpath.yaml
 
apiVersion: v1
kind: Pod
metadata:
  name: test-hostpath
spec:
  containers:
  - image: nginx
    imagePullPolicy: IfNotPresent
    name: test-nginx
    volumeMounts:
    - mountPath: /test-nginx
      name: test-volume    # 与volumes的名称一致
  - image: tomcat:8.5-jre8-alpine
    imagePullPolicy: IfNotPresent
    name: test-tomcat
    volumeMounts:
    - mountPath: /test-tomcat
      name: test-volume    # 与volumes的名称一致
  volumes:
  - name: test-volume      # 与容器pod的名称一致
    hostPath:           
      path: /data1         # 宿主机的路径
      type: DirectoryOrCreate  # 查看下面图说明:

在这里插入图片描述

进入到指定pod内的指定容器内:

kubectl exec -it test-hostpath -c test-tomcat -- /bin/bash

缺点:
单节点。 pod删除之后,数据虽然没有丢失,但是重新创建的pod,必须调度到同一个node节点,数据才会还原。

(3)nfs类型
一,安装NFS:网络文件系统。

第一步:在master和其他node节点安装NFS

yum install nfs-utils -y
systemctl start nfs
systemctl enable nfs --now
systemctl status nfs

第二步:在master节点配置NFS

# 在宿主机创建NFS需要的共享目录
mkdir /data/volumes -pv 

# vim /etc/exports
/data/volumes *(rw,no_root_squash)

# 保持生效
exportfs -arv
service nfs restart
  • rw 该主机对该共享目录有读写权限
  • no_root_squash 登入 NFS 主机使用分享目录的使用者,如果是 root 的话,那么对于这个分享的目录来说,他就具有 root 的权限

第三步:在node01上,手动测试 挂载/卸载

【挂载】:

mkdir /test 
mount 192.168.40.180:/data/volumes /test/

# 如果执行如下命令,查看挂载卷,说明nfs可以被正常挂载
df -h
192.168.40.180:/data/volumes   50G  5.2G   45G  11% /test

挂载成功

【卸载】:

umount /test
二,创建Pod,挂载NFS共享出来的目录。
# cat nfs.yaml 

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nfs-test
spec:
  replicas: 3
  selector:
    matchLabels:
      cunchu: nfs
  template:
    metadata:
      labels:
        cunchu: nfs
    spec:
      containers:
      - name: test-nfs
        image: xianchao/nginx:v1
        imagePullPolicy: IfNotPresent
        ports:
        - containerPort: 80
          protocol: TCP
        volumeMounts:
        - name: nfs-volumes    # 与指定的卷名称一致
          mountPath: /usr/share/nginx/html
      volumes:
      - name: nfs-volumes      # 卷名称
        nfs:
          server: 192.168.40.180   # 服务主机ip,此处为master主机ip
          path: /data/volumes      # 与之前创建的nfs的共享卷地址一致

删除其中一个pod,自动生成的pod后,依然数据可以访问。
在这里插入图片描述

缺点:
单节点。 存储节点一单宕机,所有pod共享数据集,均丢失。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一直奔跑在路上

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值