K8s不同node如何共享存储&&nfs 搭建(markdown版本)

本文涉及的产品
可观测监控 Prometheus 版,每月50GB免费额度
简介: K8s不同node如何共享存储&&nfs 搭建(markdown版本)

k8s如何共享存储


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


nfs是一种成熟的共享存储方案. 例如我们生产环境中的nas.

ceph是一种(分布式共享存储)

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


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


NFS可以实现部分功能,对于动态扩容nfs-provision目前不支持


NFS provisioner limitations/pitfalls


  • The provisioned storage is not guaranteed. You may allocate more than the NFS share’s total size. The share may also not have enough storage space left to actually accommodate the request.
  • The provisioned storage limit is not enforced. The application can expand to use all the available storage regardless of the provisioned size.
  • Storage resize/expansion operations are not presently supported in any form. You will end up in an error state: Ignoring the PVC: didn’t find a plugin capable of expanding the volume; waiting for an external controller to process this PVC.

ceph功能就比较丰富了,还提供 对象存储和块存储。

环境准备


服务端安装NFS服务步骤


第一步:安装NFS和rpc。


[root@localhost ~]# yum install -y nfs-utils   
#安装nfs服务
[root@localhost ~]# yum install -y rpcbind
#安装rpc服务

第二步:启动服务和设置开启启动:


systemctl enable rpcbind --now #--now 设置开机启动
systemctl enable nfs-server --now
#配置生效
exportfs -r

第三步:配置共享文件目录,编辑配置文件/etc/exports:


# 创建共享节点
mkdir -p /monitor/data
#编辑配置文件
echo "/monitor/data *(insecure,rw,sync,no_root_squash)" > /etc/exports
# 指定cidr范围的主机可访问
# echo "/monitor/data 10.50.0.0/16(insecure,rw,sync,no_root_squash)" > /etc/exports
systemctl reload nfs 
#重新加载NFS服务,使配置文件生效

用于配置NFS服务程序配置文件的参数:

格式: 共享目录的路径 允许访问的NFS客户端(共享权限参数)
参数:
- ro 只读
- rw 读写
- root_squash 当NFS客户端以root管理员访问时,映射为NFS服务器的匿名用户
- no_root_squash 当NFS客户端以root管理员访问时,映射为NFS服务器的root管理员
- all_squash 无论NFS客户端使用什么账户访问,均映射为NFS服务器的匿名用户
- sync 同时将数据写入到内存与硬盘中,保证不丢失数据
- async 优先将数据保存到内存,然后再写入硬盘;这样效率更高,但可能会丢失数据
请注意,NFS客户端地址与权限之间没有空格

NFS客户端挂载配置


第一步


使用showmount命令查看nfs服务器共享信息。输出格式为“共享的目录名称 允许使用客户端地址”。

[root@meta /www/pigsty]#showmount -e 10.50.10.179
Export list for 10.50.10.179:
/monitor/data     10.50.0.0/16
/k8s-sc2-xfs/data 10.50.0.0/16

showmount 用法

参数  作用
-e  显示NFS服务器的共享列表
-a  显示本机挂载的文件资源的情况NFS资源的情况
-v  显示版本号

第二步,在客户端创建目录,并挂载共享目录。


mkdir -p /nfs/data/prometheus
# 挂载
[root@meta /www/pigsty]#mount 10.50.10.179:/monitor/data/ /nfs/data/prometheus/
[root@meta /www/pigsty]#df -hT
Filesystem                 Type      Size  Used Avail Use% Mounted on
devtmpfs                   devtmpfs   32G     0   32G   0% /dev
tmpfs                      tmpfs      32G  180K   32G   1% /dev/shm
tmpfs                      tmpfs      32G   17M   32G   1% /run
tmpfs                      tmpfs      32G     0   32G   0% /sys/fs/cgroup
/dev/sda1                  xfs        40G   30G   11G  74% /
/dev/sdb1                  xfs        50G  5.8G   45G  12% /prometheus
tmpfs                      tmpfs     6.3G     0  6.3G   0% /run/user/0
10.50.10.179:/monitor/data nfs4      2.0T   32G  2.0T   2% /nfs/data/prometheus

修改fstab使系统每次启动时都能自动挂载


这种挂载文件系统的方法只能临时挂载文件系统。当重启Linux系统时,文件系统并不会自动挂载。要强制Linux在启动时自动挂载新的文件系统,可以将其添加到/etc/fstab文件。

# 使系统每次启动时都能自动挂载
]#more /etc/fstab
#
# /etc/fstab
# Created by anaconda on Thu Apr 30 22:04:55 2020
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
UUID=1c419d6c-5064-4a2b-953c-05b2c67edb15 /                       xfs     defaults        0 0
/dev/sdb1               /prometheus                   xfs    defaults        0 0
/swapfile none swap defaults 0 0
10.50.10.179:/monitor/data /nfs/data/prometheus nfs    defaults 0 0

nfs4加强协议

2df189ab9d8d4b8886c482a574d61d08.png

写入一个测试文件


29d59b6548a74f83b07817a6c2f3f509.png

libvirt是个啥?

原生方式数据挂载


原生方式挂载数据对外暴露太多了,需要用户了解我们整个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

动态供应


参考


[1] nfs 搭建


相关实践学习
通过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 中配置存储。
307 1
|
3月前
|
Kubernetes Ubuntu Windows
【Azure K8S | AKS】分享从AKS集群的Node中查看日志的方法(/var/log)
【Azure K8S | AKS】分享从AKS集群的Node中查看日志的方法(/var/log)
136 3
|
1月前
|
Kubernetes Linux 测试技术
|
1月前
|
Kubernetes Linux 开发工具
centos7通过kubeadm安装k8s 1.27.1版本
centos7通过kubeadm安装k8s 1.27.1版本
|
2月前
|
Kubernetes 负载均衡 前端开发
二进制部署Kubernetes 1.23.15版本高可用集群实战
使用二进制文件部署Kubernetes 1.23.15版本高可用集群的详细教程,涵盖了从环境准备到网络插件部署的完整流程。
105 2
二进制部署Kubernetes 1.23.15版本高可用集群实战
|
2月前
|
存储 Kubernetes Ubuntu
Ubuntu 22.04LTS版本二进制部署K8S 1.30+版本
这篇文章详细介绍了在Ubuntu 22.04 LTS系统上使用VMware Fusion虚拟化软件部署Kubernetes 1.30+版本的完整过程,包括环境准备、安装containerd、配置etcd、生成证书、部署高可用组件、启动Kubernetes核心组件以及网络插件的部署和故障排查。
156 4
|
3月前
|
存储 Kubernetes 容器
k8s创建NFS动态存储
k8s创建NFS动态存储
|
3月前
|
存储 Kubernetes 负载均衡
在K8S中,node数量增多会有什么影响吗?
在K8S中,node数量增多会有什么影响吗?
|
3月前
|
存储 Kubernetes 数据安全/隐私保护
在K8S中,如果后端nfs存储的ip发生变化如何解决?
在K8S中,如果后端nfs存储的ip发生变化如何解决?
|
6月前
|
Linux
Linux安装NFS挂载NFS卸载客户端服务端都有
Linux安装NFS挂载NFS卸载客户端服务端都有
156 0
下一篇
无影云桌面