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服务端共享出来的路径

       

  • 相关阅读:
    JSON初试
    for ...in 、for each ...in、 for...of(https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Statements/for...of)
    WPF MVVM 模式下的弹窗
    『简易日志』NuGet 日志包 SimpleLogger
    WPF 让一组 Button 实现 RadioButton 的当前样式效果
    IIS 错误解决:当前标识没有对 Temporary ASP.NET Files 的写访问权限
    [读书笔记] 《大话设计模式》
    WPF 原生绑定和命令功能使用指南
    ASP.NET Core MVC 网站学习笔记
    在香蕉派的树莓派系统上配置 Syncthing 自启动
  • 原文地址:https://www.cnblogs.com/lichunke/p/14139669.html
Copyright © 2011-2022 走看看