应用场景
pod 中的容器的数据随着pod 的重启,删除就会消失,有的应用场景需要持久化数据,这时就需要卷挂载。
Tips:
volumes 是 pod 的一个组成部分, 因此像容器一样在 pod 的规范中就定义了。 它们不是独立的 Kubernetes 资源对象, 也不能单独创建或删除。 pod 中的所有容器都可以使用卷, 但必须先将它挂载在每个需要访问它的容器中。 在每个容器中, 都可以在其文件系统的任意位置挂载卷。
常见的类型
empty 一 用于存储临时数据的简单空目录。
hostPath — 用于将目录从工作节点的文件系统挂载到pod中
gitRepo 一 通过检出Git仓库的内容来初始化的卷。
nfs — 挂载到pod中的NFS共享卷。
configMap secret downwardAPI 一 用于将 Kubemetes 部分资源和集群信息公开给 pod 的特殊类型的卷
配置操作
empty 配置
emptyDir类型的Volume在Pod分配到Node上时被创建,Kubernetes会在Node上自动分配一个目录,因此无需指定宿主机Node上对应的目录文件。 这个目录的初始内容为空,当Pod从Node上移除时,emptyDir中的数据会被永久删除。emptyDir Volume主要用于某些应用程序无需永久保存的临时目录,多个容器的共享目录等。
在Pod中的定义
apiVersion: vl kind: Pod metadata: name: fortune spec: containers: - image: luksa/fortune #第一个容器名为 html-asdf name: html-asdf volumeMounts: - name: html #容器挂载的本地卷为 html mountPath: /var/htdocs #挂载到容器的此目录 - image: nginx:alpine name: web-server #第二个容器称为 web-server volumeMounts : - name: html #容器挂载的本地卷为 html mountPath: /usr/share/nginx/html #设为只读 readOnly: true ports: - containerPort: 80 protocol: TCP volumes - name: html #命名为html emptyDir: {} #卷的类型为emptyDir
指定用于 EMPTYDIR 的介质
作为卷来使用的 emptyDir ,是在承载 pod 工作节点的实际磁盘上创建的,此其性能取决于节点的磁盘类型。 但我们可以通知 Kubemete tmfs 文件系统存在内存而非硬盘创建 emptyDir 。因 此,将emptyDir medium 设置为
Memory
volumes: - name: html emptyDir medium: Memory
使用 Git 仓库作为存储卷
gitRepo 卷基本上也是 emptyDir 卷,它通过克隆 Git 仓库并在 pod启动时(但在创建容器之前 检出特定版本来填充数据)。gitRepo 容器就像 emptyDir 卷一样, 基本上是一个专用目录, 专门用于包含卷的容器并单独使用。
当 pod 被删除时, 卷及其内容被删除。 然而, 其他类型的卷并不创建新目录, 而是将现有的外部目录挂载到 pod 的容器文件系统中。 该卷的内容可以保存多个 pod 实例化
Notice:
在创 gitRepo 卷后,它并不能和对应 repo 保持同步,当向Git 仓库推送新增的提交时,卷中的文件将不会被更新。然而,如果所用 pod 是由 ReplicationController 管理的,删除这个 pod 将触发新建一个新的 pod ,而这个新 pod的卷中将包含最新的提交
apiVersion: vl kind: Pod metadata: name: gitrepo-vol-pod spec: containers: - image: nginx:alpine name: web-server volumeMounts : - name : html mountPath: /usr/share/nginx/html readOnly: true ports: - containerPort: 80 protocol: TCP volumes: - name: html #容器挂载的本地卷为 html gitRepo: repository: https://github.com/kzf/asdf-website-example.git revision: master directory: .
Tips:
为了实现pod gitrepo 目录与git 仓库实时同步可以通过 sidecar 容器