1. 介绍卷
每个新容器都是通过在构建镜像时加入的详细配置文件来启动的。 将此与pod 中容器重新启动的现象结合起来。
存储卷是 pod 的一个组成部分。这意味着在 pod 启动时创建卷, 并在删除 pod时销毁卷。 因此, 在容器重新启动期间, 卷的内容将保持不变, 在重新启动容器之后, 新容器可以识别前一个容器写入卷的所有文件。
另外,如果一个 pod 包含多个容器, 那这个卷可以同时被所有的容器使用。
1.1 卷类型
• emptyDir 用于存储临时数据的简单空目录。
• hostPath 用于将目录从工作节点的文件系统挂载到pod中。
• gitRepo 通过检出Git仓库的内容来初始化的卷。
• nfs 挂载到pod中的NFS共享卷。
2. 通过卷在容器之间共享数据
2.1 使用 emptyDir
关注它是如何用于在 pod 的多个容器之间共享数据的。卷从一个 目录开始,运行在 pod 内的应用程序可以写入它需要 的任何文件。pod 含两个容器和 个挂载在两个容器中的共用的卷,但在不同的路径上。
apiVersion: vl
kind: Pod
metadata:
name : fortune
spec:
containers:
-image: luksa/fortune
name: html generator
volumeMounts:
- name: html
mountPath: /var/htdocs 名为html的卷挂载在/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 叫html的emptyDir卷,挂载在上面的两个容器中
emptyDir: {
}
将端口从本地机器转发到 pod 来实现,计算机的 808 端口来访问服务
kubectl port-forward fortune 8080:80
volumes:
- name: html
emptyDir
medium: Memory # 存在内存上
2.2 使用 Git 仓库作为存储卷
gitRepo 卷基本上也是 emptyDir 卷,它通过克隆 Git 仓库并在 pod时(但在创建容器之前 检出特定版本来填充数据。
注意:
- 在创建gitRepo 卷后,它并不能和对应 repo 保持同步。 当向库推送新增 的提交时,文件将不会被更新。
- 然而,如果所用 pod 是由ReplicationController 管理的,删除这个 pod 将触发新建一个新的 pod ,而这个新 pod
的卷中将包含最新的提交。
apiVersion : vl
kind: Pod
metadata:
name: gi trepo-volume-pod
spec:
containers:
- image: nginx:alpine
name: web -server
volumeMounts