Volumes:给containers挂载磁盘
创建多容器pod
本章开始yaml文件会慢慢变大,大家可以慢一些做,多理解其中含义。
我们看一个提供fortune服务(财富格言集锦,每次访问都给你一碗不同的鸡汤)的pod
# cat fortune-pod.yaml
apiVersion: v1
kind: Pod
metadata:
name: fortune
spec:
containers:
- image: luksa/fortune
name: html-generator
volumeMounts: #磁盘描述
- name: html
mountPath: /var/htdocs #将html磁盘mount到此
- image: nginx:alpine
name: web-server
volumeMounts: #磁盘描述
- name: html
mountPath: /usr/share/nginx/html #将html加载
readOnly: true
ports:
- containerPort: 80
protocol: TCP
volumes: #磁盘的申请或是定义
- name: html
emptyDir: {} #一个最简单的空磁盘创建一个可在容器中共享磁盘存储的卷
有非常多的磁盘种类,如:
emptyDir 临时数据空目录
hostPath 节点磁盘上的路径
persistentVolumeClaim 动态申请外部存储磁盘
... ...
emptyDir磁盘
将前面的yaml描述创建它并访问一下服务
体会一下他们之间的关联
hostPath
这个我们不自己创建演示了,看看kubernetes是怎么用的
可以看到有hostpath使用方式
好了,上面都是使用临时存储、节点存储,现在我们去做一些持久化的操作
使用持久化声明获取磁盘
其实还有将已有磁盘挂载到pod中,因为涉及的aws云商等的操作,略显复杂会失去重点,我们不在此练习了
例如我们为mongodb数据库申请一块盘,可以这样做
其中storageClassName是个很重要的概念,可以这样查看环境支持的类
提示我们磁盘等待消费者出现才能真正的创建和绑定,那我们挂载它到mongodb中,启动一个mongodb服务
然后查看pod/pvc/pv等资源情况

测试一下mongodb的服务吧
Cool!现在你成功的将PVC获取的磁盘PV挂载到了mongodb容器pod中
也可以不指定存储类,使用默认的(default),前提是环境已配置好
Well!到这里,你已经体验了如何为自己的pod申请磁盘了!东西越来越多了,后面的内容会越来越有趣!
思考题
请谈谈StorageClass与PVC机制的好处
最后更新于
这有帮助吗?