docker存储

容器删除,数据也删除,针对需要应用持久化的数据就要配置存储,常见就是基于存储到节点上(而节点存储可以是NFS、ceph、iscsi等等)

K8s的Pod存储

由于Pod是基于容器的集合,基于pause容器实现存储共享

K8s 存储卷
存储卷作用就是由于容器的结构,数据会随着容器删除而删除,那么Pod对于需要数据的共享和持久化就需要借助存储卷配置

1、使用配置结构

  • docker:docker的存储使用是直接相对于容器本身
    • 配置资源,基于节点目录或者NFS,ceph都要基于节点上配置好
    • mount使用:docker run -v /root/xxxx:/root/xxxx (docker存储分2种,详细可以看之前文章)
  • Pod:Pod的存储是基于Pod资源之上来定义的,因为Pod不是单一个体
    • 需要先定义存储,也就是把存储资源准备好,volumes字段(Pod层)
    • 容器mount挂载存储资源(绑定存储资源), volumeMounts字段(containers层)

2、存储卷分类

  • 共享存储卷:针对临时数据使用或者基于一个Pod内使用
  • 持久化共享存储卷:数据可以实现持久化的共享存储,并不会随着容器生命周期而被删除

共享存储卷

  • emptyDir:类似docker直接运行,而Pod是内容器需要共享数据,会随着Pod生命周期而消失
    • 可以基于内存实现提供高性能

持久化共享存储卷

  • hostPath:基于节点的目录存储,节点可以是NFS存储或者ceph存储,但是无法实现控制器的副本策略,数据只能在节点持久化和共享(适合daemonset控制器,只在各自节点负责收集数据)
  • nfs/cinder/ceph…:基于网络存储,实现真正的持久化共享存储

举例(NFS)

前提条件
node节点需要安装nfs客户端

apiVersion: apps/v1
kind: Deployment
metadata:
  name: centos-nfs
  namespace: default
  labels:
    app: centos
    version: "7.6"
spec:
  replicas: 1
  selector:
    matchLabels:
     app: centos
     version: "7.6"
  template:
    metadata:
      labels:
        app: centos
        version: "7.6"
    spec:
      containers:
      - name: centos-nfs
        image: centos:7.6.1810
        imagePullPolicy: IfNotPresent
        command: [ /usr/sbin/init ]
        volumeMounts: #挂载存储
        - mountPath: /mnt   #容器内挂载目录
          name: nfs #定义存储的name名称
      volumes:  #定义存储
      - name: nfs  #名称
        nfs:  #存储类型
          path: /nfs_share  #nfs定义的目录
          server: 192.168.12.10  #服务器地址
          readOnly: true   #开启只读,volumeMounts也可以设置针对容器,这里开启就是针对Pod

在这里插入图片描述
在这里插入图片描述

  • 参考:书籍-kubernetes进阶实战-马永亮
Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐