简介
1、卷是Pod的一个组成部分,和pod共享生命周期,不是独立的Kubenetes对象,也不能单独创建或删除。
2、可用的卷类型如下:
- emptyDir——用于存储临时数据的简单空目录。
- hostPath——用于将目录从工作节点的文件系统挂载到Pod中。
- gitRepo——通过检出Git仓库的内容来初始化的卷。
- nfs——挂载到Pod中的NFS共享卷。
- gcepersistentDisk(Google高效能型存储磁盘卷)、awsElasticBlockStore(AmazoneWeb服务弹性块存储卷)、azureDisk(MicrosoftAzure磁盘卷)——用于挂载云服务商提供的特定存储类型。
- cinder、cephfs、iscsi、flocker、glusterfs、quobyte、rbd、flexVolume、vsphere-Volume、photonPersistentDisk、scaleIO用于挂载其他类型的网络存储。
- configMap、secret、downwardAPI——用于将Kubenetes部分资源和集群信息公开给pod的特殊类型的卷。
- persistentVolumeClaim——一种使用预置或者动态配置的持久存储类型。
3、单个容器可以同时使用不同类型的多个卷,每个容器都可以装载或不装载卷。
4、emptyDir卷是最简单的卷类型,但是其他类型的卷都是在它的基础上构建的。
使用emptyDir卷
1、构建fortune镜像
1)编辑fortuneloop.sh
#!/bin/bash
trap "exit" SIGINT
sudo mkdir /var/htdocs
sudo chmod 777 -R /var/htdocs
while :
do
echo $(date) Writing fortune to /var/htdocs/index.html
/usr/games/fortune > /var/htdocs/index.html
sleep 10
done
2)分配执行权限
chmod 777 fortuneloop.sh
3)编辑Dockerfile
FROM ubuntu:latest
RUN apt-get update ; apt-get -y install fortune
ADD fortuneloop.sh /bin/fortuneloop.sh
ENTRYPOINT /bin/fortuneloop.sh
4)构建docker镜像
docker build -t registry.cn-hangzhou.aliyuncs.com/rogueq/fortune:v1 .
5)推送docker镜像
docker push registry.cn-hangzhou.aliyuncs.com/rogueq/fortune:v1
6)编辑fortune-pod.yaml
apiVersion: v1
kind: Pod
metadata:
name: fortune
spec:
containers:
- image: registry.cn-hangzhou.aliyuncs.com/rogueq/fortune:v1
name: html-generator
volumeMounts:
- name: html
mountPath: /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
emptyDir: {}
7)创建pod
kubectl create -f fortune-pod.yaml
8)将端口从本地机器转发到pod(也可以通过服务来访问pod)
kubectl port-forward fortune 8080:80
9)在另一个客户端访问pod,每隔一段时间访问pod,会得到不同的消息
crul http:localhost:8080