k8s之hostPath存储卷
一、简介
- hostPath:用于将目录从工作节点的文件系统挂载到pod中。
- 数据的生命周期与节点相同。我们知道,虽然hostPath卷实现pod中数据存储到节点的文件系统中,但是pod的调度不是固定的,也就是当pod消失后deployment重新创建一个pod,而这pod如果不是被调度到之前pod的节点,那么该pod就不能访问之前的数据。
二、配置参数
path:指定工作节点上的目录路径,必选字段
type:指定节点之上存储类型
DirectoryOrCreate # 目录存在就使用,不存在就先创建再使用
Directory # 目录必须存在
FileOrCreate # 文件存在就使用,不存在就先创建再使用
File # 文件必须存在
Socket # unix套接字必须存在
CharDevice # 字符设备必须存在
BlockDevice # 块设备必须存在
三、创建存储卷
root@k8s-master01:~/learning-k8s/examples/volumes# cat pod-with-hostpath-vol.yaml
apiVersion: v1
kind: Pod
metadata:
name: redis
spec:
containers:
- name: redis
image: redis:7-alpine
imagePullPolicy: IfNotPresent
volumeMounts:
- name: redisdata
mountPath: /data
volumes:
- name: redisdata
hostPath:
type: DirectoryOrCreate
path: /data/redis
root@k8s-master01:~/learning-k8s/examples/volumes# kubectl get pod
NAME READY STATUS RESTARTS AGE
redis 1/1 Running 0 4m10s
四、删除容器验证数据持久性
1、进入redis容器创建测试数据
root@k8s-master01:~/learning-k8s/examples/volumes# kubectl exec -it redis /bin/sh
kubectl exec [POD] [COMMAND] is DEPRECATED and will be removed in a future version. Use kubectl exec [POD] -- [COMMAND] instead.
/data #
/data # redis-cli
127.0.0.1:6379> SET site testdate
OK
127.0.0.1:6379> BGSAVE
Background saving started
127.0.0.1:6379> exit
/data # ls
dump.rdb
/data #
2、删除容器,验证数据持久性
容器第一次创建被调度到k8s-node01节点上
root@k8s-master01:~/learning-k8s/examples/volumes# kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
redis 1/1 Running 0 29m 10.244.2.26 k8s-node01 <none> <none>
删除重新创建重新调度到k8s-node01上,,并且数据还存在。
root@k8s-master01:~/learning-k8s/examples/volumes# kubectl delete pod redis
pod "redis" deleted
root@k8s-master01:~/learning-k8s/examples/volumes# kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
redis 1/1 Running 0 4s 10.244.2.27 k8s-node01 <none> <none>
root@k8s-master01:~/learning-k8s/examples/volumes# kubectl exec -it redis /bin/sh
kubectl exec [POD] [COMMAND] is DEPRECATED and will be removed in a future version. Use kubectl exec [POD] -- [COMMAND] instead.
/data # redis-cli
127.0.0.1:6379> KEYS *
1) "site"
127.0.0.1:6379> exit
/data # ls
dump.rdb
/data #
3、人为把容器调度到k8s-node02 上,通过nodeName: k8s-node02 设置,验证数据是否存在。
root@k8s-master01:~/learning-k8s/examples/volumes# cat pod-with-hostpath-vol.yaml
apiVersion: v1
kind: Pod
metadata:
name: redis
spec:
nodeName: k8s-node02
containers:
- name: redis
image: redis:7-alpine
imagePullPolicy: IfNotPresent
volumeMounts:
- name: redisdata
mountPath: /data
volumes:
- name: redisdata
hostPath:
type: DirectoryOrCreate
path: /data/redis
root@k8s-master01:~/learning-k8s/examples/volumes# kubectl apply -f pod-with-hostpath-vol.yaml
pod/redis created
root@k8s-master01:~/learning-k8s/examples/volumes# kubectl get pod -o wide -w
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
redis 1/1 Running 0 8m49s 10.244.1.3 k8s-node02 <none> <none>
root@k8s-master01:~/learning-k8s/examples/volumes# kubectl exec -it redis /bin/sh
kubectl exec [POD] [COMMAND] is DEPRECATED and will be removed in a future version. Use kubectl exec [POD] -- [COMMAND] instead.
/data # redis-cli
127.0.0.1:6379> KEYS *
(empty array)
127.0.0.1:6379> exit
/data # ls
以上可以看到k8s-node02没有数据,由此可以说明,hostPath只会在第一次创建的节点数据持久。
k8s之hostPath存储卷的更多相关文章
- k8s之存储卷及pvc
1.存储卷概述 因为pod是有生命周期的,pod一重启,里面的数据就没了,所以我们需要数据持久化存储,在k8s中,存储卷不属于容器,而是属于pod,也就是说同一个pod中的容器可以共享一个存储卷,存储 ...
- k8s存储卷概述
pod本身具有生命周期,故其内部运行的容器及其相关数据自身均无法持久存在.docker支持配置容器使用存储卷将数据持久存储于容器自身文件系统之外的存储空间中,它们可以是节点文件系统或网络文件系统之上的 ...
- k8s系列---存储卷pv/pvc。configMap/secert
因为pod是有生命周期的,pod一重启,里面的数据就没了.所以我们需要数据持久化存储. 在k8s中,存储卷不属于容器,而是属于pod.也就是说同一个pod中的容器可以共享一个存储卷. 存储卷可以是宿主 ...
- kubernetes系列10—存储卷详解
本文收录在容器技术学习系列文章总目录 1.认识存储卷 1.1 背景 默认情况下容器中的磁盘文件是非持久化的,容器中的磁盘的生命周期是短暂的,这就带来了一系列的问题:第一,当一个容器损坏之后,kubel ...
- Kubernetes学习之路(十六)之存储卷
目录 一.存储卷的概念和类型 二.emptyDir存储卷演示 三.hostPath存储卷演示 四.nfs共享存储卷演示 五.PVC和PV的概念 六.NFS使用PV和PVC 1.配置nfs存储 2.定义 ...
- (九)Kubernetes 存储卷
Kubernetes存储卷概述 Pod本身具有生命周期,这就带了一系列的问题,第一,当一个容器损坏之后,kubelet会重启这个容器,但是文件会丢失-这个容器会是一个全新的状态:第二,当很多容器在同一 ...
- Kubernetes 学习12 kubernetes 存储卷
一.概述 1.我们此前讲过根据应用本身是否需要持久存储数据以及某一次请求和之前的请求是否有联系,可以分为四类应用 a.有状态,要存储 b.有状态,无持久存储 c.无状态,要存储 d.无状态,无持久存储 ...
- k8s-数据持久化存储卷,nfs,pv/pvc
目录 数据持久化-储存卷 官方文档 存储卷类型 1.emptyDir 2.hostpath 3.pv/pvc(推荐使用) nfs官方文档 安装测试nfs pv/pvc管理nfs 官方文档 pv/pvc ...
- k8s学习笔记之八:存储卷
第一章.前言 默认情况下容器的数据都是非持久化的, 在容器消亡以后数据也跟着丢失, 所以 Docker 提供了 Volume 机制以便将数据持久化存储. 类似的, Kubernetes 提供了更强大的 ...
- k8s volume存储卷(四)
介绍 volume存储卷是Pod中能够被多个容器访问的共享目录,kubernetes的volume概念,用途和目的与docker的volume比较类似,但两者不能等价,首先,kubernetes中的v ...
随机推荐
- 使用Mockito与Squaretest进行单元测试.
项目开发过程中,不少公司都要求写单元测试的代码,可以提高代码的质量,并且可以减少出现BUG的概率. 对于中小型公司来说,对单元测试不做硬性要求,不写最好.因为还是需要一定的工作量,在保证代码质量和性能 ...
- idea branch 分支比较 | git 查看分支命令 `git branch -vv`
git 查看分支命令 git branch -vv
- 寒武纪加速平台(MLU200系列) 摸鱼指南(三)--- 模型移植-分割网络实例
PS:要转载请注明出处,本人版权所有. PS: 这个只是基于<我自己>的理解, 如果和你的原则及想法相冲突,请谅解,勿喷. 前置说明 本文作为本人csdn blog的主站的备份.(Bl ...
- Java课堂
import java.awt.*; import java.awt.event.*; import java.util.*; public class Main{ public static dou ...
- vue基础知识和原理(一)
1. vue基础知识和原理 1.1 初识Vue 想让Vue工作,就必须创建一个Vue实例,且要传入一个配置对象 demo容器里的代码依然符合html规范,只不过混入了一些特殊的Vue语法 demo容器 ...
- Activity系列博客5篇
目录介绍 01.前沿介绍 02.handleLaunchActivity 03.performLaunchActivity 04.activity.attach 05.Activity的onCreat ...
- JavaScript知识总结 终结篇--面向对象,垃圾回收与内存泄漏
这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 一.面向对象 一般使用字面量的形式直接创建对象,但是这种创建方式对于创建大量相似对象的时候,会产生大量的重复代码.但 js和一般的面向对象 ...
- ConnectionResetError: [WinError 10054] 远程主机强迫关闭了一个现有的连接
ConnectionResetError: [WinError 10054] 远程主机强迫关闭了一个现有的连接 是因为使用urlopen方法太过频繁,引起远程主机的怀疑,被网站认定为是攻击行为.导致u ...
- [Java]细节与使用经验
[版权声明]未经博主同意,谢绝转载!(请尊重原创,博主保留追究权) https://www.cnblogs.com/cnb-yuchen/p/18032072 出自[进步*于辰的博客] 纯文字阐述,内 ...
- OpenCvSharp inputs[0].size[1] % blobs[0].size[1] == 0
报错代码如图 详细错误 未处理 OpenCvSharp.OpenCVException HResult=-2146233088 Message=inputs[0].size[1] % blobs[0] ...