【k8s配置与存储--持久化存储(HostPath、EmptyDir、NFS)】

1、HostPath 持久化存储

1.1 持久卷 HostPath(节点上的文件或目录挂载到Pod上)

  • 将节点上的文件或目录挂载到Pod上,此时该目录会变成持久化存储目录,即使Pod被删除后重启,也可以重新加载到该目录,该目录下的文件不会丢失。

1.2 配置文件

  • volumes 中如何与node节点主机共享目录时,type类型有多种,如下类型:
    • 空字符串:默认类型,不做任何检查
    • DirectoryOrCreate:如果给定的path不存在,就创建一个755的空目录
    • Directory:这个目录必须存在
    • FileOrCreate:如果给定的文件不存在,则创建一个空文件,权限为644
    • File:这个文件必须存在
    • Socket:UNIX套接字,必须存在
    • CharDevice:字符设备,必须存在
    • BlockDevice:块设备,必须存在
apiVersion: v1
kind: Pod
metadata:name: test-host-volume-pod
spec:containers:- image: nginx:1.20name: nginx-volumevolumeMounts:- mountPath: /data    # 挂载到容器哪个目录name: host-volume    # 挂载的数据卷的名字volumes:- name: host-volumehostPath:   # 与主机共享目录path: /data   # node节点上的目录type: DirectoryOrCreate  #检查类型,在挂数前对挂载目录做什么检查操作,有多种选项,默认为空字符串,不做任何检查

1.3 创建这个pod资源

[root@k8s-master volume]# kubectl create  -f host-volume.yaml
pod/host-volume-pod created[root@k8s-master volume]# kubectl get po  -o wide
NAME                           READY   STATUS              RESTARTS      AGE     IP          NODE          NOMINATED NODE   READINESS GATES
configfile-po                  0/1     Completed           0             178m    10.2.1.69   k8s-node-02   <none>           <none>
dns-test                       1/1     Running             2 (12h ago)   2d21h   10.2.1.58   k8s-node-02   <none>           <none>
fluentd-59k8k                  1/1     Running             1 (12h ago)   2d4h    10.2.2.34   k8s-node-01   <none>           <none>
fluentd-hhtls                  1/1     Running             1 (12h ago)   2d4h    10.2.1.59   k8s-node-02   <none>           <none>
host-volume-pod                0/1     ContainerCreating   0             13s     <none>      k8s-node-02   <none>           <none>
nginx-deploy-6fb8d6548-8khhv   1/1     Running             6 (33m ago)   6h33m   10.2.1.67   k8s-node-02   <none>           <none>
nginx-deploy-6fb8d6548-fd9tx   1/1     Running             6 (33m ago)   6h33m   10.2.2.40   k8s-node-01   <none>           <none>[root@k8s-master volume]# kubectl get po  -o wide
NAME                           READY   STATUS      RESTARTS      AGE     IP          NODE          NOMINATED NODE   READINESS GATES
configfile-po                  0/1     Completed   0             179m    10.2.1.69   k8s-node-02   <none>           <none>
dns-test                       1/1     Running     2 (12h ago)   2d21h   10.2.1.58   k8s-node-02   <none>           <none>
fluentd-59k8k                  1/1     Running     1 (12h ago)   2d4h    10.2.2.34   k8s-node-01   <none>           <none>
fluentd-hhtls                  1/1     Running     1 (12h ago)   2d4h    10.2.1.59   k8s-node-02   <none>           <none>
host-volume-pod                1/1     Running     0             61s     10.2.1.71   k8s-node-02   <none>           <none>
nginx-deploy-6fb8d6548-8khhv   1/1     Running     6 (34m ago)   6h34m   10.2.1.67   k8s-node-02   <none>           <none>
nginx-deploy-6fb8d6548-fd9tx   1/1     Running     6 (34m ago)   6h34m   10.2.2.40   k8s-node-01   <none>           <none>

1.4 在容器中查看这个挂载的数据目录,并且在容器中创建文件

[root@k8s-master volume]# kubectl exec -it host-volume-pod  -- sh -c 'ls -l  /data/'
total 0[root@k8s-master volume]# kubectl exec -it host-volume-pod  -- sh -c 'cd  /data/  && echo "hello kubernetes..." > index.html'

1.5 刚才查到这个pod创建到了k8s-node-02节点上,查看这个文件内容

[root@k8s-node-02 ~]# cd /data/
[root@k8s-node-02 data]# ll
总用量 4
-rw-r--r--. 1 root root 20 227 00:30 index.html
[root@k8s-node-02 data]# cat index.html
hello kubernetes...

2、临时卷 EmptyDir

2.1 EmptyDir 共享多个pod的数据共享,但是数据不能做之久话存储

  • EmptyDir主要用于一个Pod中不同的Container共享致据使用的,由于只是在Pod内部使用,因此与英他volume比较大的区别是,当Pod如果被除了,那么emptyDir也会被除。
  • 存价质可以是任意类型,如SSD、磁盈或网焰存储。可以将emptyDir.medium设置为Memory让k8s使用tmpfs(内存支待文件系统),速度比较快,但是里启tmp形节点时,数据会被清除,且设旦的大小会计入到Container的内存限制中.

2.2 配置文件

apiVersion: v1
kind: Pod
metadata:name: emptydir-volume-pod
spec:containers:- image: alpinename: alpine-volume-01command: ['/bin/sh', '-c', 'sleep 3600;']volumeMounts:- mountPath: /emptydir-1    # 挂载到容器哪个目录name: emptydir-volume    # 挂载的数据卷的名字- image: alpinename: alpine-volume-02command: ['/bin/sh', '-c', 'sleep 3600;']volumeMounts:- mountPath: /emptydir-2    # 挂载到容器哪个目录name: emptydir-volume    # 挂载的数据卷的名字 volumes:- name: emptydir-volumeemptyDir: {}

2.3 创建这个pod资源

[root@k8s-master volume]# kubectl create -f emptydir-volume.yaml
pod/emptydir-volume-pod created
[root@k8s-master volume]#
[root@k8s-master volume]# kubectl get po
NAME                           READY   STATUS              RESTARTS      AGE
configfile-po                  0/1     Completed           0             3h15m
dns-test                       1/1     Running             2 (13h ago)   2d21h
emptydir-volume-pod            0/2     ContainerCreating   0             5s
fluentd-59k8k                  1/1     Running             1 (13h ago)   2d4h
fluentd-hhtls                  1/1     Running             1 (13h ago)   2d4h
host-volume-pod                1/1     Running             0             17m
nginx-deploy-6fb8d6548-8khhv   1/1     Running             6 (50m ago)   6h50m
nginx-deploy-6fb8d6548-fd9tx   1/1     Running             6 (50m ago)   6h50m
[root@k8s-master volume]# kubectl get po
NAME                           READY   STATUS      RESTARTS      AGE
configfile-po                  0/1     Completed   0             3h17m
dns-test                       1/1     Running     2 (13h ago)   2d22h
emptydir-volume-pod            2/2     Running     0             81s
fluentd-59k8k                  1/1     Running     1 (13h ago)   2d4h
fluentd-hhtls                  1/1     Running     1 (13h ago)   2d4h
host-volume-pod                1/1     Running     0             18m
nginx-deploy-6fb8d6548-8khhv   1/1     Running     6 (51m ago)   6h52m
nginx-deploy-6fb8d6548-fd9tx   1/1     Running     6 (51m ago)   6h52m

2.4 emptydir 共享数据测试

2.4.1 在 alpine-volume-01 容器内创建文件

[root@k8s-master volume]# kubectl exec -it emptydir-volume-pod  -c  alpine-volume-01 -- sh  -c 'cd  /emptydir-1  &&  touch  test.log '

2.4.2 在 alpine-volume-02 容器内查看这个文件

[root@k8s-master volume]# kubectl exec -it emptydir-volume-pod  -c  alpine-volume-02 -- sh  -c 'cd  /emptydir-2  &&  ls -l '
total 0
-rw-r--r--    1 root     root             0 Feb 26 16:48 test.log

2.4.3 在 alpine-volume-02 容器内创建文件

[root@k8s-master volume]# kubectl exec -it emptydir-volume-pod  -c  alpine-volume-02 -- sh  -c 'cd  /emptydir-2  &&  touch aaa.txt  '

2.4.4 在 alpine-volume-01 容器内查看文件


[root@k8s-master volume]# kubectl exec -it emptydir-volume-pod  -c  alpine-volume-01 -- sh  -c 'cd  /emptydir-1  &&  ls -l '
total 0
-rw-r--r--    1 root     root             0 Feb 26 16:50 aaa.txt
-rw-r--r--    1 root     root             0 Feb 26 16:48 test.log

3、NFS(网络文件系统)持久化存储

  • nfs卷能将NFS(网络文件系统挂载到你的Pod中。不像emptyDir那样会在删除Pod的同时也会被除,nfs卷的内容在删除Pod时会被保存,卷只是被卸载。这意味着fs卷可以被预先填充数据,并且这些数据可以在Pod之间共享

3.1 安装nfs服务

3.1.1 k8s 3台节点都安装nfs服务

yum install -y nfs-utils

3.1.2 节点都启动nfs服务

systemctl start nfs

3.1.3 在master节点创建nfs的共享目录

mkdir -p  /data/nfs/{ro,rw} 

3.1.4 设置共享目录

echo "/data/nfs/rw 10.10.10.0/24(rw,sync,no_subtree_check,no_root_squash)"  >> /etc/exportsecho  "/data/nfs/ro 10.10.10.0/24(ro,sync,no_subtree_check,no_root_squash)"  >> /etc/exports 

3.1.5 重新加载配置并重启nfs服务

exportfs -fsystemctl restart nfs

3.1.6 挂载nfs共享目录

[root@k8s-node-01 ~]# mkdir -p /data/nfs/{ro,rw}
[root@k8s-node-01 ~]# mount -t nfs 10.10.10.100:/data/nfs/rw     /data/nfs/rw/
[root@k8s-node-01 ~]# mount -t nfs 10.10.10.100:/data/nfs/ro     /data/nfs/ro/

3.1.7 测试挂载目录是否成功

master 上在ro目录创建一个文件

[root@k8s-master ~]# cd /data/nfs/ro/
[root@k8s-master ro]# echo  "这是一个只读目录"  >  Readme.md
[root@k8s-master ro]# ll
总用量 4
-rw-r--r--. 1 root root 25 227 01:39 Readme.md

在node-01节点上查看这个ro目录中的文件内容,并且确认是否可写

[root@k8s-node-01 ~]# cd /data/nfs/ro
[root@k8s-node-01 ro]# ll
总用量 4
-rw-r--r--. 1 root root 25 227 01:39 Readme.md
[root@k8s-node-01 ro]# cat Readme.md
这是一个只读目录
[root@k8s-node-01 ro]# touch node.md
touch: 无法创建"node.md": 只读文件系统

在node-01节点上rw目录创建一个文件

[root@k8s-node-01 ro]# cd ../rw/
[root@k8s-node-01 rw]# echo "这个是可读可写目录"  > Readme.md
[root@k8s-node-01 rw]#

我们在master节点上看是否有这个文件

[root@k8s-master ro]# cd ../rw/
[root@k8s-master rw]# cat Readme.md
这个是可读可写目录

3.2 创建配置文件

apiVersion: v1
kind: Pod
metadata:name: nfs-volume-pod 
spec:containers:- image: nginx:1.20name: nfs-nginxcommand: ['/bin/sh', '-c', 'sleep 3600;']volumeMounts:- mountPath: /usr/share/nginx/html   # 挂载到容器哪个目录name: nfs-volume    # 挂载的数据卷的名字volumes:- name: nfs-volumenfs:server: "10.10.10.100"path: "/data/nfs/rw"readOnly: false 

3.3 提前在rw目录中创建一个index.html文件

[root@k8s-master ~]# echo "k8s-master: 10.10.10.100  "  > /data/nfs/rw/index.html

3.4 创建pod

[root@k8s-master nfs]# kubectl create  -f nfs-volume.yaml
pod/nfs-volume-pod-1 created[root@k8s-master nfs]# kubectl get po  -owide
NAME                           READY   STATUS      RESTARTS        AGE     IP          NODE          NOMINATED NODE   READINESS GATES
configfile-po                  0/1     Completed   0               4h30m   10.2.1.69   k8s-node-02   <none>           <none>
dns-test                       1/1     Running     2 (14h ago)     2d23h   10.2.1.58   k8s-node-02   <none>           <none>
emptydir-volume-pod            2/2     Running     2 (14m ago)     74m     10.2.1.72   k8s-node-02   <none>           <none>
fluentd-59k8k                  1/1     Running     1 (14h ago)     2d5h    10.2.2.34   k8s-node-01   <none>           <none>
fluentd-hhtls                  1/1     Running     1 (14h ago)     2d5h    10.2.1.59   k8s-node-02   <none>           <none>
host-volume-pod                1/1     Running     0               92m     10.2.1.71   k8s-node-02   <none>           <none>
nfs-volume-pod-1               1/1     Running     0               64s     10.2.2.41   k8s-node-01   <none>           <none>
nginx-deploy-6fb8d6548-8khhv   1/1     Running     8 (5m27s ago)   8h      10.2.1.67   k8s-node-02   <none>           <none>
nginx-deploy-6fb8d6548-fd9tx   1/1     Running     8 (5m26s ago)   8h      10.2.2.40   k8s-node-01   <none>           <none>

3.5 使用curl访问这个nginx服务

刚才我创建的index.html文件在访问nginx的时候生效,也就是说通过nfs网络挂成功。

[root@k8s-master nfs]# curl 10.2.2.41
k8s-master: 10.10.10.100

3.6 使用配置文件再创建一个pod,需要修改pod名字

[root@k8s-master nfs]# kubectl create -f nfs-volume2.yaml
pod/nfs-volume-pod-2 created
[root@k8s-master nfs]# kubectl get po
NAME                           READY   STATUS      RESTARTS      AGE
configfile-po                  0/1     Completed   0             4h36m
dns-test                       1/1     Running     2 (14h ago)   2d23h
emptydir-volume-pod            2/2     Running     2 (19m ago)   80m
fluentd-59k8k                  1/1     Running     1 (14h ago)   2d5h
fluentd-hhtls                  1/1     Running     1 (14h ago)   2d5h
host-volume-pod                1/1     Running     0             97m
nfs-volume-pod-1               1/1     Running     0             6m19s
nfs-volume-pod-2               1/1     Running     0             6s
nginx-deploy-6fb8d6548-8khhv   1/1     Running     8 (10m ago)   8h
nginx-deploy-6fb8d6548-fd9tx   1/1     Running     8 (10m ago)   8h
[root@k8s-master nfs]# kubectl get po  -o wide
NAME                           READY   STATUS      RESTARTS      AGE     IP          NODE          NOMINATED NODE   READINESS GATES
configfile-po                  0/1     Completed   0             4h36m   10.2.1.69   k8s-node-02   <none>           <none>
dns-test                       1/1     Running     2 (14h ago)   2d23h   10.2.1.58   k8s-node-02   <none>           <none>
emptydir-volume-pod            2/2     Running     2 (19m ago)   80m     10.2.1.72   k8s-node-02   <none>           <none>
fluentd-59k8k                  1/1     Running     1 (14h ago)   2d5h    10.2.2.34   k8s-node-01   <none>           <none>
fluentd-hhtls                  1/1     Running     1 (14h ago)   2d5h    10.2.1.59   k8s-node-02   <none>           <none>
host-volume-pod                1/1     Running     0             97m     10.2.1.71   k8s-node-02   <none>           <none>
nfs-volume-pod-1               1/1     Running     0             6m25s   10.2.2.41   k8s-node-01   <none>           <none>
nfs-volume-pod-2               1/1     Running     0             12s     10.2.2.42   k8s-node-01   <none>           <none>
nginx-deploy-6fb8d6548-8khhv   1/1     Running     8 (10m ago)   8h      10.2.1.67   k8s-node-02   <none>           <none>
nginx-deploy-6fb8d6548-fd9tx   1/1     Running     8 (10m ago)   8h      10.2.2.40   k8s-node-01   <none>           <none>

3.7 访问这个新的pod上的nginx服务

[root@k8s-master nfs]# curl 10.2.2.42
k8s-master: 10.10.10.100

3.8 小结

通过刚才创建的两个nginx-pod资源,我们使用nfs共享目录到两个pod中,通过访问nginx服务,可以看到两个pod资源显示的结果都是一致的。

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

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

相关文章

vue-router4 (三) 路由导航的2种方法

const routes:Array<RouteRecordRaw> [{path:"/", //路径name:"Login", //路由名称component:()>import("../components/login.vue") //组件名&#xff0c;此处懒加载方式},{path:"/reg",name:"Reg",compone…

Vue 3, TypeScript 和 Element UI Plus:前端开发的高级技巧与最佳实践

Vue 3、TypeScript 和 Element UI Plus 结合使用时&#xff0c;可以提供一个强大且灵活的前端开发环境。以下是一些高级用法和技巧&#xff0c;帮助你更有效地使用这些技术&#xff1a; 1. Vue 3 高级特性 Composition API 使用 setup 函数: Vue 3 引入了 Composition API&am…

【CSS常见的选择器】介绍

CSS常见的选择器 CSS CSS CSS (Cascading Style Sheets)用于定义网页样式&#xff0c;包括字体、颜色、布局等&#xff0c;在CSS中&#xff0c;选择器用于指定哪些元素将被应用样式&#xff0c;以下是一些常见的CSS选择器&#xff1a; 元素选择器&#xff08;Type Selector&am…

数据结构(C语言)代码实现(十)——链队列循环队列

目录 参考资料 链队列的实现 LinkQueue.h LinkQueue.cpp 测试函数test.cpp 测试结果 循环队列的实现&#xff08;最小操作子集&#xff09; 完整代码 测试结果 参考资料 数据结构严蔚敏版 链队列的实现 LinkQueue.h #pragma once #include <cstdio> #incl…

Vue自定义指令directives

1. 使用<script setup> <template><input v-focus"11111" /><input v-obj"{ id: 1, name: 这里是name }" /> </template> <script setup> //定义一个变量vFocus //命名方法使得DOM元素中可以用v-focus来显示 let vFo…

uniapp:使用DCloud的uni-push推送消息通知(在线模式)java实现

uniapp:使用DCloud的uni-push推送消息通知&#xff08;在线模式&#xff09;java实现 1.背景 今天开发app的时候遇到一个需求&#xff1a; 业务在出发特定条件的时候向对应的客户端推送消息通知。 为什么选择在线模式&#xff0c;因为我们使用的是德邦类似的手持终端&#xf…

干货!教你如何从柏曼/书客/明基中挑选最好用的护眼台灯

又到了一年一度的开学季&#xff0c;家中神兽又回到知识的海洋遨游&#xff0c;家长在得到自由的同时又不禁开始担心孩子的视力健康问题&#xff0c;毕竟繁重的学习生活用眼负担也不小&#xff0c;在听闻市面上有护眼台灯之后也纷纷想入手选购一台给孩子&#xff0c;毕竟这是打…

死区过滤器Deadband和DeadZone区别(应用介绍)

死区过滤器的算法和详细介绍专栏也有介绍,这里我们主要对这两个模块的区别和应用场景进行详细介绍 1、死区过滤器 https://rxxw-control.blog.csdn.net/article/details/128521007https://rxxw-control.blog.csdn.net/article/details/128521007 1、Deadband和DeadZone区别…

天一个数据分析题(一百七十三)

聚类算法的主要应用场景是用户分群&#xff0c;聚类是一种无监督方法&#xff0c;以下哪个不是衡量聚类效果好坏的评估方法&#xff08;&#xff09;。 A. 轮廓系数 B. 平方根标准误差 C. ARI(调整的兰德系数) D. 相关系数 题目来源于CDA模拟题库 点击此处获取答案

人大金仓数据库Kingbase服务SQL基础操作手册

1 kingbase服务 1.1 查看kingbase数据库服务进程 ps -ef|grep kingbase1.2 命令启动kingbase数据库服务 # /opt/Kingbase/ES/V8 为金仓安装目录 # /opt/Kingbase/ES/V8/data 为金仓数据目录 # sys_ctl是数据库服务器启停命令&#xff0c;通过-D选项来来指定数据库数据目录 #…

【算法 - 动态规划】找零钱问题Ⅲ

在前面的动态规划系列文章中&#xff0c;关于如何对递归进行分析的四种基本模型都介绍完了&#xff0c;再来回顾一下&#xff1a; 从左到右模型 &#xff1a;arr[index ...] 从 index 之前的不用考虑&#xff0c;只考虑后面的该如何选择 。范围尝试模型 &#xff1a;思考 [L ,…

美国硅谷云服务器租用注意事项

随着信息技术的飞速发展&#xff0c;云服务器已成为众多企业和个人用户首选的IT基础设施。美国硅谷作为全球科技创新的摇篮&#xff0c;其云服务器市场也备受关注。然而&#xff0c;在租用硅谷云服务器时&#xff0c;用户需要注意以下几个方面&#xff0c;以确保获得优质、稳定…

最小的图片有什么用

你知道最小的图片大小是多大么&#xff1f;比如最小的 GIF 格式图片&#xff0c;仅有 35 bytes&#xff0c;面积是 1 1 px。 这么小的图片可能只能表达一个像素&#xff0c;这有什么意义呢&#xff1f; 在互联网早起&#xff0c;也就是静态网页居多&#xff0c;还在使用html…

RabbitMQ开启TLS支持,解决AMQP明文身份验证漏洞

随着网络通信安全性的日益重要&#xff0c;我们不难发现&#xff0c;在企业级应用中&#xff0c;数据传输的安全防护措施已经成为不可或缺的一环。近期&#xff0c;不少使用RabbitMQ的开发团队收到了关于“远程主机允许明文身份验证”的漏洞警告。为确保敏感信息的安全传递&…

4核8G服务器选阿里云还是腾讯云?价格性能对比

4核8G云服务器多少钱一年&#xff1f;阿里云ECS服务器u1价格955.58元一年&#xff0c;腾讯云轻量4核8G12M带宽价格是646元15个月&#xff0c;阿腾云atengyun.com整理4核8G云服务器价格表&#xff0c;包括一年费用和1个月收费明细&#xff1a; 云服务器4核8G配置收费价格 阿里…

新加坡服务器托管:开启全球化发展之门

新加坡作为一个小国家&#xff0c;却在全球范围内享有极高的声誉。新加坡作为亚洲的科技中心&#xff0c;拥有先进的通信基础设施和成熟的机房托管市场。除了其独特的地理位置和发达的经济体系外&#xff0c;新加坡还以其开放的商业环境和便利的托管服务吸引着越来越多的国际公…

C#之WPF学习之路(6)

目录 内容控件&#xff08;3&#xff09; GroupBox标题容器控件 ScrollViewer控件 ScrollBar滚动条 Slider滑动条 ProgressBar进度条 Calendar日历控件 DatePicker日期控件 Expander折叠控件 MediaElement媒体播放器 内容控件&#xff08;3&#xff09; GroupBox标题…

在两台CentOS 7服务器上部署MinIO集群---准确

环境说明&#xff1a; 2台Centos7服务器 IP地址分别为172.16.1.9和172.16.1.10 1. 创建minio用户和目录 在两台服务器上执行以下命令&#xff1a; sudo useradd -m -d /app/minio minio sudo mkdir -p /app/minioData sudo mkdir -p /app/minio/logs sudo chown -R mini…

2024年2月26日-3月3日(全面进行+收集免费虚幻商城资源,)

依旧按照月计划进行。 周一&#xff1a; 18&#xff1a;40–19:50,测量学基础&#xff08;4.1&#xff09;&#xff0c;数字图像处理3.4&#xff0c; 周二&#xff1a; 6&#xff1b;00-8&#xff1a;50测量学基础&#xff08;4.1&#xff09;&#xff0c;数字图像处理3.5&…

解析数据挖掘:发掘数据中的宝藏

数据挖掘作为一种从大规模数据中发现模式、规律和知识的技术和方法&#xff0c;已经在各个领域展现了强大的应用价值。本文将从数据挖掘的定义、流程、常用算法以及应用场景等方面进行科普介绍&#xff0c;帮助读者深入了解数据挖掘的概念及其在实际应用中的重要作用。 1. 数据…