k8s学习(三)

基于《Kubernetes in Action》

源码仓库


Volume

pod的一部分,和pod共享相同的生命周期。即在pod启动的时候创建卷,并在删除pod的时候销毁卷。用于pod内共享数据(hostPath除外

1

可用的volume类型:

  • emptyDir : 存储临时数据的简单空目录

  • hostPath : 将目录从工作节点的文件系统挂载到pod中

  • gitRepo : 检出Git仓库的内容来初始化

  • nfs : 挂载到pod中的NFS共享卷

  • configMap, secret等其它类型

  1. emptyDir:

    创建包含共用卷的pod,eg:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26

    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: {}
    #medium: Memory 文件存储在内存中,一般在实际磁盘上创建

  2. gitRepo:

    不过是一个emptyDir然后填充了指定Git仓库的内容。而且它不会随着git仓库的更新而更新,只有当之间被rc托管后删除,再创建一个新的pod,此时初始化的就是最新的git仓库的内容。

    如图:

    2

  1. hostPath:

    用于读取节点的文件或以此来使用节点文件系统来访问节点设备。是持久性存储,但一般只用于访问而不是存储。

持久化存储:

需要pod中的应用程序将数据保存到硬盘上,且调度到另一节点也具有相同的数据。

  • 持久卷(PV) : 管理员设置底层存储,通过k8s API服务器创建持久卷并注册

  • 持久卷声明(PVC) : 集群用户需要在其pod中使用持久卷需要先创建持久卷声明清单,指定所需的最低容量要求访问模式,然后提交给API服务器。API服务器找到可匹配的持久卷后将其绑定到用户的持久卷声明,最后用户创建一个pod并通过卷配置来引用其声明。

如图:

3