美文网首页
k8s 中的数据管理(一)

k8s 中的数据管理(一)

作者: wayyyy | 来源:发表于2024-01-10 10:03 被阅读0次

    容器和Pod是短暂的,会被频繁的销毁和创建,容器销毁时,保存在容器内部文件系统中的数据都会被清除。为了持久化保存容器中的数据,可以使用 Kubernetes Volume。

    本质上 Kubernetes Volume 是一个目录,当它被mount到Pod中,pod中的所有容器都可以访问这个 Volume,k8s 支持支持多种 backend 类型,包括emptyDir,hostPath,NFS,Ceph 等等,Volume 提供了各种 backend 的抽象,容器在使用Volume读写数据时不需要关心数据到底如何存放在本地节点的文件系统中还是云硬盘上。

    emptyDir
    apiVersion: v1
    kind: Pod
    metadata:
      name: producer-consumer
    spec:
      containers:
      - image: busybox
        name: producer
        volumeMounts:
        - mountPath: /producer_dir
          name: shared-volume
        args:
        - /bin/sh
        - -c
        - echo "hello world" > /producer_dir/hello; sleep 5
    
      - image: busybox
        name: consumer
        volumeMounts:
        - mountPath: /consumer_dir
          name: shared-volume
        args:
        - /bin/sh
        - -c
        - cat /consumer_dir/hello; sleep 5
    
      volumes:
      - name: shared-volume
        emptyDir: {}
    

    这里我们创建了一个Pod,它有两个容器,它们共享一个volume:
    我们定义了一个emptyDir 类型的Volume shared-volume
    producer 容器将shared-volume mount 到 /produce_dir 目录
    consumer 容器将shared-volume mount 到 /consumer_dir 目录
    producer 写数据,consumer 读数据。

    image.png

    kubectl log 显示容器 consumer 成功读到了 producer 写入的数据,验证了两个容器共享 emptyDir Volume。

    emptyDir 是Host上创建的临时目录,其优点是能够方便的为Pod中的容器提供共享存储,不需要额外的配置。但是它不具备持久性,如果Pod不存在了,那么它也就不复存在。

    hostPath

    如果Pod被销毁了,hostPath 对应的目录还是会被保留,从这一点来看,hostPath的持久性比emptyDir强,不过一旦Host崩溃,hostPath 也就无法被访问了。

    相关文章

      网友评论

          本文标题:k8s 中的数据管理(一)

          本文链接:https://www.haomeiwen.com/subject/kxbondtx.html