Kubernetes Volume之emptyDir卷、hostPath卷

这里介绍Kubernetes卷中的emptyDir、hostPath卷

Kubernetes Volume之emptyDir卷、hostPath卷

abstract.png

emptyDir卷

emptyDir卷的生命周期与Pod的生命周期相关联。换言之当Pod被删除时卷中的内容即会丢失,故其是一种临时性存储。由于Pod中各容器的文件系统是独立的,故通过emptyDir卷可以实现对同一个Pod中多个容器的数据共享

这里我们在一个Pod当中分别使用两个容器:fortune、nginx。前者会每隔几秒向卷中的html文件生成新内容;后者则会读取卷中的内容。配置文件如下所示

apiVersion: apps/v1
# 资源类型
kind: ReplicaSet
metadata:
  # RS名称
  name: my-rs-1
spec:
  # 副本数量
  replicas: 1
  # 标签选择器
  selector:
    matchLabels:
      company: Microsoft
  # Pod 模板
  template:
    metadata:
      # 标签信息
      labels:
        company: Microsoft
    spec:
      # 容器信息
      containers:
      # 容器1: 生成Html文件
      - name: html-generator
        image: luksa/fortune
        volumeMounts:
        # 将名为html-volume的卷挂载到容器内的指定路径
        - name: html-volume
          mountPath: /var/htdocs
      # 容器2: Nginx服务
      - name: my-nginx
        image: nginx:alpine
        # 仅用于展示容器所使用的端口
        ports:
        - containerPort: 80
          protocol: TCP
        volumeMounts:
        # 将名为html-volume的卷挂载到容器内的指定路径
        - name: html-volume
          mountPath: /usr/share/nginx/html
          # 容器对该卷只读
          readOnly: true
      # 卷信息
      volumes: 
      # 名为html-volume的emptyDir类型卷
      - name: html-volume
        emptyDir: {}

效果如下所示,可以看到每隔一段时间通过Nginx访问的内容都不一样。说明nginx容器使用的文件内容是fortune容器是生成的

Kubernetes Volume之emptyDir卷、hostPath卷

figure 1.jpeg

hostPath卷

hostPath卷指向的是K8s节点上的文件系统上的文件/目录。换言之,通过hostPath卷可以实现对同一K8s节点中多个Pod、容器的数据共享。而且由于该类型的卷不会因为Pod的消失而消失,故其是一种持久性存储。这里我们使用一个单节点的K8集群,确保测试Pod全部部署在一个集群节点当中。通过配置文件分别创建两个Pod。其中,第1个Pod包含2个容器;第2个Pod包含1个容器

apiVersion: apps/v1
# 资源类型
kind: ReplicaSet
metadata:
  # RS名称
  name: my-rs-a
spec:
  # 副本数量
  replicas: 1
  # 标签选择器
  selector:
    matchLabels:
      company: Microsoft
  # Pod 模板
  template:
    metadata:
      # 标签信息
      labels:
        company: Microsoft
    spec:
      # 容器信息
      containers:
      # 容器 1
      - name: my-a-1
        image: jocatalin/kubernetes-bootcamp:v1
        volumeMounts:
        # 将名为my-volume的卷挂载到容器内的指定路径
        - name: my-volume
          mountPath: /Aaron/A1
      # 容器 2
      - name: my-a-2
        image: nginx:alpine
        volumeMounts:
        # 将名为my-volume的卷挂载到容器内的指定路径
        - name: my-volume
          mountPath: /Aaron/A2
      # 卷信息
      volumes: 
      # 名为my-volume的hostpath类型卷
      - name: my-volume
        hostPath: 
          path: /Data/Aaron
          # 如果在给定路径上什么都不存在,那么将根据需要创建空目录,权限设置为 0755,具有与 kubelet 相同的组和属主信息
          type: DirectoryOrCreate

---

apiVersion: apps/v1
# 资源类型
kind: ReplicaSet
metadata:
  # RS名称
  name: my-rs-b
spec:
  # 副本数量
  replicas: 1
  # 标签选择器
  selector:
    matchLabels:
      company: Microsoft
  # Pod 模板
  template:
    metadata:
      # 标签信息
      labels:
        company: Microsoft
    spec:
      # 容器信息
      containers:
      - name: my-b-1
        image: jocatalin/kubernetes-bootcamp:v1
        volumeMounts:
        # 将名为my-volume的卷挂载到容器内的指定路径
        - name: my-volume
          mountPath: /Aaron/B1
      # 卷信息
      volumes: 
      # 名为my-volume的hostpath类型卷
      - name: my-volume
        hostPath: 
          path: /Data/Aaron
          # 如果在给定路径上什么都不存在,那么将根据需要创建空目录,权限设置为 0755,具有与 kubelet 相同的组和属主信息
          type: DirectoryOrCreate

部署成功,如下所示

Kubernetes Volume之emptyDir卷、hostPath卷

figure 2.jpeg

当我们通过节点的文件系统对hostpath卷建立文件内容时,该节点使用该卷的所有Pod、容器均可以看到,效果如下所示。

Kubernetes Volume之emptyDir卷、hostPath卷

figure 3.jpeg

参考文献

  1. Kubernetes in Action中文版 Marko Luksa著
  2. 深入剖析Kubernetes 张磊著

原文始发于微信公众号(青灯抽丝):Kubernetes Volume之emptyDir卷、hostPath卷

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之家整理,本文链接:https://www.bmabk.com/index.php/post/41950.html

(0)
小半的头像小半

相关推荐

发表回复

登录后才能评论
极客之家——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!