Kubernetes之存储管理(上)

数据持久化的主要方式简介

pod是临时的,pod中的数据随着pod生命周期的结束也会被一起删除。
pod想实现数据持久化主要有以下几种方式:

  1. emptyDir:类似于docker run –v /xx,在物理机里随机产生一个目录(这个目录其实挂载的是物理机内存),然后把这个目录挂载到容器里/xx目录。当pod删除时,emptyDir对应的目录也会被删除。一般做临时存储。
  2. hostPath:类似于docker run –v /data:/xx,将物理机里的/data目录隐射到容器里的/xx目录,删除pod后,数据仍然保留。pod迁移数据不会跟着迁移,继续保留在原来的物理机。
  3. NFS网络存储
    解决了hostPath存在的问题,但在pod中配置不便。
  4. 持久性存储
    创建PV,从PV创建PVC
  5. 动态卷供应
    不需要提前创建PV,只要创建好storageClass之后就不用管PV了,用户创建PVC时,storageClass会自动创建一个pv和这个pvc绑定

使用emptyDir做临时存储

类似于docker run –v /xx,在物理机里随机产生一个目录(这个目录其实挂载的是物理机内存),然后把这个目录挂载到容器里/xx目录。当pod删除时,emptyDir对应的目录也会被删除。一般做临时存储或两个容器之间的共享存储。

  • 创建新目录
mkdir ~/volume
cd ~/volume
  • 创建emp.yaml文件
apiVersion: v1
kind: Pod
metadata:
  name: pod1
spec:
  volumes:
  - name: volume1                   ## 创建一个卷
    emptyDir: {}
  containers:
  - image: nginx
    imagePullPolicy: IfNotPresent
    name: pod1
    volumeMounts:
    - name: volume1                        ## 将创建的卷挂载
      mountPath: /usr/share/nginx/html

注意:/usr/share/nginx/html目录不存在的话会自动创建

  • 创建pod,查看状态
kubectl apply -f emp.yaml
kubectl get pod

在这里插入图片描述

  • 查看该pod在哪个主机运行
kubectl get pod -o wide

在这里插入图片描述

  • 在sun005上查看容器属性
docker ps | grep pod1
docker inspect 86711c8d7914

在这里插入图片描述
在这里插入图片描述

  • 上传文件测试,可以看到实现了数据共享
kubectl cp emp.yaml pod1:/usr/share/nginx/html
kubectl exec pod1 -- ls /usr/share/nginx/html
cd /var/lib/kubelet/pods/3d5a4eb0-3201-4c83-85a5-abb1d8ae390f/volumes/kubernetes.io~empty-dir/volume1
ls

在这里插入图片描述
在这里插入图片描述

  • 删除此pod,可以看到,临时目录也被删除
kubectl delete -f emp.yaml

在这里插入图片描述
在这里插入图片描述

使用hostPath做本地存储

类似于docker run –v /data:/xx,将物理机里的/data目录隐射到容器里的/xx目录,如果删除pod后,数据仍然保留。pod迁移数据不会跟着迁移,继续保留在原来的物理机。

  • 创建hostpath.yaml文件
apiVersion: v1
kind: Pod
metadata:
  name: pod1
spec:
  volumes:
  - name: volume1                                   ## 创建一个hostPath的卷,名字为volume1
    hostPath:
      path: /var/www/html
  containers:
  - image: nginx
    imagePullPolicy: IfNotPresent
    name: pod1
    volumeMounts:                                  ## 将创建的卷挂载
    - name: volume1
      mountPath: /usr/share/nginx/html
  • 创建pod,查看pod运行的节点
kubectl apply -f hostpath.yaml
kubectl get pod -o wide

在这里插入图片描述

  • 在sun005上测试,可以看到数据成功共享
docker ps | grep pod1
docker inspect b7e6821a834f
kubectl cp emp.yaml pod1:/usr/share/nginx/html
kubectl cp hostpath.yaml pod1:/usr/share/nginx/html
kubectl exec pod1 -- ls /usr/share/nginx/html
ls /var/www/html

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 删除此pod,可以看到,在物理机上该目录仍然存在
kubectl delete -f emp.yaml

在这里插入图片描述
在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值