目录贴:Kubernetes学习系列

一、简介

  本文在“创建PV,创建PVC挂载PV,创建POD挂载PVC”这个环境的基础上,进行各种删除实验,并记录、分析各资源的状态。

二、实验脚本

  实验创建了一个PV、一个PVC挂载了PV、一个POD挂载PVC,并编写了两个简单的小脚本来快速创建和删除环境。对应的脚本如下所示:

  需要注意的是在创建PV时,PV并不会去检查你配置的server是否真的存在;也不会检查server上是否有一个可用的NFS服务;当然更不会检查你设置的storage大小是否真有那么大。个人感觉PV的设置只是一个声明,系统并不会对此做任何检查。PVC的挂载也只是根据配额的大小和访问模式,过滤一下PV,并以最小的代价支持。

  1. [root@k8s-master pv]# cat nfs-pv.yaml
  2. apiVersion: v1
  3. kind: PersistentVolume
  4. metadata:
  5. name: pv0001
  6. spec:
  7. capacity:
  8. storage: 5Gi
  9. accessModes:
  10. - ReadWriteMany
  11. persistentVolumeReclaimPolicy: Recycle
  12. nfs:
  13. path: "/data/disk1"
  14. server: 192.168.20.47
  15. readOnly: false
  16. [root@k8s-master pv]# cat pvc.yaml
  17. apiVersion: v1
  18. kind: PersistentVolumeClaim
  19. metadata:
  20. name: nfs-pvc
  21. spec:
  22. accessModes:
  23. - ReadWriteMany
  24. resources:
  25. requests:
  26. storage: 1Gi
  27. [root@k8s-master pv]# cat test-pvc-pod.yaml
  28. apiVersion: v1
  29. kind: Pod
  30. metadata:
  31. name: test-nfs-pvc
  32. labels:
  33. name: test-nfs-pvc
  34. spec:
  35. containers:
  36. - name: test-nfs-pvc
  37. image: registry:/back_demon:1.0
  38. ports:
  39. - name: backdemon
  40. containerPort:
  41. command:
  42. - /run.sh
  43. volumeMounts:
  44. - name: nfs-vol
  45. mountPath: /home/laizy/test/nfs-pvc
  46. volumes:
  47. - name: nfs-vol
  48. persistentVolumeClaim:
  49. claimName: nfs-pvc
  50. [root@k8s-master pv]# cat start.sh
  51. #!/bin/bash
  52. kubectl create -f nfs-pv.yaml
  53. kubectl create -f pvc.yaml
  54. kubectl create -f test-pvc-pod.yaml
  55. [root@k8s-master pv]# cat remove.sh
  56. #!/bin/bash
  57. kubectl delete pod test-nfs-pvc
  58. kubectl delete persistentvolumeclaim nfs-pvc
  59. kubectl delete persistentvolume pv0001
  60. [root@k8s-master pv]#

三、删除PV实验

  创建PV,创建PVC挂载PV,创建POD挂载PVC。在删除PV后,PVC状态从Bound变为Lost,Pod中的Volume仍然能用,数据也没有被删除。

  1. [root@k8s-master pv]# ./start.sh
  2. persistentvolume "pv0001" created
  3. persistentvolumeclaim "nfs-pvc" created
  4. pod "test-nfs-pvc" created
  5. [root@k8s-master pv]# kubectl get persistentvolume
  6. NAME CAPACITY ACCESSMODES RECLAIMPOLICY STATUS CLAIM REASON AGE
  7. pv0001 5Gi RWX Recycle Bound default/nfs-pvc 15s
  8. [root@k8s-master pv]# kubectl get persistentvolumeclaim
  9. NAME STATUS VOLUME CAPACITY ACCESSMODES AGE
  10. nfs-pvc Bound pv0001 5Gi RWX 18s
  11. [root@k8s-master pv]# kubectl get pod test-nfs-pvc
  12. NAME READY STATUS RESTARTS AGE
  13. test-nfs-pvc / Running 39s
  14. [root@k8s-master pv]# kubectl delete persistentvolume pv0001
  15. persistentvolume "pv0001" deleted
  16. [root@k8s-master pv]# kubectl get persistentvolume
  17. No resources found.
  18. [root@k8s-master pv]# kubectl get persistentvolumeclaim
  19. NAME STATUS VOLUME CAPACITY ACCESSMODES AGE
  20. nfs-pvc Lost pv0001 1m
  21. [root@k8s-master pv]# kubectl get pod test-nfs-pvc
  22. NAME READY STATUS RESTARTS AGE
  23. test-nfs-pvc / Running 1m
  24. [root@k8s-master pv]# kubectl exec -ti test-nfs-pvc /bin/bash
  25. [root@test-nfs-pvc /]# cd /home/laizy/test/nfs-pvc/
  26. [root@test-nfs-pvc nfs-pvc]# ls
  27. .out
  28. [root@test-nfs-pvc nfs-pvc]# exit
  29. exit
  30. [root@k8s-master pv]#

四、删除PVC实验

4.1清空Pod设置

  设置PV时,如果设置了回收策略是“回收”的时候,在删除PVC时,系统(Controller-Manager)会启动一个recycler的Pod,用于清理数据卷中的内容。每种数据卷的回收Pod是不同的,都有自己特定的逻辑。本文以NFS为例,给出具体配置及Pod描述如下:

  1. [root@k8s-master ~]# cat /etc/kubernetes/controller-manager #配置完成后请重启controller-manager
  2. ###
  3. # The following values are used to configure the kubernetes controller-manager
  4.  
  5. # defaults from config and apiserver should be adequate
  6.  
  7. # Add your own!
  8. KUBE_CONTROLLER_MANAGER_ARGS="--pv-recycler-pod-template-filepath-nfs=/etc/kubernetes/recycler.yaml"
  9. [root@k8s-master ~]# cat /etc/kubernetes/recycler.yaml
  10. apiVersion: v1
  11. kind: Pod
  12. metadata:
  13. name: pv-recycler-
  14. namespace: default
  15. spec:
  16. restartPolicy: Never
  17. volumes:
  18. - name: vol
  19. hostPath:
  20. path: /any/path/it/will/be/replaced
  21. containers:
  22. - name: pv-recycler
  23. image: "docker.io/busybox"
  24. imagePullPolicy: IfNotPresent
  25. command: ["/bin/sh", "-c", "test -e /scrub && rm -rf /scrub/..?* /scrub/.[!.]* /scrub/* && test -z \"$(ls -A /scrub)\" || exit 1"]
  26. volumeMounts:
  27. - name: vol
  28. mountPath: /scrub
  29. [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中的数据被删除了。

  1. [root@k8s-master pv]# ./start.sh
  2. persistentvolume "pv0001" created
  3. persistentvolumeclaim "nfs-pvc" created
  4. pod "test-nfs-pvc" created
  5. [root@k8s-master pv]# kubectl get persistentvolume
  6. NAME CAPACITY ACCESSMODES RECLAIMPOLICY STATUS CLAIM REASON AGE
  7. pv0001 5Gi RWX Recycle Bound default/nfs-pvc 11s
  8. [root@k8s-master pv]# kubectl get persistentvolumeclaim
  9. NAME STATUS VOLUME CAPACITY ACCESSMODES AGE
  10. nfs-pvc Bound pv0001 5Gi RWX 14s
  11. [root@k8s-master pv]# kubectl get pod
  12. NAME READY STATUS RESTARTS AGE
  13. test-nfs-pvc / Running 19s
  14. [root@k8s-master pv]# kubectl exec -ti test-nfs-pvc /bin/bash
  15. [root@test-nfs-pvc /]# touch /home/laizy/test/nfs-pvc/.out
  16. [root@test-nfs-pvc /]# cd /home/laizy/test/nfs-pvc/
  17. [root@test-nfs-pvc nfs-pvc]# ls
  18. .out
  19. [root@test-nfs-pvc nfs-pvc]# exit
  20. exit
  21. [root@k8s-master pv]# kubectl delete persistentvolumeclaim nfs-pvc
  22. persistentvolumeclaim "nfs-pvc" deleted
  23. [root@k8s-master pv]# kubectl get pod
  24. NAME READY STATUS RESTARTS AGE
  25. recycler-for-pv0001 / ContainerCreating 1s
  26. test-nfs-pvc / Running 1m
  27. [root@k8s-master pv]# kubectl get persistentvolume
  28. NAME CAPACITY ACCESSMODES RECLAIMPOLICY STATUS CLAIM REASON AGE
  29. pv0001 5Gi RWX Recycle Available 1m
  30. [root@k8s-master pv]# kubectl get persistentvolumeclaim
  31. No resources found.
  32. [root@k8s-master pv]# kubectl get pod test-nfs-pvc
  33. NAME READY STATUS RESTARTS AGE
  34. test-nfs-pvc / Running 2m
  35. [root@k8s-master pv]# kubectl exec -ti test-nfs-pvc /bin/bash
  36. [root@test-nfs-pvc /]# ls /home/laizy/test/nfs-pvc/
  37. [root@test-nfs-pvc /]

五、删除Pod实验

  创建PV,创建PVC挂载PV,创建POD挂载PVC。删除Pod后,PV、PVC状态没变,Pod中的Volume对应的NFS数据没有被删除。

  1. [root@k8s-master pv]# ./start.sh
  2. persistentvolume "pv0001" created
  3. persistentvolumeclaim "nfs-pvc" created
  4. pod "test-nfs-pvc" created
  5. [root@k8s-master pv]# kubectl get persistentvolume
  6. NAME CAPACITY ACCESSMODES RECLAIMPOLICY STATUS CLAIM REASON AGE
  7. pv0001 5Gi RWX Recycle Bound default/nfs-pvc 11s
  8. [root@k8s-master pv]# kubectl get persistentvolumeclaim
  9. NAME STATUS VOLUME CAPACITY ACCESSMODES AGE
  10. nfs-pvc Bound pv0001 5Gi RWX 27s
  11. [root@k8s-master pv]# kubectl get pod
  12. NAME READY STATUS RESTARTS AGE
  13. test-nfs-pvc / Running 36s
  14. [root@k8s-master pv]# kubectl exec -ti test-nfs-pvc /bin/bash
  15. [root@test-nfs-pvc /]# cat /home/laizy/test/nfs-pvc/.out
  16.  
  17. [root@test-nfs-pvc /]# exit
  18. exit
  19. [root@k8s-master pv]# kubectl delete pod test-nfs-pvc
  20. pod "test-nfs-pvc" deleted
  21. [root@k8s-master pv]# kubectl get persistentvolume
  22. NAME CAPACITY ACCESSMODES RECLAIMPOLICY STATUS CLAIM REASON AGE
  23. pv0001 5Gi RWX Recycle Bound default/nfs-pvc 8m
  24. [root@k8s-master pv]# kubectl get persistentvolumeclaim
  25. NAME STATUS VOLUME CAPACITY ACCESSMODES AGE
  26. nfs-pvc Bound pv0001 5Gi RWX 8m
  27. [root@k8s-master pv]# ssh 192.168.20.47 #登录到远程NFS服务器
  28. root@192.168.20.47's password:
  29. Last failed login: Mon Mar :: CST from : on :
  30. There was failed login attempt since the last successful login.
  31. Last login: Mon Mar ::
  32. [root@localhost ~]# cd /data/disk1/.out

Kubernetes持久化存储2——探究实验的更多相关文章

  1. Kubernetes 持久化存储是个难题,解决方案有哪些?\n

    像Kubernetes 这样的容器编排工具正在彻底改变应用程序的开发和部署方式.随着微服务架构的兴起,以及基础架构与应用程序逻辑从开发人员的角度解耦,开发人员越来越关注构建软件和交付价值. Kuber ...

  2. Kubernetes持久化存储1——示例

    目录贴:Kubernetes学习系列 一.简介 存储管理与计算管理是两个不同的问题.Persistent Volume子系统,对存储的供应和使用做了抽象,以API形式提供给管理员和用户使用.要完成这一 ...

  3. Kubernetes 学习(十)Kubernetes 容器持久化存储

    0. 前言 最近在学习张磊老师的 深入剖析Kubernetes 系列课程,最近学到了 Kubernetes 容器持久化存储部分 现对这一部分的相关学习和体会做一下整理,内容参考 深入剖析Kuberne ...

  4. kubernetes学习 做持久化存储

    本节演示如何为 MySQL 数据库提供持久化存储,步骤: 1.创建 PV 和 PVC 2.部署 MySQL 3.向 MySQL 添加数据 4.模拟节点宕机故障,Kubernetes 将 MySQL 自 ...

  5. 使用Ceph集群作为Kubernetes的动态分配持久化存储(转)

    使用Docker快速部署Ceph集群 , 然后使用这个Ceph集群作为Kubernetes的动态分配持久化存储. Kubernetes集群要使用Ceph集群需要在每个Kubernetes节点上安装ce ...

  6. Kubernetes 系列(六):持久化存储 PV与PVC

    在使用容器之后,我们需要考虑的另外一个问题就是持久化存储,怎么保证容器内的数据存储到我们的服务器硬盘上.这样容器在重建后,依然可以使用之前的数据.但是显然存储资源和 CPU 资源以及内存资源有很大不同 ...

  7. Kubernetes 使用 ceph-csi 消费 RBD 作为持久化存储

    原文链接:https://fuckcloudnative.io/posts/kubernetes-storage-using-ceph-rbd/ 本文详细介绍了如何在 Kubernetes 集群中部署 ...

  8. Kubernetes之持久化存储

    转载自 https://blog.csdn.net/dkfajsldfsdfsd/article/details/81319735 ConfigMap.Secret.emptyDir.hostPath ...

  9. Kubernetes的故事之持久化存储(十)

    一.Storage 1.1.Volume 官网网址:https://kubernetes.io/docs/concepts/storage/volumes/ 通过官网说明大致总结下就是这个volume ...

随机推荐

  1. java应用监控工具

    http://hao.jobbole.com/category/java/java-monitoring/

  2. 删除JS 对象属性(元素)

    var a={"id":1,"name":"danlis"}; //添加属性 a.age=18; console.log(a); //结果: ...

  3. 关于SpringBoot 2.0,Pageable 无法注入,提示缺少默认构造方法的解决办法

    在SpringBoot 2.0 以前,我们会配置以下类 * @date 2018/06/03 */ @Configuration public class WebMvcConfig extends W ...

  4. Python yield 函数功能

    python中有一个非常有用的语法叫做生成器,所利用到的关键字就是yield.有效利用生成器这个工具可以有效地节约系统资源,避免不必要的内存占用. 一段代码 def test_dict_sort(): ...

  5. 11.8Django中的组件content_type

    2018-11-8 18:59:11 在Django中已经有一个contenttype这个组件,并且在python manage.py makemigrations 和migrate的时候,一起在数据 ...

  6. 4 html文件引用问题

    通常在写html文件的时候会遇到需要引入样式文件,或者图片等问题,对于有一定开发经验的人来说,这些都不是问题,做为初学者,还是有必要理解html文件引用的“思路”的 当html文件和要引用的文件在同一 ...

  7. js中级小知识4

    1.针对表单 form   input     select      textarea type="radio/checkbox/passdord/button/submit/reset/ ...

  8. 实际体验Span<T> 的惊人表现

    前言 最近做了一个过滤代码块功能的接口.就是获取一些博客文章做文本处理,然后这些博客文章的代码块太多了,很多重复的代码关键词如果被拿过来处理,那么会对文本的特征表示已经特征选择会有很大的影响.所以需要 ...

  9. Gym 101981J - Prime Game - [数学题][线性筛+分解质因数][2018-2019 ACM-ICPC Asia Nanjing Regional Contest Problem J]

    题目链接:http://codeforces.com/gym/101981/attachments 题意: 令 $mul(l,r) = \prod_{i=l}^{r}a_i$,且 $fac(l,r)$ ...

  10. sql 查分数段人数

    select count(case 分数字段 when 100 then 1 end) as [满分],count(case when 分数字段 between 90 and 99 then 1 en ...