kubernets之卷
一 卷的由来以及种类和常用的卷的类型
前面介绍了大部分都是pod的管理以及在集群内部和集群外部如何访问pod,但是我们也了解到,pod是有生命周期的,当pod所在节点下线,或者等其他原因原因导致pod需要中止服务,此时
之前pod里面存储的数据也会随之而消失,所以这里就需要一个持久化存储手段,kubernets提供了一种持久化存储的方式称之为卷,并且根据可存储的内容分为很多种类
- emptyDir---用于存储临时数据的简单空目录
- hostPath---用于将目录从工作节点的文件系统挂载到pod中
- gitRepo---用于检出Git仓库的内容来初始化的卷
- nfs---挂载到pod中的NFS共享卷
- configMap,secret,downwardAPI---用于将集群部分资源和集群信息公开个给pod的特殊类型的卷
- (persistentVolumeClaim)pvc---一种使用预置或者动态配置的持久化存储类型(应用的较为多)
二 emptyDir的应用以及介绍
2.1 emptyDir最大的特点就是与之关联的pod可以写入任何形式的文件,并且它的生命周期和pod的生命周期保持一致,当pod消失之后该卷也会随之消失,而最大的作用其实是在pod的不同的
容器之间共享数据,可以将一个或若干个emptyDir挂载在一个pod的多个容器上,由于容器之间是相互隔离的,所以无法通信,但是通过这种挂载卷的形式就使得数据能够流通。
2.2 一个pod里面带有2个容器,并且通过挂载卷的方式使其相互通信的配置如下
apiVersion: v1 kind: Pod metadata: name: fortune spec: containers: - image: luksa/fortune name: html-generator volumeMounts: - name: html mountPath: /var/htdocs - image: nginx:alpine name: web-server volumeMounts: - name: html mountPath: /usr/share/nginx/html readOnly: true ports: - containerPort: 80 protocol: TCP volumes: - name: html emptyDir: {}
- 这个pod里面定义了2个容器,并且还挂载了一个名为html的空白卷
- 分别挂载在nginx容器和fortune容器的文件系统上面某个位置,如此就可以让本来互相隔离的容器通过这个来通信
2.3查看pod的状态
[root@node01 ~]# k get po NAME READY STATUS RESTARTS AGE fortune 2/2 Running 0 4h21m
[root@node01 ~]# curl http://127.1:8080 You are only young once, but you can stay immature indefinitely.
[root@node01 ~]# curl http://127.1:8080 The secret source of humor is not joy but sorrow; there is no humor in Heaven. -- Mark Twain
- 这2个容器的作用,第一个是每10秒产生一个html并存储在空白卷里面
- 第二个容器用来展示该空白卷里面的html文件
- 而结果也很好的展示了通过这个空白卷将这一个pod里面的容器相互通信
三 hostPath卷的介绍以及应用
3.1 首先了解一下,hospath区别于其他类型的卷的地方,顾名思义,hostpath的卷是依赖于node节点的,就是将pod的数据持久化存储在节点上面,这个是区别于emptyDir卷的存在
但是有一个缺点是,众所周知,pod是有生命周期的,一旦pod由于任何原因消失,kubernets就会重新调度到节点上,但是会随机的调度到集群的任一节点,所以当第一个pod消失之后,很有可能
会调度到其他节点上,所以这个类型的卷不适合存储应用级别的卷,而是适合存储由daemonSet创建的pod,因为DaemonSet的pod属于系统级别的pod,每个节点都会存在一个