设为首页 收藏本站
查看: 963|回复: 0

[经验分享] Kubernetes持久化存储2

[复制链接]

尚未签到

发表于 2018-1-4 18:33:52 | 显示全部楼层 |阅读模式
一、简介
  本文在“创建PV,创建PVC挂载PV,创建POD挂载PVC”这个环境的基础上,进行各种删除实验,并记录、分析各资源的状态。

二、实验脚本
  实验创建了一个PV、一个PVC挂载了PV、一个POD挂载PVC,并编写了两个简单的小脚本来快速创建和删除环境。对应的脚本如下所示:
  需要注意的是在创建PV时,PV并不会去检查你配置的server是否真的存在;也不会检查server上是否有一个可用的NFS服务;当然更不会检查你设置的storage大小是否真有那么大。个人感觉PV的设置只是一个声明,系统并不会对此做任何检查。PVC的挂载也只是根据配额的大小和访问模式,过滤一下PV,并以最小的代价支持。
  

[iyunv@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  
[iyunv@k8s
-master pv]# cat pvc.yaml  
apiVersion: v1
  
kind: PersistentVolumeClaim
  
metadata:
  name: nfs
-pvc  
spec:
  accessModes:
- ReadWriteMany  resources:
  requests:
  storage: 1Gi
  
[iyunv@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:
5000/back_demon:1.0  ports:
- name: backdemon  containerPort:
80  command:
- /run.sh  volumeMounts:
- name: nfs-vol  mountPath:
/home/laizy/test/nfs-pvc  volumes:
- name: nfs-vol  persistentVolumeClaim:
  claimName: nfs
-pvc  
[iyunv@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  
[iyunv@k8s
-master pv]# cat remove.sh  
#
!/bin/bash  
kubectl delete pod test
-nfs-pvc  
kubectl delete persistentvolumeclaim nfs
-pvc  
kubectl delete persistentvolume pv0001
  
[iyunv@k8s
-master pv]#  


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

[iyunv@k8s-master pv]# ./start.sh  
persistentvolume
"pv0001" created  
persistentvolumeclaim
"nfs-pvc" created  
pod
"test-nfs-pvc" created  
[iyunv@k8s
-master pv]# kubectl get persistentvolume  
NAME   CAPACITY   ACCESSMODES   RECLAIMPOLICY STATUS   CLAIM        REASON    AGE
  
pv0001   5Gi        RWX           Recycle       Bound   default
/nfs-pvc            15s  
[iyunv@k8s
-master pv]# kubectl get persistentvolumeclaim  
NAME    STATUS    VOLUME   CAPACITY   ACCESSMODES   AGE
  
nfs
-pvc   Bound     pv0001    5Gi        RWX           18s  
[iyunv@k8s
-master pv]# kubectl get pod test-nfs-pvc  
NAME       READY     STATUS    RESTARTS   AGE
  
test
-nfs-pvc   1/1       Running    0          39s  
[iyunv@k8s
-master pv]# kubectl delete persistentvolume pv0001  
persistentvolume
"pv0001" deleted  
[iyunv@k8s
-master pv]# kubectl get persistentvolume  
No resources found.
  
[iyunv@k8s
-master pv]# kubectl get persistentvolumeclaim  
NAME    STATUS    VOLUME    CAPACITY   ACCESSMODES   AGE
  
nfs
-pvc    Lost      pv0001     0                        1m  
[iyunv@k8s
-master pv]# kubectl get pod test-nfs-pvc  
NAME           READY     STATUS    RESTARTS   AGE
  
test
-nfs-pvc   1/1       Running   0          1m  
[iyunv@k8s
-master pv]# kubectl exec -ti test-nfs-pvc /bin/bash  
[iyunv@test
-nfs-pvc /]# cd /home/laizy/test/nfs-pvc/  
[iyunv@test
-nfs-pvc nfs-pvc]# ls  
2.out
  
[iyunv@test-nfs-pvc nfs-pvc]# exit
  
exit
  
[iyunv@k8s-master pv]#
  


四、删除PVC实验

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

[iyunv@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"  
[iyunv@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  
[iyunv@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中的数据被删除了。
  

[iyunv@k8s-master pv]# ./start.sh  
persistentvolume
"pv0001" created  
persistentvolumeclaim
"nfs-pvc" created  
pod
"test-nfs-pvc" created  
[iyunv@k8s
-master pv]# kubectl get persistentvolume  
NAME      CAPACITY   ACCESSMODES   RECLAIMPOLICY   STATUS    CLAIM             REASON    AGE
  
pv0001    5Gi        RWX           Recycle         Bound     default
/nfs-pvc             11s  
[iyunv@k8s
-master pv]# kubectl get persistentvolumeclaim  
NAME      STATUS    VOLUME    CAPACITY   ACCESSMODES   AGE
  
nfs
-pvc   Bound     pv0001    5Gi        RWX           14s  
[iyunv@k8s
-master pv]# kubectl get pod  
NAME          READY     STATUS    RESTARTS   AGE
  
test
-nfs-pvc      1/1       Running   0          19s  
[iyunv@k8s
-master pv]# kubectl exec -ti test-nfs-pvc /bin/bash  
[iyunv@test
-nfs-pvc /]# touch /home/laizy/test/nfs-pvc/1.out  
[iyunv@test
-nfs-pvc /]# cd /home/laizy/test/nfs-pvc/  
[iyunv@test
-nfs-pvc nfs-pvc]# ls  
1.out
  
[iyunv@test-nfs-pvc nfs-pvc]# exit
  
exit
  
[iyunv@k8s-master pv]# kubectl delete persistentvolumeclaim nfs-pvc
  
persistentvolumeclaim "nfs-pvc" deleted
  
[iyunv@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
  
[iyunv@k8s-master pv]# kubectl get persistentvolume
  
NAME      CAPACITY   ACCESSMODES   RECLAIMPOLICY   STATUS      CLAIM     REASON    AGE
  
pv0001    5Gi        RWX           Recycle         Available                       1m
  
[iyunv@k8s-master pv]# kubectl get persistentvolumeclaim
  
No resources found.
  
[iyunv@k8s-master pv]# kubectl get pod test-nfs-pvc
  
NAME           READY     STATUS    RESTARTS   AGE
  
test-nfs-pvc   1/1       Running   0          2m
  
[iyunv@k8s-master pv]# kubectl exec -ti test-nfs-pvc /bin/bash
  
[iyunv@test-nfs-pvc /]# ls /home/laizy/test/nfs-pvc/
  
[iyunv@test-nfs-pvc /]
  


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

[iyunv@k8s-master pv]# ./start.sh  
persistentvolume
"pv0001" created  
persistentvolumeclaim
"nfs-pvc" created  
pod
"test-nfs-pvc" created  
[iyunv@k8s
-master pv]# kubectl get persistentvolume  
NAME  CAPACITY ACCESSMODES   RECLAIMPOLICY   STATUS    CLAIM   REASON    AGE
  
pv0001 5Gi      RWX           Recycle         Bound     default
/nfs-pvc       11s  
[iyunv@k8s
-master pv]# kubectl get persistentvolumeclaim  
NAME      STATUS    VOLUME    CAPACITY   ACCESSMODES   AGE
  
nfs
-pvc   Bound     pv0001    5Gi        RWX           27s  
[iyunv@k8s
-master pv]# kubectl get pod  
NAME         READY     STATUS    RESTARTS   AGE
  
test
-nfs-pvc     1/1       Running   0          36s  
[iyunv@k8s
-master pv]# kubectl exec -ti test-nfs-pvc /bin/bash  
[iyunv@test
-nfs-pvc /]# cat /home/laizy/test/nfs-pvc/1.out  

123456  
[iyunv@test
-nfs-pvc /]# exit  
exit
  
[iyunv@k8s
-master pv]# kubectl delete pod test-nfs-pvc  
pod
"test-nfs-pvc" deleted  
[iyunv@k8s
-master pv]# kubectl get persistentvolume  
NAME CAPACITY   ACCESSMODES   RECLAIMPOLICY   STATUS    CLAIM  REASON    AGE
  
pv0001    5Gi   RWX           Recycle         Bound     default
/nfs-pvc      8m  
[iyunv@k8s
-master pv]# kubectl get persistentvolumeclaim  
NAME      STATUS    VOLUME    CAPACITY   ACCESSMODES   AGE
  
nfs
-pvc     Bound     pv0001     5Gi        RWX           8m  
[iyunv@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
  
[iyunv@localhost ~]# cd /data/disk1/1.out
  
123456
  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-431615-1-1.html 上篇帖子: 使用kubeadm安装Kubernetes 下篇帖子: ovn-kubernetes执行流程概述
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表