kubernets之卷
阅读原文时间:2023年07月13日阅读:2

一 卷的由来以及种类和常用的卷的类型

  前面介绍了大部分都是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,每个节点都会存在一个