Kubernetes持久化存储2——探究实验
目录贴:Kubernetes学习系列
一、简介
本文在“创建PV,创建PVC挂载PV,创建POD挂载PVC”这个环境的基础上,进行各种删除实验,并记录、分析各资源的状态。
二、实验脚本
实验创建了一个PV、一个PVC挂载了PV、一个POD挂载PVC,并编写了两个简单的小脚本来快速创建和删除环境。对应的脚本如下所示:
需要注意的是在创建PV时,PV并不会去检查你配置的server是否真的存在;也不会检查server上是否有一个可用的NFS服务;当然更不会检查你设置的storage大小是否真有那么大。个人感觉PV的设置只是一个声明,系统并不会对此做任何检查。PVC的挂载也只是根据配额的大小和访问模式,过滤一下PV,并以最小的代价支持。
[root@k8s-master pv]# cat nfs-pv.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv0001
spec:
capacity:
storage: 5Gi
accessModes:
- ReadWriteMany
persistentVolumeReclaimPolicy: Recycle
nfs:
path: "/data/disk1"
server: 192.168.20.47
readOnly: false
[root@k8s-master pv]# cat pvc.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: nfs-pvc
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 1Gi
[root@k8s-master pv]# cat test-pvc-pod.yaml
apiVersion: v1
kind: Pod
metadata:
name: test-nfs-pvc
labels:
name: test-nfs-pvc
spec:
containers:
- name: test-nfs-pvc
image: registry:/back_demon:1.0
ports:
- name: backdemon
containerPort:
command:
- /run.sh
volumeMounts:
- name: nfs-vol
mountPath: /home/laizy/test/nfs-pvc
volumes:
- name: nfs-vol
persistentVolumeClaim:
claimName: nfs-pvc
[root@k8s-master pv]# cat start.sh
#!/bin/bash
kubectl create -f nfs-pv.yaml
kubectl create -f pvc.yaml
kubectl create -f test-pvc-pod.yaml
[root@k8s-master pv]# cat remove.sh
#!/bin/bash
kubectl delete pod test-nfs-pvc
kubectl delete persistentvolumeclaim nfs-pvc
kubectl delete persistentvolume pv0001
[root@k8s-master pv]#
三、删除PV实验
创建PV,创建PVC挂载PV,创建POD挂载PVC。在删除PV后,PVC状态从Bound变为Lost,Pod中的Volume仍然能用,数据也没有被删除。
[root@k8s-master pv]# ./start.sh
persistentvolume "pv0001" created
persistentvolumeclaim "nfs-pvc" created
pod "test-nfs-pvc" created
[root@k8s-master pv]# kubectl get persistentvolume
NAME CAPACITY ACCESSMODES RECLAIMPOLICY STATUS CLAIM REASON AGE
pv0001 5Gi RWX Recycle Bound default/nfs-pvc 15s
[root@k8s-master pv]# kubectl get persistentvolumeclaim
NAME STATUS VOLUME CAPACITY ACCESSMODES AGE
nfs-pvc Bound pv0001 5Gi RWX 18s
[root@k8s-master pv]# kubectl get pod test-nfs-pvc
NAME READY STATUS RESTARTS AGE
test-nfs-pvc / Running 39s
[root@k8s-master pv]# kubectl delete persistentvolume pv0001
persistentvolume "pv0001" deleted
[root@k8s-master pv]# kubectl get persistentvolume
No resources found.
[root@k8s-master pv]# kubectl get persistentvolumeclaim
NAME STATUS VOLUME CAPACITY ACCESSMODES AGE
nfs-pvc Lost pv0001 1m
[root@k8s-master pv]# kubectl get pod test-nfs-pvc
NAME READY STATUS RESTARTS AGE
test-nfs-pvc / Running 1m
[root@k8s-master pv]# kubectl exec -ti test-nfs-pvc /bin/bash
[root@test-nfs-pvc /]# cd /home/laizy/test/nfs-pvc/
[root@test-nfs-pvc nfs-pvc]# ls
.out
[root@test-nfs-pvc nfs-pvc]# exit
exit
[root@k8s-master pv]#
四、删除PVC实验
4.1清空Pod设置
设置PV时,如果设置了回收策略是“回收”的时候,在删除PVC时,系统(Controller-Manager)会启动一个recycler的Pod,用于清理数据卷中的内容。每种数据卷的回收Pod是不同的,都有自己特定的逻辑。本文以NFS为例,给出具体配置及Pod描述如下:
[root@k8s-master ~]# cat /etc/kubernetes/controller-manager #配置完成后请重启controller-manager
###
# The following values are used to configure the kubernetes controller-manager # defaults from config and apiserver should be adequate # Add your own!
KUBE_CONTROLLER_MANAGER_ARGS="--pv-recycler-pod-template-filepath-nfs=/etc/kubernetes/recycler.yaml"
[root@k8s-master ~]# cat /etc/kubernetes/recycler.yaml
apiVersion: v1
kind: Pod
metadata:
name: pv-recycler-
namespace: default
spec:
restartPolicy: Never
volumes:
- name: vol
hostPath:
path: /any/path/it/will/be/replaced
containers:
- name: pv-recycler
image: "docker.io/busybox"
imagePullPolicy: IfNotPresent
command: ["/bin/sh", "-c", "test -e /scrub && rm -rf /scrub/..?* /scrub/.[!.]* /scrub/* && test -z \"$(ls -A /scrub)\" || exit 1"]
volumeMounts:
- name: vol
mountPath: /scrub
[root@k8s-master ~]#
如果不进行上面的设置的话,默认回收Pod用的image是gcr上的busybox,因为种种原因,在国内是无法下载的(即使你的机器上有gcr的busybox也不可以,还需要设置镜像下载策略为IfNotPresent,否则会一直去gcr查询是否有新版本的镜像,这也会导致imagePullError)。所以必须要在Controller-Manager中进行设置,设置成随便哪个busybox。
4.2删除实验
创建PV,创建PVC挂载PV,创建POD挂载PVC。删除PVC后,PV状态从Bound变为Available,系统(controller-manager)调用持久化存储清理插件(recycler-for-pv0001),将PVC对应的PV清空。Pod中的Volume仍然能用,但volume中的数据被删除了。
[root@k8s-master pv]# ./start.sh
persistentvolume "pv0001" created
persistentvolumeclaim "nfs-pvc" created
pod "test-nfs-pvc" created
[root@k8s-master pv]# kubectl get persistentvolume
NAME CAPACITY ACCESSMODES RECLAIMPOLICY STATUS CLAIM REASON AGE
pv0001 5Gi RWX Recycle Bound default/nfs-pvc 11s
[root@k8s-master pv]# kubectl get persistentvolumeclaim
NAME STATUS VOLUME CAPACITY ACCESSMODES AGE
nfs-pvc Bound pv0001 5Gi RWX 14s
[root@k8s-master pv]# kubectl get pod
NAME READY STATUS RESTARTS AGE
test-nfs-pvc / Running 19s
[root@k8s-master pv]# kubectl exec -ti test-nfs-pvc /bin/bash
[root@test-nfs-pvc /]# touch /home/laizy/test/nfs-pvc/.out
[root@test-nfs-pvc /]# cd /home/laizy/test/nfs-pvc/
[root@test-nfs-pvc nfs-pvc]# ls
.out
[root@test-nfs-pvc nfs-pvc]# exit
exit
[root@k8s-master pv]# kubectl delete persistentvolumeclaim nfs-pvc
persistentvolumeclaim "nfs-pvc" deleted
[root@k8s-master pv]# kubectl get pod
NAME READY STATUS RESTARTS AGE
recycler-for-pv0001 / ContainerCreating 1s
test-nfs-pvc / Running 1m
[root@k8s-master pv]# kubectl get persistentvolume
NAME CAPACITY ACCESSMODES RECLAIMPOLICY STATUS CLAIM REASON AGE
pv0001 5Gi RWX Recycle Available 1m
[root@k8s-master pv]# kubectl get persistentvolumeclaim
No resources found.
[root@k8s-master pv]# kubectl get pod test-nfs-pvc
NAME READY STATUS RESTARTS AGE
test-nfs-pvc / Running 2m
[root@k8s-master pv]# kubectl exec -ti test-nfs-pvc /bin/bash
[root@test-nfs-pvc /]# ls /home/laizy/test/nfs-pvc/
[root@test-nfs-pvc /]
五、删除Pod实验
创建PV,创建PVC挂载PV,创建POD挂载PVC。删除Pod后,PV、PVC状态没变,Pod中的Volume对应的NFS数据没有被删除。
[root@k8s-master pv]# ./start.sh
persistentvolume "pv0001" created
persistentvolumeclaim "nfs-pvc" created
pod "test-nfs-pvc" created
[root@k8s-master pv]# kubectl get persistentvolume
NAME CAPACITY ACCESSMODES RECLAIMPOLICY STATUS CLAIM REASON AGE
pv0001 5Gi RWX Recycle Bound default/nfs-pvc 11s
[root@k8s-master pv]# kubectl get persistentvolumeclaim
NAME STATUS VOLUME CAPACITY ACCESSMODES AGE
nfs-pvc Bound pv0001 5Gi RWX 27s
[root@k8s-master pv]# kubectl get pod
NAME READY STATUS RESTARTS AGE
test-nfs-pvc / Running 36s
[root@k8s-master pv]# kubectl exec -ti test-nfs-pvc /bin/bash
[root@test-nfs-pvc /]# cat /home/laizy/test/nfs-pvc/.out [root@test-nfs-pvc /]# exit
exit
[root@k8s-master pv]# kubectl delete pod test-nfs-pvc
pod "test-nfs-pvc" deleted
[root@k8s-master pv]# kubectl get persistentvolume
NAME CAPACITY ACCESSMODES RECLAIMPOLICY STATUS CLAIM REASON AGE
pv0001 5Gi RWX Recycle Bound default/nfs-pvc 8m
[root@k8s-master pv]# kubectl get persistentvolumeclaim
NAME STATUS VOLUME CAPACITY ACCESSMODES AGE
nfs-pvc Bound pv0001 5Gi RWX 8m
[root@k8s-master pv]# ssh 192.168.20.47 #登录到远程NFS服务器
root@192.168.20.47's password:
Last failed login: Mon Mar :: CST from : on :
There was failed login attempt since the last successful login.
Last login: Mon Mar ::
[root@localhost ~]# cd /data/disk1/.out
Kubernetes持久化存储2——探究实验的更多相关文章
- Kubernetes 持久化存储是个难题,解决方案有哪些?\n
像Kubernetes 这样的容器编排工具正在彻底改变应用程序的开发和部署方式.随着微服务架构的兴起,以及基础架构与应用程序逻辑从开发人员的角度解耦,开发人员越来越关注构建软件和交付价值. Kuber ...
- Kubernetes持久化存储1——示例
目录贴:Kubernetes学习系列 一.简介 存储管理与计算管理是两个不同的问题.Persistent Volume子系统,对存储的供应和使用做了抽象,以API形式提供给管理员和用户使用.要完成这一 ...
- Kubernetes 学习(十)Kubernetes 容器持久化存储
0. 前言 最近在学习张磊老师的 深入剖析Kubernetes 系列课程,最近学到了 Kubernetes 容器持久化存储部分 现对这一部分的相关学习和体会做一下整理,内容参考 深入剖析Kuberne ...
- kubernetes学习 做持久化存储
本节演示如何为 MySQL 数据库提供持久化存储,步骤: 1.创建 PV 和 PVC 2.部署 MySQL 3.向 MySQL 添加数据 4.模拟节点宕机故障,Kubernetes 将 MySQL 自 ...
- 使用Ceph集群作为Kubernetes的动态分配持久化存储(转)
使用Docker快速部署Ceph集群 , 然后使用这个Ceph集群作为Kubernetes的动态分配持久化存储. Kubernetes集群要使用Ceph集群需要在每个Kubernetes节点上安装ce ...
- Kubernetes 系列(六):持久化存储 PV与PVC
在使用容器之后,我们需要考虑的另外一个问题就是持久化存储,怎么保证容器内的数据存储到我们的服务器硬盘上.这样容器在重建后,依然可以使用之前的数据.但是显然存储资源和 CPU 资源以及内存资源有很大不同 ...
- Kubernetes 使用 ceph-csi 消费 RBD 作为持久化存储
原文链接:https://fuckcloudnative.io/posts/kubernetes-storage-using-ceph-rbd/ 本文详细介绍了如何在 Kubernetes 集群中部署 ...
- Kubernetes之持久化存储
转载自 https://blog.csdn.net/dkfajsldfsdfsd/article/details/81319735 ConfigMap.Secret.emptyDir.hostPath ...
- Kubernetes的故事之持久化存储(十)
一.Storage 1.1.Volume 官网网址:https://kubernetes.io/docs/concepts/storage/volumes/ 通过官网说明大致总结下就是这个volume ...
随机推荐
- Windows SDK DDK WDK (Windows Driver Kit) 区别
首先,先从基础的东西说起,开发WINDOWS下的驱动程序,需要一个专门的开发包,如:开发JAVA程序,我们可能需要一个JDK,开发WINDOWS应用程序,我们需要WINDOWS的SDK,现在开发WIN ...
- wampserver2.2e-php5.3.13 版本 增加 php7 支持
公司需要升级PHP版本至PHP7,对于用惯了wamp的来说,添加一下PHP扩展应该是很容易的,看我以前的文章(WampServer自己DIY添加apache.php.mysql版本). 不过再配置的当 ...
- linux telnet检测与某个端口是否开通
转自:http://blog.51cto.com/meiling/1982402 一:telnet此法常被用来检测是个远端端口是否通畅. 测试域名: # telnet baidu.com 80 Try ...
- php四个常用类封装
这4个类分别是Mysql类. 分页类.缩略图类.上传类. Mysql类 <?php /** * Mysql类 */ class Mysql{ private static $link = nul ...
- 进程锁Lock
例1: 10个人去买票,先去查询余票,有票就去购买.代码如下: # ticket.py {"ticket": 1} # 只有一张票 import json import time ...
- mybatis13--2级缓存
验证内置的2级缓存 Ehcache缓存的配置 01.引入需要的ehcache 和mybatis-ehcache 两个jar包 02.在mapper文件中增加 <cache type=" ...
- eclipse解决js提示
自学js,发现eclipse中不管js文件.html文件.jsp文件没有都没js代码的提示,对于js代码也不报错,有时候就因为单词敲错却查了很久没查出来,很烦很难受. 在网上找了很多方法,都没有解决, ...
- sublime3 快速生成html头文件
通过安装emmt插件老师来实现该功能(https://github.com/sergeche/emmet-sublime#readme) 1. 下载好后解压到文件夹: 2. 打开TS3,点击perfe ...
- windows服务安装 System.IO.FileLoadException
报错如下: System.IO.FileLoadException: 未能加载文件或程序集“file:///D:\WindowsService\bin\Debug\WindowsService.exe ...
- swust oj 962
括号匹配问题 1000(ms) 65535(kb) 3045 / 13375 假设表达式中允许包含两种括号:圆括号和方括号.编写一个算法判断表达式中的括号是否正确配对. 输入 由括号构成的字符串,包含 ...