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 Output流写入包装问题
    SpringBoot项目单元测试不经过过滤器问题
    SpringSecurity集成启动报 In the composition of all global method configuration, no annotation support was actually activated 异常
    JWT jti和kid属性的说明
    Maven 排除依赖
    第五章 基因概念的发现
    第三章 孟德尔遗传的拓展
    第二章 孟德尔遗传
    第一章 引言
    GWAS全基因组关联分析
  • 原文地址:https://www.cnblogs.com/lichunke/p/14139669.html
Copyright © 2011-2022 走看看