一。背景
存储资源在所有计算资源中扮演着十分重要的角色,大部分业务场景下都有可能使用到各类存储资源。在Kubernetes中,系统通过体积对集群中的容器动态或静态提供存储资源。通常情况下,我们可以认为容器或者Pod的生命周期时短暂的,当容器被销毁时,容器内部的数据也同时被清除。为了持久化保存容器的数据,Kubernetes引入了体积,类似于码头工人的体积(码头工人也有一个量的概念,虽然它有点宽松的和更少的管理。在码头工人,一个体积只是一个目录> apiVersion: v1 :豆荚 元数据: 名称:gysl 规范: 容器: ——图片:busybox 名称:gysl-01 volumeMounts: - mountPath:/gysl-01 名称:gysl-volume 参数: ——/bin/sh - - - - - - - c ——回声”这是一个测试文件。“在20000/gysl-01/test.gysl;睡眠 ——图片:busybox 名称:gysl-02 volumeMounts: - mountPath:/gysl-02 名称:gysl-volume 参数: ——/bin/sh - - - - - - - c 20000年——猫/gysl-02/test.gysl;睡眠 卷: ——名称:gysl-volume emptyDir:{} 代码>
创建Pod gysl,并查看相关信息:
<代码类=" language-bash "> [root@k8s-m k8s-volumes] # - f emptyDir.yaml kubectl适用 豆荚/gysl创建 [root@k8s-m k8s-volumes] # kubectl吊舱 重启名字就绪状态的年龄 gysl 2/2 0 10 m [root@k8s-m k8s-volumes] # kubectl日志gysl gysl-02 这是一个测试文件。代码>
该例中,我们创建了一个名为gysl的豆荚,这个豆荚里面包含gysl-01和gysl-02两个容器,这两个容器同时挂载了名为gysl-volume的emptyDir, gysl-01的挂载点为/gysl-01 gysl-02的挂载点为gysl-02,容器gysl-01创建了一个测试。gysl的文件,内容为:“这是一个测试文件。”在容器gysl-02中,成功显示了gysl-01创建的文件的内容。
2.2 hostPath
<强> hostPath: 强> hostPath的主要作用是将主机的文件或目录挂载给Pod的容器使用,使得容器能以较为良好的性能来存储数据。接下来我们以Pod gysl-hostpath为例来理解一下hostPath的相关概念,YAML文件如下:
<代码类=" language-yaml "> apiVersion: v1 :豆荚 元数据: 名称:gysl-hostpath 规范: nodeSelector: 角色:测试 容器: ——图片:ubuntu: 18.04 名称:gysl-hostpath-container volumeMounts: - mountPath:/etc/gysl-test-01 名称:gysl-02 - mountPath:/etc/gysl-test-02 名称:gysl-01 - mountPath:/gysl-test-dir 名称:gysl-dir 参数: ——/bin/bash - - - - - - - c ——猫/etc/gysl-test-01/etc/gysl-test-02; ls - l/gysl-test-dir; 3600年睡眠 卷: - hostPath: 路径:/root/gysl-01 名称:gysl-01 - hostPath: 路径:/root/gysl-02 名称:gysl-02 - hostPath: 路径:/root/gysl-dir 名称:gysl-dir 代码>
在节点k8s-n1的/根目录下创建如下文件和目录:
<代码类=" language-bash "> root@k8s-n1 ~ #噢 总用量8 -rw-r - r - 1根16根11月21日20:31 gysl-01 -rw-r - r - 1根16根11月21日20:31 gysl-02 drwxr-xr-x 2根51根11月21日32 gysl-dir 代码>
两个文件的内容如下:
<代码类=" language-bash "> root@k8s-n1 ~ #猫gysl-01 这是gysl-01 #猫gysl-02 root@k8s-n1 ~ 这是gysl-02 代码>
目录gysl-dir的内容如下:
<代码类=" language-bash "> root@k8s-n1 ~ #会gysl-dir/总用量12 -rw-r - r - 1根16根11月21日32 gysl-01 -rw-r - r - 1根16根11月21日32 gysl-02 -rw-r - r - 1根16根11月21日32 gysl-03 代码>
给节点k8s-n1指定一个标签,申请该吊舱:
<代码类=" language-bash "> [root@k8s-m k8s-Volumes] # kubectl标签节点k8s-n1角色=测试 节点/k8s-n1标记 [root@k8s-m k8s-Volumes] # - f hostPath.yaml kubectl适用 豆荚/gysl-hostpath创建 [root@k8s-m k8s-Volumes] # kubectl pod - o宽 姓名就绪状态重启年龄IP节点指定节点 gysl-hostpath 1/1运行0 17 s 10.244.1.177 k8s-n1 & lt; none> [root@k8s-m k8s-Volumes] # gysl-hostpath kubectl日志 这是gysl-02 这是gysl-01 共12个 -rw-r - r - 1根根16 11月21日12:32 gysl-01 -rw-r - r - 1根根16 11月21日12:32 gysl-02 -rw-r - r - 1根根16 11月21日12:32 gysl-03 代码>
这个例子中,我把名为gysl-02的hostPath文件挂载到了容器的文件/etc/gysl-test-01上,把名为gysl-01的hostPath文件挂载到了容器的文件/etc/gysl-test-02上,把名为gysl-dir的hostPath目录挂载到了/gysl-test-dir下。通过日志命令,我们不难发现,目标已经达成。