首页 > 其他分享 >关于k8s集群的存储卷

关于k8s集群的存储卷

时间:2024-08-10 12:27:46浏览次数:13  
标签:存储 name vol yaml 集群 nfs Pod k8s tan

目录

1.emptyDir存储卷

2.hostPath存储卷

3.nfs共享存储卷


容器磁盘上的文件的生命周期是短暂的,这就使得在容器中运行重要应用时会出现一些问题。首先,当容器崩溃时,kubelet 会重启它,但是容器中的文件将丢失——容器以干净的状态(镜像最初的状态)重新启动。其次,在Pod中同时运行多个容器时,这些容器之间通常需要共享文件。Kubernetes 中的Volume抽象就很好的解决了这些问题。Pod中的容器通过Pause容器共享Volume。

1.emptyDir存储卷

容器之间共享数据无持久化

当Pod被分配给节点时,首先创建emptyDir卷,并且只要该Pod在该节点上运行,该卷就会存在。正如卷的名字所述,它最初是空的。Pod 中的容器可以读取和写入emptyDir卷中的相同文件,尽管该卷可以挂载到每个容器中的相同或不同路径上。当出于任何原因从节点中删除 Pod 时,emptyDir中的数据将被永久删除。

示例:

vim pod.yaml
apiVersion: v1
kind: Pod
metadata:
  creationTimestamp: null
  labels:
    run: demo.pod
  name: demo.pod
spec:                      
  volumes:                    #定义一个存储卷
  - name: tan-vol             #定义存储卷名字
    emptyDir: {}
  containers:
  - image: soscscs/myapp:v1
    name: myapp
    ports:
    - containerPort: 80
    resources: {}
    volumeMounts:
    - name: tan-vol
      mountPath: /mnt/
  - image: busybox:1.28
    name: busybox
    volumeMounts:             #设置挂载数据卷
    - name: tan-vol           #设置挂载数据卷名字
      mountPath: /data/       #设置挂载目录(容器内)
    command:                  #设置操作命令
    - sh
    - -c
    - "while true; do echo '123' >> /data/scj.txt; sleep 2; done"

  dnsPolicy: ClusterFirst
  restartPolicy: Always
status: {}

kubectl apply -f pod.yaml


验证数据持久化:

apiVersion: v1
kind: Pod
metadata:
  creationTimestamp: null
  labels:
    run: demo.pod
  name: demo.pod
spec:
  volumes:
  - name: tan-vol
    emptyDir: {}
  containers:
  - image: soscscs/myapp:v1
    name: myapp
    ports:
    - containerPort: 80
    resources: {}
    volumeMounts:
    - name: tan-vol
      mountPath: /mnt/
  - image: busybox:1.28
    name: busybox
    volumeMounts:
    - name: tan-vol
      mountPath: /data/
    command:
    - sh
    - -c
    - "while true; do echo '456' >> /data/scj.txt; sleep 2; done"     #修改内容重新生成

  dnsPolicy: ClusterFirst
  restartPolicy: Always
status: {}


kubectl delete -f pod.yaml && kubectl apply -f pod.yaml   #更新数据

2.hostPath存储卷

挂载宿主机文件/目录,实现数据共享,只能在单机上实现持久化

hostPath卷将 node 节点的文件系统中的文件或目录挂载到集群中。
hostPath可以实现持久存储,但是在node节点故障时,也会导致数据的丢失。

示例:

vim demo3.yaml
apiVersion: v1
kind: Pod
metadata:
  labels:
    run: demo3
  name: demo3
spec:
  volumes:
  - name: tan-vol
    hostPath:
      path: /opt/tan
      type: DirectoryOrCreate
  containers:
  - image: soscscs/myapp:v1
    name: demo
    ports:
    - containerPort: 80
    resources: {}
    volumeMounts:
    - name: tan-vol
      mountPath: /usr/share/nginx/html
      readOnly: false
  dnsPolicy: ClusterFirst
  restartPolicy: Always
status: {}
 
kubectl apply -f demo3.yaml 



测试不同节点数据是否能共享

vim demo3.yaml 
apiVersion: v1
kind: Pod
metadata:
  labels:
    run: demo3
  name: demo4               #修改资源名
spec:
  nodeName: node01          #指定node节点创建资源
  volumes:
  - name: tan-vol
    hostPath:
      path: /opt/tan
      type: DirectoryOrCreate
  containers:
  - image: soscscs/myapp:v1
    name: demo
    ports:
    - containerPort: 80
    resources: {}
    volumeMounts:
    - name: tan-vol
      mountPath: /usr/share/nginx/html
      readOnly: false
  dnsPolicy: ClusterFirst
  restartPolicy: Always
status: {}

kubectl apply -f demo3.yaml

3.nfs共享存储卷

跨node节点的Pod共享数据

配置nfs,任选一台服务器

systemctl disable --now firewalld.service
setenforce 0

yum install -y rpcbind nfs-utils
systemctl enable --now rpcbind nfs
mkdir /opt/nfs  #创建共享目录
vim /etc/exports
/opt/nfs 192.168.9.0/24(rw,sync,no_root_squash)

exportfs -avr   #共享
     

确保两台node节点的rpcbind是开启状态

vim demo4.yaml
apiVersion: v1
kind: Pod
metadata:
  labels:
    run: demo4
  name: demo4
spec:
  volumes:                            #定义一个存储卷
  - name: tc-vol                      #定义存储卷名字
    nfs:                              #存储卷类型为nfs
      path: /opt/nfs                  #NFS服务器上的共享目录路径
      server: 192.168.9.116           #NFS服务器的IP地址
  containers:
  - image: soscscs/myapp:v1
    name: demo
    ports:
    - containerPort: 80
    resources: {}
    volumeMounts:                    #存储卷挂载
    - name: tc-vol                   #挂载的存储卷
      mountPath: /mnt                #存储卷挂载目录
  dnsPolicy: ClusterFirst
  restartPolicy: Always
status: {}

kubectl apply -f demo4.yaml


实现跨节点通信

vim demo4.yaml 
apiVersion: v1
kind: Pod
metadata:
  labels:
    run: demo4
  name: demo5
spec:
  nodeName: node01            #指定节点创建
  volumes:
  - name: tc-vol
    nfs:
      path: /opt/nfs
      server: 192.168.9.116
  containers:
  - image: soscscs/myapp:v1
    name: demo
    ports:
    - containerPort: 80
    resources: {}
    volumeMounts:
    - name: tc-vol
      mountPath: /mnt
  dnsPolicy: ClusterFirst
  restartPolicy: Always
status: {}

kubectl apply -f demo4.yaml

标签:存储,name,vol,yaml,集群,nfs,Pod,k8s,tan
From: https://blog.csdn.net/2402_83805984/article/details/141024867

相关文章

  • GitLab 之 Git LFS 大文件存储的配置
    参考https://cloud.tencent.com/developer/article/1010589LFS介绍Git大文件存储(LargeFileStorage,简称LFS)目的是更好地把大型二进制文件,比如音频文件、数据集、图像和视频等集成到Git的工作流中。我们知道,Git存储二进制效率不高,因为它会压缩并存储二进制文件的所有完整......
  • 测试人必会 K8S 操作之 Dashboard
    在云计算和微服务架构的时代,Kubernetes(K8S)已成为管理容器化应用的标准。然而,对于许多新手来说,K8S的操作和管理常常显得复杂而神秘。特别是,当你第一次接触 K8SDashboard 时,你是否也感到有些无所适从?K8SDashboard是Kubernetes提供的一种用户友好的图形界面工具......
  • MySQL--读写分离与分布式存储
    前言:本博客仅作记录学习使用,部分图片出自网络,如有侵犯您的权益,请联系删除一、读写分离1、什么是读写分离在数据库集群架构中,让主库负责处理写入操作,而从库只负责处理select查询,让两者分工明确达到提高数据库整体读写性能。当然,主数据库另外一个功能就是负责将数据变更同......
  • 浮点型在内存中的存储
    前言在上一期中我们讲到了有关于整型在内存中的存储,新朋友可以点开......
  • C++入门基础知识(笔记):成员变量和成员函数分开存储,非静态成员变量,是属于类的对象上,空对
    在C++中,类内的成员变量和成员函数分开存储只有非静态成员变量才属于类的对象上。1.空对象占用内存空间为:1个字节,代码演示:#include<iostream>usingnamespacestd;//成员变量和成员函数分开存储classPerson{};//这是一个空对象voidtest01(){ Personp;......
  • Docker 部署之 docker-compose 部署 MongoDB 三副本集群(三节点)
    docker-compose部署MongoDB1.生成`keyFile`2.详细的`docker-compose.yml`文件信息3.启动三个容器4.配置集群5.使用配置文件初始化集群本文是通过三台机器部署的三个mongo副本组成的集群,每个节点部署一个mongo服务,数据存储采用绑定nfs进行存储前提......
  • Milvus 实践(2) --- 2.4.x 安装,脚本分析,数据存储解析
    目录背景Milvus2.4.x安装脚本分析etcd组件container_nameimage参数注意问题environmentvolumes实体化command参数注意事项healthcheck参数作用下载minio组件container_nameimage参数注意事项environment参数ports参数注意事项volumes参数实例co......
  • 给定一个10GB大小的文件,存储的都是数字,如何对文件中的数字进行排序,并输出新文件?限制内
    背景这是一道面试题,可考察的点也不少。总结几个关键词去解决这个问题,1,文件拆分;2、排序算法;3、缓冲buffer性能优化。啊,乍一看,这绝对不是一个初级程序员能够答出来,且能答得很好的问题,这个题目可以考察到我们的算法能力,性能优化经验。可万万不能马虎对待!开始讲思路。第一步,文件拆......
  • Java中的8种基本数据类型及其存储方式
    文章目录基本数据类型存储方式整型数据浮点型数据char类型数据布尔类型数据其他数据类型的转换自动转换强制转换基本数据类型Java属于C类语言,有8种数据类型数据类型byteshortintlongfloatdoublecharboolean数据大小8bit16bit32bit64bit32bit64bit8bit/24bit/32bit......
  • 分布式存储和集中式存储的区别是什么?应用场景是什么?
    原文链接:https://www.jb51.net/blockchain/944935.html在数字领域中,会有分布式存储和集中式存储这两概念,分布式存储是指数据分布在多个存储节点上,这些节点可以位于不同的地理位置。集中式存储是指所有数据都存储在一个单一的中央服务器或数据中心中。关于这两种存储方式,很多新手......