k8s数据持久化

Volume存储解决k8s数据持久化方案

Container(容器)中的磁盘文件是短暂的,当容器崩溃时,kubelet会重新启动容器,但最初的
文件将丢失,Container会以最干净的状态启动。另外,当一个Pod运行多个Container时,各个
容器可能需要共享一些文件。Kubernetes Volume可以解决这两个问题。
一些需要持久化数据的程序才会用到Volumes,或者一些需要共享数据的容器需要volumes。
Redis-Cluster:nodes.conf
日志收集的需求:需要在应用程序的容器里面加一个sidecar,这个容器是一个收集日志的容器,
比如filebeat,它通过volumes共享应用程序的日志文件目录。
Volumes:官方文档https://kubernetes.io/docs/concepts/storage/volumes/
背景
Docker也有卷的概念,但是在Docker中卷只是磁盘上或另一个Container中的目录,其生命周期
不受管理。虽然目前Docker已经提供了卷驱动程序,但是功能非常有限,例如从Docker 1.7版本
开始,每个Container只允许一个卷驱动程序,并且无法将参数传递给卷。
另一方面,Kubernetes卷具有明确的生命周期,与使用它的Pod相同。因此,在Kubernetes中的
卷可以比Pod中运行的任何Container都长,并且可以在Container重启或者销毁之后保留数据。
Kubernetes支持多种类型的卷,Pod可以同时使用任意数量的卷。
从本质上讲,卷只是一个目录,可能包含一些数据,Pod中的容器可以访问它。要使用卷Pod需要
通过.spec.volumes字段指定为Pod提供的卷,以及使用.spec.containers.volumeMounts 字段指
定卷挂载的目录。从容器中的进程可以看到由Docker镜像和卷组成的文件系统视图,卷无法挂载
其他卷或具有到其他卷的硬链接,Pod中的每个Container必须独立指定每个卷的挂载位置。
1、emptyDir
和上述volume不同的是,如果删除Pod,emptyDir卷中的数据也将被删除,一般emptyDir卷用于
Pod中的不同Container共享数据。它可以被挂载到相同或不同的路径上。
默认情况下,emptyDir卷支持节点上的任何介质,可能是SSD、磁盘或网络存储,具体取决于自
身的环境。可以将emptyDir.medium字段设置为Memory,让Kubernetes使用tmpfs(内存支持
的文件系统),虽然tmpfs非常快,但是tmpfs在节点重启时,数据同样会被清除,并且设置的大
小会被计入到Container的内存限制当中。
使用emptyDir卷的示例,直接指定emptyDir为{}即可:
cat nginx-deploy.yaml
apiVersion: v1
kind: Pod
metadata:
name: emptydir-pod #注意此处只能是小写字母或数字,大写字母会报错
spec:
containers:

  • name: nginx-test
  • image: nginx
  • imagePullPolicy: IfNotPresent
  • volumeMounts:
    • mountPath: /cache
  • name: cache-volume
  • volumes:
    • name: cache-volume
      2、hostPath
      hostPath类型的存储卷是指将工作节点上某个文件系统的目录或文件挂载于Pod中的一种存储卷,
      它独立于Pod资源的生命周期,因而具有持久性。但它是工作节点本地的存储空间,仅适用于特定
      情况下的存储卷使用要求,例如,将工作节点上的文件系统关联为Pod的存储卷,从而使得容器访
      问节点文件系统上的数据。这一点在运行有管理任务的系统级Pod资源需要访问节点上的文件时尤
      为有用。
      使用hostPath卷的示例。将主机的/data目录挂载到Pod的/test-pd目录:
      emptyDir: {}
      [root@k8s-master02 volume]# kubectl get pod -owide NAME READY STATUS RESTARTS AGE IP NODE emptydir-pod 1/1 Running 0 116s 172.18.195.25
      k8s-master03 #1.验证(因为在master03节点)
      [root@k8s-master03 ~]# find / -name nginx-emptydir.log /var/lib/kubelet/pods/15c1955e-2999-4c66-a2db- a5d81089a912/volumes/kubernetes.io
      [root@k8s-master03 ~]# cat /var/lib/kubelet/pods/15c1955e-2999-4c66-a2db- a5d81089a912/volumes/kuberne

你可能感兴趣的:(k8s,kubernetes,linux,k8s)