Kubernetes进阶之hostpath及emptyDir数据卷

K8s进阶之数据卷与数据持久卷
目录:

一 从外部访问应用最佳方式
二 配置管理
三 数据卷与数据持久卷
四 再谈有状态应用部署
五 K8S 安全机制

三、数据卷与数据持久卷
数据卷产生的背景
为什么有数据卷,这里的数据卷和docker的数据卷还不太一样,实现的机制不是一套,数据卷说白了就是能帮助你持久化你pod重要的数据,如果你不持久化的话,pod删除里面临时产生的数据也会被删除,这不管是k8s中还是docker中,这都是一样的,所以k8s和docker都提供了这种volume的这种相关功能,就是为了持久化你容器中的数据,能让它重建或者删除,数据依然存在。

? Kubernetes中的Volume提供了在容器中挂载外部存储的能力 ,也就是部署k8s自身的存储了,就好比自己搭建一个分布式存储,好比公有云的云盘存储,这样是可以挂在集群之外的存储可以挂在k8s中去使用。
pod要想使用这种存储必须定义两点:
? Pod需要设置卷来源(spec.volume)和挂载点(spec.containers.volumeMounts)两个信息后才可以使用相应的Volume

来看一下卷的类型最好的解释就是官方:
来看一下官方怎么说的:
https://kubernetes.io/docs/concepts/storage/volumes/

第一种就是本地卷
像hostPath类型与docker里面的bind mount类型,就是直接挂载到宿主机文件的类型
像emptyDir是这样本地卷,也就是类似于volume类型
这两点都是绑定node节点的

第二种就是网络数据卷
比如Nfs、ClusterFs、Ceph,这些都是外部的存储都可以挂载到k8s上

第三种就是云盘
比如AWS、微软(azuredisk)

第四种就是k8s自身的资源
比如secret、configmap、downwardAPI

先来看一下本地卷
像emptyDir类似与docker的volume,而docker删除容器,数据卷还会存在,而emptyDir删除容器,数据卷也会丢失,一般这个只做临时数据卷来使用

创建一个空卷,挂载到Pod中的容器。Pod删除该卷也会被删除。
应用场景:Pod中容器之间数据共享
emptyDir类型

[[email protected] demo]# vim emptydir.yaml
apiVersion: v1
kind: Pod
metadata:
  name: my-pod
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: {}

[[email protected] demo]# kubectl create -f emptydir.yaml 

[[email protected] demo]# kubectl get pod
NAME                     READY   STATUS      RESTARTS   AGE
my-pod                   2/2     Running     13         67m
mypod                    1/1     Running     0          3h30m
mypod2                   1/1     Running     0          3h24m
mypod3                   0/1     Completed   0          3h5m
mypod4                   0/1     Completed   0          3h
nginx-5ddcc6cb74-lplxl   1/1     Running     0          4h8m
[[email protected] demo]# kubectl logs my-pod read

Hostpath类型

挂载Node文件系统上文件或者目录到Pod中的容器。
应用场景:Pod中容器需要访问宿主机文件

[[email protected] demo]# vim hostpath.yaml
apiVersion: v1
kind: Pod
metadata:
  name: my-pod2
spec:
  containers:
  - name: busybox
    image: busybox
    args:
    - /bin/sh
    - -c - sleep 36000
    volumeMounts:
    - name: data
      mountPath: /data
  volumes:
  - name: data
    hostPath:
      path: /tmp
      type: Directory
[[email protected] demo]# kubectl create -f hostpath.yaml
[[email protected] demo]# kubectl get pod
NAME                     READY   STATUS      RESTARTS   AGE
my-pod2                  1/1     Running     0          12s
mypod                    1/1     Running     0          4h43m
mypod2                   1/1     Running     0          4h37m
mypod3                   0/1     Completed   0          4h17m
mypod4                   0/1     Completed   0          4h12m
nginx-5ddcc6cb74-lplxl   1/1     Running     0          5h20m
web-67fcf9bf8-mrlhd      1/1     Running     0          20m

[[email protected] demo]# kubectl exec -it my-pod2 sh
cd /data/
ls

这里创建的数据和我们被分配的node节点的数据都是一样的,创建的数据都会更新上去,删除容器,不会删除数据卷的数据。

原文地址:https://blog.51cto.com/14143894/2436199

时间: 2024-10-08 21:09:23

Kubernetes进阶之hostpath及emptyDir数据卷的相关文章

Kubernetes核心概念之Volume存储数据卷详解

在Docker中就有数据卷的概念,当容器删除时,数据也一起会被删除,想要持久化使用数据,需要把主机上的目录挂载到Docker中去,在K8S中,数据卷是通过Pod实现持久化的,如果Pod删除,数据卷也会一起删除,k8s的数据卷是docker数据卷的扩展,K8S适配各种存储系统,包括本地存储EmptyDir,HostPath,网络存储NFS,GlusterFS,PV/PVC等,下面就详细介绍下K8S的存储如何实现. 一.本地存储 1,EmptyDir ①编辑EmptyDir配置文件 vim empt

Docker Kubernetes Volume 本地数据卷

Docker Kubernetes Volume 本地数据卷 emptyDir 当Pod分配到Node时,首先创建一个空卷,并挂载到Pod中的容器. Pod中的容器可以读取和写入卷中的文件. 当Pod从节点中删除emptyDir时,该数据也会被删除. 注:适用于容器之间的数据共享. hostPath 一个hostPath卷挂载Node文件系统上的文件或目录到Pod中的容器. 注:指定宿主级的数据目录挂载到容器中. 环境: 系统:Centos 7.4 x64 Docker版本:18.09.0 Ku

Docker数据卷之进阶篇

[容器之间数据共享,修改同步] 配置如下: type 指定挂载方式,我们这里用到的是 volume,其实还可以有 bind 和 tmpfs. Volunme:这个目录只有Docker可以管理,其他进程不能修改.如果想持久保存容器的 应用数据,Volumes是Docker推荐的挂载方式. Bind:容器内的数据被存放到宿主机文件系统的任意位置,甚至存放到一些重要的系统 目录或文件中.除了Docker之外的进程也可以任意对他们进行修改: tmpfs:容器的数据只会存放到宿主机的内存中,不会被写到宿主

Kubernetes之(十二)存储卷

目录 Kubernetes之(十二)存储卷 简介 emptyDir存储卷 hostPath存储卷 nfs共享存储卷 PV和PVC NFS使用PV和PVC 配置NFS存储 定义PV 定义PVC 查看验证 测试访问 StorageClass Kubernetes之(十二)存储卷 简介 为了保证数据的持久性,必须保证数据在外部存储在docker容器中,为了实现数据的持久性存储,在宿主机和容器内做映射,可以保证在容器的生命周期结束,数据依旧可以实现持久性存储.但是在k8s中,由于pod分布在各个不同的节

Kubernetes进阶之ingress-nginx

Kubernetes进阶之ingress-nginx 目录:一 从外部访问应用最佳方式 二 配置管理 三 数据卷与数据持久卷 四 再谈有状态应用部署 五 K8S 安全机制 说在前面的话,选择nodeport的方式去暴露端口,那你需要得去判断暴露的端口有没有被占用,再创建新的应用会判断端口有没有被分配出去 nodeport本身是基于默认的iptables的代理模式做的网络转发,也就是SANT,DANT,基于四层的,做七层是做不了的,性能差一点,因为它需要防火墙的转发和过滤. 一.从外部访问应用最佳

Kubernetes进阶之secret及configmap配置管理

Kubernetes进阶之secret及configmap配置管理 目录: 一 从外部访问应用最佳方式 二 配置管理 三 数据卷与数据持久卷 四 再谈有状态应用部署 五 K8S 安全机制 二.配置管理Pod使用secret两种方式: ? 变量注入 (就是我们在写yaml的时候直接让它以变量的方式注入进去,注入pod中,去引用这个变量,去做相关的处理)? 挂载(直接从volume的形式挂载到我们指定的目录下)Configmap与Secret类似,区别在于ConfigMap保存的是不需要加密配置信息

Kubernetes进阶之PersistentVolume 静态供给实现NFS网络存储

Kubernetes进阶之PersistentVolume 静态供给实现NFS网络存储网络存储 NFS是一种很早的技术,单机的存储在服务器方面还是非常主流的,但nfs唯一的就是缺点比较大就是没有集群版,做集群化还是比较费劲的,文件系统做不了,这是一个很大的弊端,大规模的还是需要选择一些分布式的存储,nfs就是一个网络文件存储服务器,装完nfs之后,共享一个目录,其他的服务器就可以通过这个目录挂载到本地了,在本地写到这个目录的文件,就会同步到远程服务器上,实现一个共享存储的功能,一般都是做数据的共

从零开始入门 K8s | 应用存储和持久化数据卷:核心知识

作者 | 至天 阿里巴巴高级研发工程师 一.Volumes 介绍 Pod Volumes 首先来看一下 Pod Volumes 的使用场景: 场景一:如果 pod 中的某一个容器在运行时异常退出,被 kubelet 重新拉起之后,如何保证之前容器产生的重要数据没有丢失? 场景二:如果同一个 pod 中的多个容器想要共享数据,应该如何去做? 以上两个场景,其实都可以借助 Volumes 来很好地解决,接下来首先看一下 Pod Volumes 的常见类型: 本地存储,常用的有 emptydir/ho

Docker 数据卷与容器互联(3)

title: Docker 数据卷与容器互联(3) date: 2018-12-15 14:50:42 tags: Docker categories: Docker copyright: true --- Docker是基于Go语言实现的开源容器项目,Docker让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化.容器是完全使用沙箱机制,相互之间不会有任何接口,Docker诞生于2013年年初,最初发起者是dotCloud公司.