K8s存储对象的使用

背景和概念

  容器中的文件在磁盘上是临时存放的,这给在容器中运行较重要的应用带来一些问题: 当容器崩溃或停止时,此时容器状态未保存, 因此在容器生命周期内创建或修改的所有文件都将丢失。另外 在崩溃期间,kubelet 会以干净的状态重新启动容器。 当多个容器在一个 Pod 中运行并且需要共享文件时, 跨所有容器设置和访问共享文件系统也有一定的挑战性;
  有docker使用经历的人应该知道,docker内有一个数据卷的概念,可以持久化容器内的文件数据;同样,在k8s体系内,使用的也是卷的概念;
  Kubernetes 支持很多类型的卷。 Pod 可以同时使用任意数目的卷类型。 临时卷类型的生命周期与 Pod 相同, 但持久卷可以比 Pod 的存活期长。 当 Pod 不再存在时,Kubernetes 也会销毁临时卷;不过 Kubernetes 不会销毁持久卷。 对于给定 Pod 中任何类型的卷,在容器重启期间数据都不会丢失。
  卷的核心是一个目录,其中可能存有数据,Pod 中的容器可以访问该目录中的数据。 所采用的特定的卷类型将决定该目录如何形成的、使用何种介质保存数据以及目录中存放的内容。
  使用卷时, 在 .spec.volumes 字段中设置为 Pod 提供的卷,并在 .spec.containers.volumeMounts 字段中声明卷在容器中的挂载位置。 容器中的进程看到的文件系统视图是由它们容器镜像的初始内容以及挂载在容器中的卷所组成的。 其中根文件系统同容器镜像的内容相吻合。 任何在该文件系统下的写入操作,如果被允许的话,都会影响接下来容器中进程访问文件系统时所看到的内容。
  卷挂载在镜像中的指定路径下。 Pod 配置中的每个容器必须独立指定各个卷的挂载位置;

常见的卷类型

常见的卷有如下几种类型:

  • configMap :configMap 卷提供了向 Pod 注入配置数据的方法。 ConfigMap 对象中存储的数据可以被 configMap 类型的卷引用,然后被 Pod 中运行的容器化应用使用(注意环境变量也可以使用configMap)。
  • hostPath:将主机节点文件系统上的文件或目录挂载到你的 Pod 中,但是官网现在不推荐使用这个了;
  • nfs:将 NFS (网络文件系统) 挂载到你的 Pod 中。nfs 卷的内容在删除 Pod 时会被保存,卷只是被卸载;使用nfs可以可以在 Pod 之间做到数据共享。
  • persistentVolumeClaim: 简称PVC,是用户在不知道特定云环境细节的情况下申领持久存储(例如 iSCSI 卷)的一种方法。
  • secret:用来给 Pod 传递敏感信息,例如密码。你可以将 Secret 存储在 Kubernetes API 服务器上,然后以文件的形式挂载到 Pod 中,无需直接与 Kubernetes 耦合
    当然也有其他类型的卷,详细的可查阅k8s官网;

案例

一、nfs原生方式挂载卷

企业级生产环境一般会由基础设施部门提供一个nfs地址和目录。受限于我本地测试环境的资源,我只能在虚拟机上随意找一台节点,来模拟nfs文件系统;这里我使用了k8s集群的master节点模拟搭建一个nfs;
(这里解释一下nfs,他的全称就是网络共享文件系统,他可以挂载到任何机器的磁盘目录下,做到几台机器间的文件数据同步共享;)
步骤
1、在所有机器上安装nfs工具

#所有机器安装
yum install -y nfs-utils

2、master主节点模拟配置为nfs服务端

#nfs主节点
echo "/nfs/data/ *(insecure,rw,sync,no_root_squash)" > /etc/exports
 
mkdir -p /nfs/data
systemctl enable rpcbind --now
systemctl enable nfs-server --now
#配置生效
exportfs -r

3、worker节点查询nfs服务

showmount -e nfs服务ip

在这里插入图片描述
可以看到我上一个步骤创建的目录可以查到了
4、挂载到worker节点指定的目录下

# 创建/nfs/data目录,执行以下命令挂载 nfs 服务器上的共享目录到本机路径 /nfs/data
mkdir -p /nfs/data
 
mount -t nfs 192.168.xxx.xxx:/nfs/data /nfs/data
# 写入一个测试文件
echo "hello nfs server" > /nfs/data/test2.txt

查看同步的test2.txt文件
在这里插入图片描述
5、pod挂载nfs

apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: nginx-pv-demo
  name: nginx-pv-demo
spec:
  replicas: 2
  selector:
  
要在Kubernetes使用对象存储,可以按照以下步骤进行操作: 1. 首先,安装ossfs工具。可以使用以下命令来安装ossfs工具: yum install ossfs_1.80.6_centos7.0_x86_64.rpm 2. 准备一个yaml文件,可以在其中配置Kubernetes对象存储。可以使用以下命令来下载示例yaml文件: wget http://gosspublic.alicdn.com/ossfs/ossfs_1.80.6_centos7.0_x86_64.rpm 3. 编辑yaml文件,根据实际需求配置对象存储的参数。可以指定对象存储的访问密钥、存储桶名称等信息。 4. 使用kubectl命令部署yaml文件,将对象存储配置应用到Kubernetes集群中。 通过以上步骤,你可以在Kubernetes使用对象存储存储和管理数据。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [k8s架构浅析](https://download.csdn.net/download/weixin_38747818/15448025)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [k8s存储之挂载阿里云oss对象存储](https://blog.csdn.net/K_520_W/article/details/117847698)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值