Volumes:给containers挂载磁盘

创建多容器pod

我们看一个提供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磁盘

将前面的yaml描述创建它并访问一下服务

体会一下他们之间的关联

hostPath

这个我们不自己创建演示了,看看kubernetes是怎么用的

可以看到有hostpath使用方式

好了,上面都是使用临时存储、节点存储,现在我们去做一些持久化的操作

使用持久化声明获取磁盘

例如我们为mongodb数据库申请一块盘,可以这样做

其中storageClassName是个很重要的概念,可以这样查看环境支持的类

提示我们磁盘等待消费者出现才能真正的创建和绑定,那我们挂载它到mongodb中,启动一个mongodb服务

然后查看pod/pvc/pv等资源情况

测试一下mongodb的服务吧

Cool!现在你成功的将PVC获取的磁盘PV挂载到了mongodb容器pod中

如果不指明storageClass会使用kubernetes默认指定的磁盘,我们环境中是“disk“

也可以不指定存储类,使用默认的(default),前提是环境已配置好

Well!到这里,你已经体验了如何为自己的pod申请磁盘了!东西越来越多了,后面的内容会越来越有趣!

思考题

  • 请谈谈StorageClass与PVC机制的好处

最后更新于

这有帮助吗?