14-k8s-基本存储之EmptyDir、HostPath、NFS

2023-10-17 04:12

本文主要是介绍14-k8s-基本存储之EmptyDir、HostPath、NFS,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

    • 一、相关概念
    • 二、EmptyDir存储
    • 三、HostPath存储
    • 四、NFS存储

一、相关概念

  1. 概述

    Volumn定义在Pod上,然后被该Pod里面的多个容器挂载到具体的文件目录下。实现同一个Pod中不同容器之间的数据共享以及数据的持久化存储。Volume的生命周期不和Pod中的单个容器的生命周期有关。Volume的生命周期和Pod的生命周期关系需要根据储存类型来定

  2. kubernetes支持的常见Volume类型

    基本存储:EmptyDir、HostPath、NFS
    高级存储:PV、PVC
    配置存储:ConfigMap、Secret

二、EmptyDir存储

  1. 概述

    EmptyDir在Pod被分配到Node时创建的,它的初始内容为空,并且无须指定宿主机上对应的目录文件,因为kubernetes会自动分配一个目录,当Pod销毁时,EmptyDir中的数据也会被永久删除,所以也被称为临时存储。

  2. 实操逻辑

    1. 先声明一个EmptyDir储存类型的volume
    2. 在一个Pod中准备两个容器nginx和busybox
    3. 将volume分别挂载到两个容器的目录中
    4. 然后nginx容器负责向volume中写日志,busybox中通过命令从volume读取日志文件内容到控制台
    
  3. 编写yml文件:vi /opt/volume-emptydir.yaml

    apiVersion: v1
    kind: Pod
    metadata:name: volume-emptydir
    spec:containers:- name: nginximage: nginx:latestports:- name: nginx-portcontainerPort: 80protocol: TCPvolumeMounts:    # 将logs-volume挂载到nginx容器的/var/log/nginx目录, nginx会将用户的访问日志写入到该目录的access.log文件中- name: logs-volumemountPath: /var/log/nginx- name: busyboximage: busybox:latestcommand: ["/bin/sh", "-c", "tail -f /logs/access.log"] volumeMounts:    # 将logs-volume挂载到busybox容器中的/logs目录- name: logs-volumemountPath: /logsvolumes:    # 声明volume- name: logs-volumeemptyDir: {}
    
  4. 运行:kubectl apply -f /opt/volume-emptydir.yaml

  5. 查看是否启动:kubectl get pod -o wide
    在这里插入图片描述

  6. 测试访问,生成日志: curl 192.169.189.78

  7. 查看日志(-c是指定容器):kubectl logs volume-emptydir -c busybox -f
    在这里插入图片描述

三、HostPath存储

  1. 概述

    HostPath就是将Node主机中的一个实际目录挂载到Pod中,以供容器使用。即使Pod销毁,数据依旧可以保存在Node主机上,也被称为本地存储。

  2. 实操逻辑

    1. 先声明一个HostPath储存类型的volume,数据储存在Node主机的目录中
    2. 在一个Pod中准备两个容器nginx和busybox
    3. 将volume分别挂载到两个容器的目录中
    4. 然后nginx容器负责向volume中写日志,busybox中通过命令从volume读取日志文件内容到控制台
    
  3. 编写yml文件:vi /opt/volume-hostpath.yaml

    apiVersion: v1
    kind: Pod
    metadata:name: volume-hostpath
    spec:containers:- name: nginximage: nginx:latestports:- name: nginx-portcontainerPort: 80protocol: TCPvolumeMounts:    # 将logs-volume挂载到nginx容器的/var/log/nginx目录, nginx会将用户的访问日志写入到该目录的access.log文件中- name: logs-volumemountPath: /var/log/nginx- name: busyboximage: busybox:latestcommand: ["/bin/sh", "-c", "tail -f /logs/access.log"] volumeMounts:    # 将logs-volume挂载到busybox容器中的/logs目录- name: logs-volumemountPath: /logsvolumes:    # 声明volume- name: logs-volumehostPath:path: /root/logstype: DirectoryOrCreate
    

    ps:type类型解析

    DirectoryOrCreate:目录存在就使用,不存在就先创建
    Directory:目录必须存在
    FileOrCreate:文件存在就使用,不存在就先创建
    File:文件必须存在
    Socket:unix socket必须存在
    CharDevice:字符设备必须存在
    BlockDevice:块设备必须存在
    
  4. 启动pod:kubectl apply -f /opt/volume-hostpath.yaml

  5. 查看pod:kubectl get pod volume-hostpath -o wide
    在这里插入图片描述

  6. 访问nginx:curl 192.169.235.141

  7. 查看日志(-c是指定容器):kubectl logs volume-hostpath -c busybox -f
    在这里插入图片描述

  8. 查看节点: kubectl describe pod volume-hostpath
    在这里插入图片描述

  9. 该pod在节点11,则查看日志:ls /root/logs
    在这里插入图片描述

四、NFS存储

  1. 概述

    HostPath虽然可以解决数据持久化问题,但是一旦Node节点故障了,Pod如果转移到别的Node节点上,又会出现问题。此时需要准备单独的网络存储系统。比较常用的是NFS和CIFS

    NFS是一个网络文件存储系统,可以搭建NFS服务器,然后将Pod中的存储直接连接到NFS系统上。无论Pod在节点上怎么转移,只要Node和NFS的对接没有问题,数据就可以成功访问。

  2. 搭建NFS服务器(所有的k8s服务器)

    ps1:生产环境可以使用nfs + keepalived做高可用防止单点故障,rsync + inotify实现主备间共享数据同步

    这里测试环境只搭建一台NFS服务器

    ​ 1)安装NFS服务(客户端只需安装NFS服务即可,用于客户端驱动NFS设备):yum install -y nfs-utils

    ​ 2)准备共享目录:mkdir -p /root/data/nfs

    ​ 3)将共享目录以读写权限暴露给192.168.248.0/24网段中的所有主机:vi /etc/exports

    ​ 添加 /root/data/nfs 192.168.248.0/24(rw,no_root_squash)

    ​ ps1:原来/etc/exports是空的

    ​ ps2:其中no_root_squash表示:NFS客户端连接服务端时如果使用的是root的话,那么对服务端共享目录也拥有root权限

    ​ 5)启动NFS服务:systemctl start nfs --》 systemctl enable nfs

    ​ 6)查看:exportfs -v
    在这里插入图片描述

    ​ 7)如果其他台也装nfs,可以将dnf服务器的存储路径挂载出去,共享挂载路径(可忽略):mount -t nfs 192.168.248.11:/root/data/nfs /root/data/nfs

  3. 实操逻辑

    1. 先声明一个NFS储存类型的volume,数据储存在远程主机的目录中
    2. 在一个Pod中准备两个容器nginx和busybox
    3. 将volume分别挂载到两个容器的目录中
    4. 然后nginx容器负责向volume中写日志,busybox中通过命令从volume读取日志文件内容到控制台
    
  4. 编写脚本:vi /opt/volume-nfs.yaml

    apiVersion: v1
    kind: Pod
    metadata:name: volume-nfs
    spec:containers:- name: nginximage: nginx:latestports:- name: nginx-portcontainerPort: 80protocol: TCPvolumeMounts:    # 将logs-volume挂载到nginx容器的/var/log/nginx目录, nginx会将用户的访问日志写入到该目录的access.log文件中- name: logs-volumemountPath: /var/log/nginx- name: busyboximage: busybox:latestcommand: ["/bin/sh", "-c", "tail -f /logs/access.log"] volumeMounts:    # 将logs-volume挂载到busybox容器中的/logs目录- name: logs-volume mountPath: /logsvolumes:    # 声明volume- name: logs-volumenfs:server: 192.168.248.10    # NFS服务器地址path: /root/data/nfs     # NFS服务器的共享目录readOnly: false    # 是否只读
    
  5. 启动:kubectl apply -f /opt/volume-nfs.yaml

  6. 查看pod:kubectl get pod volume-nfs -o wide
    在这里插入图片描述

  7. 访问Pod中的Nginx:curl 192.169.189.68

  8. 查看日志(-c是指定容器):kubectl logs volume-nfs -c busybox -f

  9. 查看文件:ls /root/data/nfs
    在这里插入图片描述

这篇关于14-k8s-基本存储之EmptyDir、HostPath、NFS的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/222862

相关文章

异构存储(冷热数据分离)

异构存储主要解决不同的数据,存储在不同类型的硬盘中,达到最佳性能的问题。 异构存储Shell操作 (1)查看当前有哪些存储策略可以用 [lytfly@hadoop102 hadoop-3.1.4]$ hdfs storagepolicies -listPolicies (2)为指定路径(数据存储目录)设置指定的存储策略 hdfs storagepolicies -setStoragePo

HDFS—存储优化(纠删码)

纠删码原理 HDFS 默认情况下,一个文件有3个副本,这样提高了数据的可靠性,但也带来了2倍的冗余开销。 Hadoop3.x 引入了纠删码,采用计算的方式,可以节省约50%左右的存储空间。 此种方式节约了空间,但是会增加 cpu 的计算。 纠删码策略是给具体一个路径设置。所有往此路径下存储的文件,都会执行此策略。 默认只开启对 RS-6-3-1024k

基本知识点

1、c++的输入加上ios::sync_with_stdio(false);  等价于 c的输入,读取速度会加快(但是在字符串的题里面和容易出现问题) 2、lower_bound()和upper_bound() iterator lower_bound( const key_type &key ): 返回一个迭代器,指向键值>= key的第一个元素。 iterator upper_bou

业务中14个需要进行A/B测试的时刻[信息图]

在本指南中,我们将全面了解有关 A/B测试 的所有内容。 我们将介绍不同类型的A/B测试,如何有效地规划和启动测试,如何评估测试是否成功,您应该关注哪些指标,多年来我们发现的常见错误等等。 什么是A/B测试? A/B测试(有时称为“分割测试”)是一种实验类型,其中您创建两种或多种内容变体——如登录页面、电子邮件或广告——并将它们显示给不同的受众群体,以查看哪一种效果最好。 本质上,A/B测

90、k8s之secret+configMap

一、secret配置管理 配置管理: 加密配置:保存密码,token,其他敏感信息的k8s资源 应用配置:我们需要定制化的给应用进行配置,我们需要把定制好的配置文件同步到pod当中容器 1.1、加密配置: secret: [root@master01 ~]# kubectl get secrets ##查看加密配置[root@master01 ~]# kubectl get se

【IPV6从入门到起飞】5-1 IPV6+Home Assistant(搭建基本环境)

【IPV6从入门到起飞】5-1 IPV6+Home Assistant #搭建基本环境 1 背景2 docker下载 hass3 创建容器4 浏览器访问 hass5 手机APP远程访问hass6 更多玩法 1 背景 既然电脑可以IPV6入站,手机流量可以访问IPV6网络的服务,为什么不在电脑搭建Home Assistant(hass),来控制你的设备呢?@智能家居 @万物互联

K8S(Kubernetes)开源的容器编排平台安装步骤详解

K8S(Kubernetes)是一个开源的容器编排平台,用于自动化部署、扩展和管理容器化应用程序。以下是K8S容器编排平台的安装步骤、使用方式及特点的概述: 安装步骤: 安装Docker:K8S需要基于Docker来运行容器化应用程序。首先要在所有节点上安装Docker引擎。 安装Kubernetes Master:在集群中选择一台主机作为Master节点,安装K8S的控制平面组件,如AP

【Kubernetes】K8s 的安全框架和用户认证

K8s 的安全框架和用户认证 1.Kubernetes 的安全框架1.1 认证:Authentication1.2 鉴权:Authorization1.3 准入控制:Admission Control 2.Kubernetes 的用户认证2.1 Kubernetes 的用户认证方式2.2 配置 Kubernetes 集群使用密码认证 Kubernetes 作为一个分布式的虚拟

速了解MySQL 数据库不同存储引擎

快速了解MySQL 数据库不同存储引擎 MySQL 提供了多种存储引擎,每种存储引擎都有其特定的特性和适用场景。了解这些存储引擎的特性,有助于在设计数据库时做出合理的选择。以下是 MySQL 中几种常用存储引擎的详细介绍。 1. InnoDB 特点: 事务支持:InnoDB 是一个支持 ACID(原子性、一致性、隔离性、持久性)事务的存储引擎。行级锁:使用行级锁来提高并发性,减少锁竞争

C 语言的基本数据类型

C 语言的基本数据类型 注:本文面向 C 语言初学者,如果你是熟手,那就不用看了。 有人问我,char、short、int、long、float、double 等这些关键字到底是什么意思,如果说他们是数据类型的话,那么为啥有这么多数据类型呢? 如果写了一句: int a; 那么执行的时候在内存中会有什么变化呢? 橡皮泥大家都玩过吧,一般你买橡皮泥的时候,店家会赠送一些模板。 上