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


相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
目录
相关文章
|
3月前
|
存储 Kubernetes 容器
Kubernetes 存储选项:持久化卷与存储类
【8月更文第29天】随着容器化的普及,越来越多的应用程序需要持久化数据以保持状态信息。Kubernetes 提供了一套完整的解决方案来管理和配置持久化存储,包括持久卷 (Persistent Volume, PV)、持久卷声明 (Persistent Volume Claim, PVC) 和存储类 (StorageClass)。本文将详细介绍这些概念,并通过实际示例来演示如何在 Kubernetes 中配置存储。
306 1
|
3月前
|
Kubernetes Ubuntu Windows
【Azure K8S | AKS】分享从AKS集群的Node中查看日志的方法(/var/log)
【Azure K8S | AKS】分享从AKS集群的Node中查看日志的方法(/var/log)
136 3
|
3月前
|
存储 Kubernetes 容器
k8s创建NFS动态存储
k8s创建NFS动态存储
|
3月前
|
存储 Kubernetes 负载均衡
在K8S中,node数量增多会有什么影响吗?
在K8S中,node数量增多会有什么影响吗?
|
3月前
|
存储 Kubernetes 数据安全/隐私保护
在K8S中,如果后端nfs存储的ip发生变化如何解决?
在K8S中,如果后端nfs存储的ip发生变化如何解决?
|
3月前
|
存储 缓存 Kubernetes
在K8S中,业务Pod数据如何存储?
在K8S中,业务Pod数据如何存储?
|
3月前
|
存储 JSON Kubernetes
在K8S中,存储敏感信息方式有哪些?
在K8S中,存储敏感信息方式有哪些?
|
9天前
|
Kubernetes 监控 Cloud Native
Kubernetes集群的高可用性与伸缩性实践
Kubernetes集群的高可用性与伸缩性实践
36 1
|
30天前
|
JSON Kubernetes 容灾
ACK One应用分发上线:高效管理多集群应用
ACK One应用分发上线,主要介绍了新能力的使用场景
|
1月前
|
Kubernetes 持续交付 开发工具
ACK One GitOps:ApplicationSet UI简化多集群GitOps应用管理
ACK One GitOps新发布了多集群应用控制台,支持管理Argo CD ApplicationSet,提升大规模应用和集群的多集群GitOps应用分发管理体验。
下一篇
无影云桌面