目录贴: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: Recyclenfs: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-pvclabels:name: test-nfs-pvc
spec:containers:- name: test-nfs-pvcimage: registry:5000/back_demon:1.0  ports:- name: backdemoncontainerPort: 80command:- /run.shvolumeMounts:- name: nfs-vol mountPath: /home/laizy/test/nfs-pvc volumes:- name: nfs-volpersistentVolumeClaim: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   1/1       Running    0          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     0                        1m
[root@k8s-master pv]# kubectl get pod test-nfs-pvc
NAME           READY     STATUS    RESTARTS   AGE
test-nfs-pvc   1/1       Running   0          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
2.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: Nevervolumes:- name: volhostPath:path: /any/path/it/will/be/replacedcontainers:- name: pv-recyclerimage: "docker.io/busybox"imagePullPolicy: IfNotPresentcommand: ["/bin/sh", "-c", "test -e /scrub && rm -rf /scrub/..?* /scrub/.[!.]* /scrub/*  && test -z \"$(ls -A /scrub)\" || exit 1"]volumeMounts:- name: volmountPath: /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      1/1       Running   0          19s
[root@k8s-master pv]# kubectl exec -ti test-nfs-pvc /bin/bash
[root@test-nfs-pvc /]# touch /home/laizy/test/nfs-pvc/1.out
[root@test-nfs-pvc /]# cd /home/laizy/test/nfs-pvc/
[root@test-nfs-pvc nfs-pvc]# ls
1.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       0/1       ContainerCreating    0          1s
test-nfs-pvc             1/1       Running             0          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   1/1       Running   0          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     1/1       Running   0          36s
[root@k8s-master pv]# kubectl exec -ti test-nfs-pvc /bin/bash
[root@test-nfs-pvc /]# cat /home/laizy/test/nfs-pvc/1.out
123456
[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 27 14:37:19 CST 2017 from :0 on :0
There was 1 failed login attempt since the last successful login.
Last login: Mon Mar 20 10:49:18 2017
[root@localhost ~]# cd /data/disk1/1.out
123456

转载于:https://www.cnblogs.com/zhenyuyaodidiao/p/6632600.html

Kubernetes持久化存储2——探究实验相关推荐

  1. Kubernetes持久化存储Cephfs

    女主宣言 上一篇 kubernetes持久化存储Ceph RBD 介绍了Ceph RBD在kubernetes中的使用,本篇将会介绍Cephfs在kubernetes中的使用.本文最先发布于 opsd ...

  2. 干货 | 如何评估Kubernetes持久化存储方案

    在2018年的Garnter技术成熟度曲线中,容器存储出现在了技术触发期,已经开始进入大众的视野.我相信,在未来的两年内,容器存储会随着Kubernetes的进一步成熟和商业化,其地位会越来越重要.如 ...

  3. 如何评估Kubernetes持久化存储方案

    在2018年的Garnter技术成熟度曲线中,容器存储出现在了技术触发期,已经开始进入大众的视野.我相信,在未来的两年内,容器存储会随着Kubernetes的进一步成熟和商业化,其地位会越来越重要.如 ...

  4. 14、Kubernetes持久化存储

    文章目录 前言 步骤 持久化服务器上操作 设置挂载路径 Node节点上操作 PV和PVC 实现流程 举例 前言 之前我们有提到数据卷:emptydir ,是本地存储,pod重启,数据就不存在了,需要对 ...

  5. Kubernetes持久化存储PV、PVC和StorageClass介绍

    PV和PVC Kubernetes Volume提供了非常好的数据持久化方案,不过对于大型Kubernetes集群来说管理上还有不方便之处.Volume方案需要创建Pod或者Deployment的管理 ...

  6. Kubernetes 持久化存储 Cephfs

    熟悉kubernetes volume的同学应该了解,kubernetes 对volume的提供支持"静态PV"和"动态PV"两种方式. 静态PV:集群管理员创 ...

  7. K8s 或 K3s 集群中持久化存储方案选型

    存储架构 1 三个概念: pv , pvc ,storageclass pv - 持久化卷, 支持本地存储和网络存储, 例如hostpath,ceph rbd, nfs等,只支持两个属性, capac ...

  8. 四大开源分布式存储_Kubernetes持久化存储方案测试

    在2018年的Garnter技术成熟度曲线中,容器存储出现在了技术触发期,已经开始进入大众的视野.我相信,在未来的两年内,容器存储会随着Kubernetes的进一步成熟和商业化,其地位会越来越重要.如 ...

  9. 使用Ceph集群作为Kubernetes的动态分配持久化存储

    2019独角兽企业重金招聘Python工程师标准>>> 使用Docker快速部署Ceph集群 , 然后使用这个Ceph集群作为Kubernetes的动态分配持久化存储. Kubern ...

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

    本文详细介绍了如何在 Kubernetes 集群中部署 ceph-csi(v3.1.0),并使用 RBD 作为持久化存储. 需要的环境参考下图: 本文使用的环境版本信息: Kubernetes 版本: ...

最新文章

  1. MySQL 中的反斜杠 \\,真是太坑了!!
  2. 全球及中国固态锂电池行业需求量预测及投资规模战略报告2021-2027年
  3. python维度扩展_在TensorFlow中实现矩阵维度扩展
  4. hibernate中antlr对于hql与sql的转换源码的一些细节
  5. Android多媒体开发(3)————使用Android NKD编译havlenapetr-FFMpeg-7c27aa2
  6. 从EXCEL导入CAD后如何设置表格文字大小?
  7. Docker Swarm集群实践——部署篇
  8. C#汉字转拼音_Microsoft.PinYinConverter汉字转拼音
  9. pycharm ssh interpreter 搭建
  10. 概率笔记2——古典概型
  11. 04 ElasticSearch分词及高阶搜索
  12. 嘉和生物药业(开曼)控股有限公司于香港联交所主板成功上市
  13. zabbix邮箱告警
  14. 微博粉丝精灵_王晓晨微博粉丝破千万 走心独白致谢陪伴
  15. 网易邮箱账号OAuth2.0认证文档
  16. Ask HTG:格式化“隐形”硬盘,更改Android中的默认应用以及如何使用新的Kindle Fire...
  17. 最小堆(MinHeap)
  18. 首次!我国以计算机系为第一完成单位的论文登上《自然》
  19. 信息论中的信息量为什么表示成对数
  20. C语言和Java哪个难学?

热门文章

  1. 哈希(不可逆)加密通用类库函数
  2. Sampling-Argmax:用重参数技巧优化Soft-Argmax
  3. 【论文分享】ACL 2020 社交网络谣言判别中可解释性相关研究
  4. Multi-task Learning and Beyond: 过去,现在与未来
  5. 分享整理的 Python 学习路线图,(附工具+视频+书籍+面试)
  6. poj3268(Silver Cow Party)最短路
  7. 金融评分卡项目—9.违约预测模型的后续工作
  8. 深度学习2.0-3.tensorflow的基础操作之索引与切片
  9. 机器学习基础算法13-回归实例-时间序列分析ARIMA
  10. 图论算法——Prim算法和Kruskal算法