三十八、Kubernetes1.25中数据存储第二篇

news2024/11/15 14:02:54

1、概述

在前面已经提到,容器的生命周期可能很短,会被频繁地创建和销毁。那么容器在销毁时,保存在容器中的数据也会被清除。这种结果对用户来说,在某些情况下是不乐意看到的。为了持久化保存容器的数据,kubernetes引入了Volume的概念。

Volume是Pod中能够被多个容器访问的共享目录,它被定义在Pod上,然后被一个Pod里的多个容器挂载到具体的文件目录下,kubernetes通过Volume实现同一个Pod中不同容器之间的数据共享以及数据的持久化存储。Volume的生命容器不与Pod中单个容器的生命周期相关,当容器终止或者重启时,Volume中的数据也不会丢失。

kubernetes的Volume支持多种类型,比较常见的有下面几个:

  • 基本存储:EmptyDir、HostPath、NFS

  • 高级存储:PV、PVC

  • 配置存储:ConfigMap、Secret

在上篇文章中,我们讲解了EmptyDir、HostPath是什么,怎么用,这篇文章我们继续讲解NFS

2、NFS

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

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

2.1、首先要准备nfs的服务器,这里为了简单,直接是master节点做nfs服务器

# 在master上安装nfs
[root@k8s-master ~]# yum install nfs-utils -y

#准备一个共享目录
[root@k8s-master ~]# mkdir /root/data/nfs -pv
mkdir: 已创建目录 "/root/data"
mkdir: 已创建目录 "/root/data/nfs"

# 查看所有节点IP
[root@k8s-master ~]# kubectl get nodes -owide
NAME         STATUS   ROLES           AGE   VERSION   INTERNAL-IP     EXTERNAL-IP   OS-IMAGE                    KERNEL-VERSION                    CONTAINER-RUNTIME
k8s-master   Ready    control-plane   18d   v1.25.0   192.168.8.120   <none>        CentOS Linux 7 (Core)       3.10.0-1160.76.1.el7.x86_64       docker://20.10.22
k8s-node1    Ready    <none>          18d   v1.25.0   192.168.8.125   <none>        AlmaLinux 8.6 (Sky Tiger)   4.18.0-372.9.1.el8.x86_64         docker://20.10.22
k8s-node2    Ready    <none>          18d   v1.25.0   192.168.13.63   <none>        Oracle Linux Server 7.9     5.4.17-2102.201.3.el7uek.x86_64   docker://20.10.22

# 将共享目录以读写权限暴露给所有非master k8s节点 
[root@nfs ~]# vim /etc/exports
# 我本地只有两个非master节点 
[root@nfs ~]# more /etc/exports
/root/data/nfs     192.168.13.63(rw,no_root_squash)
/root/data/nfs     192.168.8.125(rw,no_root_squash)

# 启动nfs服务 
[root@k8s-master ~]# systemctl restart nfs
# 注意如果此处报 Failed to start nfs.service: Unit nfs.service not found. 则更改以下下命令
[root@k8s-master ~]# systemctl start nfs-server

2.2、在的每个node节点上都安装下nfs,这样的目的是为了node节点可以驱动nfs设备

# 在node上安装nfs服务,注意不需要启动
[root@k8s-node2 ~]# yum install nfs-utils -y
[root@k8s-node1 ~]# yum install nfs-utils -y

2.3、编写pod的配置文件了,创建volume-nfs.yaml

apiVersion: v1
kind: Pod
metadata:
  name: volume-nfs
  namespace: dev
spec:
  containers:
  - name: nginx
    image: nginx
    ports:
    - containerPort: 80
    volumeMounts:
    - name: logs-volume
      mountPath: /var/log/nginx
  - name: busybox
    image: busybox:1.30
    command: ["/bin/sh","-c","tail -f /logs/access.log"] 
    volumeMounts:
    - name: logs-volume
      mountPath: /logs
  volumes:
  - name: logs-volume
    nfs:
      server: 192.168.8.120  #nfs服务器地址
      path: /root/data/nfs #共享文件路径

2.4、运行下pod,观察结果

# 创建
[root@k8s-master ~]# kubectl apply -f volume-nfs.yaml
pod/volume-nfs created

# 查看pod详情 发现pod运行在k8s-node2 节点上
[root@k8s-master ~]# kubectl get pod -n dev -owide
NAME         READY   STATUS    RESTARTS   AGE   IP               NODE        NOMINATED NODE   READINESS GATES
volume-nfs   2/2     Running   0          45s   172.17.169.172   k8s-node2   <none>           <none>
[root@k8s-master ~]#
# 访问nginx
[root@k8s-master ~]# curl 172.17.169.172
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
html { color-scheme: light dark; }
body { width: 35em; margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif; }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>

<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>

<p><em>Thank you for using nginx.</em></p>
</body>
</html>

# 通过kubectl logs  查看日志
[root@k8s-master ~]# kubectl logs -f volume-nfs -n dev -c busybox
192.168.13.63 - - [07/Jan/2023:03:31:07 +0000] "GET / HTTP/1.1" 200 615 "-" "curl/7.29.0" "-"

# 查看日志已持久化在master节点的 nfs共享目录上, pod运行在k8s-node2 节点上 但是数据却存储在master节点上
[root@k8s-master ~]# cd /root/data/nfs/
[root@k8s-master nfs]# ls
access.log  error.log

本篇文章先到此处,下一篇我们继续讲解高级存储

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/190510.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

行为型模式 - 状态模式State

状态模式的定义与特点 状态&#xff08;State&#xff09;模式的定义&#xff1a;对有状态的对象&#xff0c;把复杂的“判断逻辑”提取到不同的状态对象中&#xff0c;允许状态对象在其内部状态发生改变时改变其行为。 状态模式是一种对象行为型模式&#xff0c;其主要优点…

Oracle用户权限管理

一、运行企业管理器 管理员身份运行客户端的企业管理器 首次打开需要添加数据库信息&#xff0c;这里使用已经存在的数据库orcl 使用系统用户登录 用户名&#xff1a;system&#xff0c;口令orcl 或者不输入使用SYSDBA登录 可以查看所有用户的详细信息: 用户名, 账户状态,…

union和union all 的区别

1&#xff1a;union用于合并两个或多个select 语句的结果集。 注意&#xff1a; 1&#xff1a;union内部的select 语句必需拥有相同数量的列&#xff0c;列也夜必须拥有相似的数据类型&#xff0c;同时每条select 语句中的列的顺序必须相同。 2&#xff1a;union结果集中的列…

JVM垃圾回收与性能调优策略

一、JVM内存模型及垃圾收集算法 1.根据Java虚拟机规范&#xff0c;JVM将内存划分为&#xff1a; New&#xff08;年轻代&#xff09; Tenured&#xff08;年老代&#xff09; 永久代&#xff08;Perm&#xff09; 其中New和Tenured属于堆内存&#xff0c;堆内存会从JVM启动参…

项目代码版本控制与保护

一、版本命名规则 1.1 需求开发分支命名规则 格式&#xff1a;dev_v版本号_需求名称 案例&#xff1a;dev_v01.31_TX202301141 dev_v01.31_数字产品平台订单查询优化 1.2 测试环境发布分支命名规则 格式&#xff1a;uat_deploy 1.3 预上环境分支命名规则 格式&#xff1a…

Apsara Clouder云计算专项技能认证:云服务器ECS入门

文章目录 一、什么是云服务器ECS二、如何获取一台云服务器ECS三、5分钟学会管理云服务器ECS四、【实验】ECS云服务器新手上路五、【实验】基于ECS搭建云上博客入口: https://edu.aliyun.com/certification/cldc15 一、什么是云服务器ECS

8K超高清企业获广东省专精特新称号,背后意味着什么?

2023年开年之际&#xff0c;广州博冠光电科技股份有限公司及其子公司广州博冠智能科技有限公司通过“2022年广东省专精特新中小企业”和“2022年广东省名优高新技术产品”2项权威认定荣誉。广东省“专精特新”认定是什么&#xff1f;“专精特新”是指中小企业具备专业化、精细化…

github入门指南

文章目录什么是开源开源项目托管平台github使用介绍什么是github使用github&#xff08;1&#xff09;注册&#xff08;2&#xff09;创建远程仓库&#xff08;3&#xff09;github功能介绍本地创建仓库与远程仓库进行关联什么是开源 开源&#xff0c;即开放源代码&#xff0c…

呆头鹅批量剪辑视频软件:玩的就是裂变,剪辑需求者的终身助理

文案来自于公众号&#xff1a;生财风暴 图片来自于公众号&#xff1a;生财风暴 随着5G时代到来&#xff0c;短视频&#xff0c;电商&#xff0c;自媒体等平台全面崛起&#xff0c;目前影视制作行业前景的9字真言: 需求大&#xff01;门槛低&#xff01;薪资高&#xff01; 呆头…

迟来的年度总结 —— 我与 csdn 的故事

&#x1f451;作者主页&#xff1a;安 度 因 &#x1f3e0;学习社区&#xff1a;StackFrame &#x1f4d6;专栏链接&#xff1a;我的故事 文章目录引子我的大一我与 csdn 的相识第一次创作喜悦 —— 干劲满满挫败 —— 厚积薄发意外 —— 收获果实博客新星陪伴社区与StackFrame…

修改 bootargs 方式增加分区(mtd分区和blkdevparts分区)

1、Linux内核设置分区的两种方式 1.1、内核代码中写死 在内核的平台代码中写死&#xff0c;然后在初始化NandFlash的时候设置。 1.2、uboot通过bootargs传递分区表 (1)u-boot将分区信息&#xff08;形如&#xff1a;mtdpartsxxx&#xff0c;blkdevpartsxxx&#xff09;添加到b…

​力扣解法汇总2325. 解密消息

目录链接&#xff1a; 力扣编程题-解法汇总_分享记录-CSDN博客 GitHub同步刷题项目&#xff1a; https://github.com/September26/java-algorithms 原题链接&#xff1a;力扣 描述&#xff1a; 给你字符串 key 和 message &#xff0c;分别表示一个加密密钥和一段加密消息。…

FastDeploy全场景高性能AI部署工具:加速打通AI模型产业落地的最后一公里

飞桨目前为开发者提供了涵盖多种领域的模型套件&#xff0c;开发者可以使用这些套件基于自身数据集快速完成深度学习模型的训练。但在实际产业部署环境下&#xff0c;开发者在部署模型到不同硬件和不同场景时面临以下三个痛点问题。 碎片化。在部署过程中&#xff0c;由于深度学…

投资中的不可能三角

投资中避不开这个不可能三角&#xff01; 而这“三个角”指的是高收益、低风险、高流动性&#xff0c;“不可能三角”则指的是“三角”难以同时满足。 因为这三角的关系是相互制衡的&#xff01; ①若要追求较低风险条件下的较高收益&#xff0c;需要以时间换取空间&#xff0…

认识现有的频谱监测方案

摘要随着频谱监测行业的不断发展&#xff0c;频谱仪已经不仅局限于频谱监测与获取&#xff0c;随着5G的逐渐普及&#xff0c;在垂直领域的各种应用中都有其价值。针对不同的应用场景与行业&#xff0c;现有的市场上主要存在三种频谱监测方案&#xff0c;我们将在本文中进行总结…

【AI-NLP】Transformer浅记

文章目录提出背景总体结构EncoderDecoder细节再探源码阅读主函数部分主模型定义参考资料提出背景 改进了RNN的训练慢的缺点&#xff0c;利用self-attention机制实现并行计算。并且Transformer可以增加到非常深的深度&#xff0c;充分发掘DNN模型的特性&#xff0c;提升模型准确…

2022 IoTDB Summit:中冶赛迪工业互联网平台与CISDigital-TimeS(基于IoTDB)在钢铁行业的实践...

12 月 3 日、4日&#xff0c;2022 Apache IoTDB 物联网生态大会在线上圆满落幕。大会上发布 Apache IoTDB 的分布式 1.0 版本&#xff0c;并分享 Apache IoTDB 实现的数据管理技术与物联网场景实践案例&#xff0c;深入探讨了 Apache IoTDB 与物联网企业如何共建活跃生态&#…

即时通讯开发之详解TCP/IP中的DNS 域名系统

前面已经提到了访问一台机器要靠 IP 地址和 MAC 地址,其中,MAC 地址可以通过 ARP 协议得到,所以这对用户是透明的,但是 IP 地址就不行,无论如何用户都需要用一个指定的 IP 来访问一台计算机,而 IP 地址又非常不好记,于是就出现了 DNS 系统。DNS 系统介绍DNS 的全称是 Domain Na…

MYSQL作业

MySQL 作业一、填空题 1、交叉连接查询返回的结果是被连接的两张数据表中所有数据行的_笛卡尔积___ 。2、左连接查询的结果包括 LEFT JOIN 子句中左表的_所有记录___&#xff0c;以及右表中满足连接条件的记录。3、内连接查询的语法中&#xff0c;ON 用于指定查询的__匹配条件_…