K8s不同node如何共享存储

简介: K8s不同node如何共享存储

同一个pod内不同container可以使用共同挂载一个volume来共享数据,但是不同node跨服务器如何共享数据呢?


  • nfs是一种成熟的共享存储方案. 例如我们生产环境中的nas.
  • ceph是一种(分布式共享存储)


什么是分布式共享存储呢?


pod中产生了数据,数据通过存储插件(通常是一个容器)将数据写入远程的分布式存储系统ceph,当pod迁移或是升级K8s集群 ,即无论你在其他哪个宿主机上启动新的容器,都可以请求挂载指定的持久化存储卷,从而访问到数据卷里保存的内容。NFS也可以实现这个功能。


ceph还提供 对象存储和块存储。

环境准备


1、所有节点


#所有机器安装

yum install -y nfs-utils

2、主节点


#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、从节点


showmount -e 192.168.56.10


#执行以下命令挂载 nfs 服务器上的共享目录到本机路径 /root/nfsmount

mkdir -p /nfs/data


mount -t nfs 192.168.56.10:/nfs/data /nfs/data

# 写入一个测试文件

echo "hello nfs server" > /nfs/data/test.txt

这种挂载文件系统的方法只能临时挂载文件系统。当重启Linux系统时,文件系统并不会

自动挂载。要强制Linux在启动时自动挂载新的文件系统,可以将其添加到/etc/fstab文件。


192.168.56.10:/nfs/data /nfs/data nfs    defaults 0 0

ae4f41526c8c487aa3a21410a2d39ff5.png

4、原生方式数据挂载


原生方式挂载数据对外暴露太多了,需要用户了解我们整个nfs的架构,对开发人员不友好,而且关键是不安全。 整个存储应该同一管理,并分配给应用。


apiVersion: apps/v1

kind: Deployment

metadata:

 labels:

   app: nginx-pv-demo

 name: nginx-pv-demo

spec:

 replicas: 2

 selector:

   matchLabels:

     app: nginx-pv-demo

 template:

   metadata:

     labels:

       app: nginx-pv-demo

   spec:

     containers:

     - image: nginx

       name: nginx

       volumeMounts:

       - name: html

         mountPath: /usr/share/nginx/html

     volumes:

       - name: html

         nfs:

           server: 172.31.0.4

           path: /nfs/data/nginx-pv


1、PV&PVC


PV:持久卷(Persistent Volume),将应用需要持久化的数据保存到指定位置


PVC:持久卷申明(Persistent Volume Claim),申明需要使用的持久卷规格


下面这些yaml文件中的字段不懂可以使用explain 一个一个解释。

1、创建pv池


静态供应


#nfs主节点

mkdir -p /nfs/data/01

mkdir -p /nfs/data/02

mkdir -p /nfs/data/03

创建PV


apiVersion: v1

kind: PersistentVolume

metadata:

 name: pv01-10m

spec:

 capacity:

   storage: 10M

 accessModes:

   - ReadWriteMany

 storageClassName: nfs

 nfs:

   path: /nfs/data/01

   server: 172.31.0.4

---

apiVersion: v1

kind: PersistentVolume

metadata:

 name: pv02-1gi

spec:

 capacity:

   storage: 1Gi

 accessModes:

   - ReadWriteMany

 storageClassName: nfs

 nfs:

   path: /nfs/data/02

   server: 172.31.0.4

---

apiVersion: v1

kind: PersistentVolume

metadata:

 name: pv03-3gi

spec:

 capacity:

   storage: 3Gi

 accessModes:

   - ReadWriteMany

 storageClassName: nfs

 nfs:

   path: /nfs/data/03

   server: 172.31.0.4

2、PVC创建与绑定


创建PVC


kind: PersistentVolumeClaim

apiVersion: v1

metadata:

 name: nginx-pvc

spec:

 accessModes:

   - ReadWriteMany

 resources:

   requests:

     storage: 200Mi

 storageClassName: nfs

创建Pod绑定PVC


apiVersion: apps/v1

kind: Deployment

metadata:

 labels:

   app: nginx-deploy-pvc

 name: nginx-deploy-pvc

spec:

 replicas: 2

 selector:

   matchLabels:

     app: nginx-deploy-pvc

 template:

   metadata:

     labels:

       app: nginx-deploy-pvc

   spec:

     containers:

     - image: nginx

       name: nginx

       volumeMounts:

       - name: html

         mountPath: /usr/share/nginx/html

     volumes:

       - name: html

         persistentVolumeClaim:

           claimName: nginx-pvc


相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。     相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
目录
相关文章
|
8月前
|
人工智能 算法 调度
阿里云ACK托管集群Pro版共享GPU调度操作指南
本文介绍在阿里云ACK托管集群Pro版中,如何通过共享GPU调度实现显存与算力的精细化分配,涵盖前提条件、使用限制、节点池配置及任务部署全流程,提升GPU资源利用率,适用于AI训练与推理场景。
663 1
|
存储 监控 对象存储
ACK 容器监控存储全面更新:让您的应用运行更稳定、更透明
针对本地存储和 PVC 这两种容器存储使用方式,我们对 ACK 的容器存储监控功能进行了全新升级。此次更新完善了对集群中不同存储类型的监控能力,不仅对之前已有的监控大盘进行了优化,还针对不同的云存储类型,上线了全新的监控大盘,确保用户能够更好地理解和管理容器业务应用的存储资源。
800 279
|
存储 Kubernetes 容器
Kubernetes 存储选项:持久化卷与存储类
【8月更文第29天】随着容器化的普及,越来越多的应用程序需要持久化数据以保持状态信息。Kubernetes 提供了一套完整的解决方案来管理和配置持久化存储,包括持久卷 (Persistent Volume, PV)、持久卷声明 (Persistent Volume Claim, PVC) 和存储类 (StorageClass)。本文将详细介绍这些概念,并通过实际示例来演示如何在 Kubernetes 中配置存储。
1134 3
|
Kubernetes API 网络安全
当node节点kubectl 命令无法连接到 Kubernetes API 服务器
当Node节点上的 `kubectl`无法连接到Kubernetes API服务器时,可以通过以上步骤逐步排查和解决问题。首先确保网络连接正常,验证 `kubeconfig`文件配置正确,检查API服务器和Node节点的状态,最后排除防火墙或网络策略的干扰,并通过重启服务恢复正常连接。通过这些措施,可以有效解决与Kubernetes API服务器通信的常见问题,从而保障集群的正常运行。
1165 17
|
存储 监控 对象存储
ACK 容器监控存储全面更新:让您的应用运行更稳定、更透明
ACK 容器监控存储全面更新:让您的应用运行更稳定、更透明
342 1
|
存储 监控 对象存储
ACK 容器监控存储全面更新:让您的应用运行更稳定、更透明
ACK 容器监控存储全面更新:让您的应用运行更稳定、更透明
443 0
ACK 容器监控存储全面更新:让您的应用运行更稳定、更透明
|
存储 监控 对象存储
ACK容器监控存储全面更新:让您的应用运行更稳定、更透明
介绍升级之后的ACK容器监控体系,包括各大盘界面展示和概要介绍。
|
存储 Kubernetes 安全
k8s存储类型:emptyDir、hostPath、nfs、pvc及存储类storageclass的静态/动态创建pv
Kubernetes提供了多种存储类型,满足不同的应用需求。`emptyDir`和 `hostPath`适用于临时和宿主机存储需求,`nfs`适用于共享存储,`PersistentVolumeClaim`和 `StorageClass`实现了持久存储的灵活管理。通过理解和配置这些存储类型,可以有效提升Kubernetes集群的存储管理能力。
744 13
|
存储 运维 Kubernetes
容器数据保护:基于容器服务 Kubernetes 版(ACK)备份中心实现K8s存储卷一键备份与恢复
阿里云ACK备份中心提供一站式容器化业务灾备及迁移方案,减少数据丢失风险,确保业务稳定运行。
|
存储 Kubernetes 容器
k8s创建NFS动态存储
k8s创建NFS动态存储

推荐镜像

更多