简介

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
12-04 09:37