zoukankan      html  css  js  c++  java
  • 存储之数据卷

    一.为什么需要存储卷

    Container中的文件在磁盘上是临时存放的,这给container中运行比较重要的应用程序带来一些问题
    • 当容器崩溃时文件丢失:kubelet会重新启动容器,但容器会以干净的状态重启
    • 同一pod中运行多个容器,如何共享文件

    回顾:容器部署过程中一般需要三种数据

    • 启动时需要初始化数据:例如配置文件
    • 启动过程中会产生临时数据,该临时数据需要多个容器共享
    • 启动过程中产生的持久化数据,例如mysql的数据目录

    kubernetes中的Volume提供了容器中挂载外部存储的能力

    Pod需要设置卷来源(spec.volume)和挂载点(spec.containers.volumeMounts)两个信息后才可以使用相应的Volume

    官网文档:https://kubernetes.io/zh/docs/concepts/storage/volumes/

    二.数据卷的类型

    • 本地(hostPath、emptyDir)
    • 网络(NFS、Ceph、 GlusterFs)
    • 公有云(AWS EBS)
    • k8s资源(configmap、secret)

    三. emptyDir

    emptyDir是一个临时存储卷,与pod的生命周期绑定在一起。pod删除,卷也会被删除
    
    应用场景:pod容器之间数据共享
    apiVersion: v1
    kind: Pod
    metadata:
      name: emptydir-pod
      namespace: volume
    spec:
      containers:
      - name: write
        image: centos
        command: ["bash","-c","for i in {1..100};do echo $i >> /data/hello;sleep 1;done"]
        volumeMounts:
        - name: data
          mountPath: /data
      - name: read
        image: centos
        command: ["bash","-c","tail -f /data/hello"]
        volumeMounts:
        - name: data
          mountPath: /data
      volumes:
      - name: data
        emptyDir: {}
    P
    ###多个pod之间数据共享

    三.hostPath 

    hostPath卷:挂载node文件系统(pod所在的节点)上的文件或者目录到pod中的容器内
    
    应用场景:Pod中的容器需要访问宿主机文件
    apiVersion: v1
    kind: Pod
    metadata:
      name: hostpath-pod
      namespace: volume
    spec:
      containers:
      - name: hostpath-pod
        image: nginx
        volumeMounts:
        - mountPath: /data/  # 容器中挂载的目录位置
          name: configdir   # 挂载名: 与volumes中的name字段一致
        - mountPath: /data/volume
          name: yamlfile
      volumes:
      - name: configdir
        hostPath:
          # 确保文件所在目录成功创建。
          path: /root/yaml/config
          type: DirectoryOrCreate
      - name: yamlfile
        hostPath:
          path: /root/yaml/volume/hostpath-pod.yaml
          type: FileOrCreate

    四.NFS卷

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: nginx-web
      namespace: volume
    spec:
      selector:
        matchLabels:
          app: nginx
      replicas: 3
      template:
        metadata:
          labels:
            app: nginx
        spec:
          containers:
          - name: nginx
            image: nginx
            volumeMounts:
            - name: wwwroot
              mountPath: /usr/share/nginx/html
            ports:
            - containerPort: 80
          volumes:
          - name: wwwroot
            nfs:
              server: 192.168.11.130    # nfs服务器
              path: /ifs/kubernetes     # nfs服务端共享出来的路径

       

  • 相关阅读:
    Java:抽象类与接口
    OOP编程思想:类的设计原则
    Win10系统下设置Go环境变量和go语言开启go module
    Windows下Golang安装Iris框架
    AOS.JS 和基于Animation.css的收费库WOW.JS相似
    文本比价工具
    MySQL Order By Rand()效率
    datatable分页
    PHP面向对象之魔术方法
    PHP面向对象之序列化与反序列化
  • 原文地址:https://www.cnblogs.com/lichunke/p/14139669.html
Copyright © 2011-2022 走看看