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

简介: 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 搭建


相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
云原生实践公开课
课程大纲 开篇:如何学习并实践云原生技术 基础篇: 5 步上手 Kubernetes 进阶篇:生产环境下的 K8s 实践 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
目录
相关文章
|
2月前
|
JavaScript 内存技术
node与npm版本对应关系以及使用nvm管理node版本
node与npm版本对应关系以及使用nvm管理node版本
206 0
|
1月前
|
存储 Kubernetes 调度
k8s常见的排错指南Node,svc,Pod等以及K8s网络不通问题
k8s常见的排错指南Node,svc,Pod等以及K8s网络不通问题
137 1
|
6天前
|
JavaScript 内存技术
基于nvm管理node版本
基于nvm管理node版本
7 0
|
7天前
|
JavaScript 前端开发 Linux
|
1月前
|
存储 JavaScript 网络安全
电脑上安装多个nodeJS版本实现一键切换
电脑上安装多个nodeJS版本实现一键切换
39 1
|
1月前
|
Kubernetes 应用服务中间件 网络安全
CentOS7上二进制部署Kubernetes高可用集群(v1.18版本)
CentOS7上二进制部署Kubernetes高可用集群(v1.18版本)
133 0
|
1月前
|
Kubernetes Ubuntu 应用服务中间件
Ubuntu 22.04 利用kubeadm方式部署Kubernetes(v1.28.2版本)
Ubuntu 22.04 利用kubeadm方式部署Kubernetes(v1.28.2版本)
115 0
|
1月前
|
存储 Kubernetes 容器
K8S中使用nfs作为存储卷
K8S中使用nfs作为存储卷
13 0
|
2月前
|
JavaScript 内存技术
不同版本NodeJS切换使用
不同版本NodeJS切换使用
13 0
|
2月前
|
Kubernetes Java 测试技术
ChaosBlade常见问题之创建k8s node-cpu fullload 提示无法找到node如何解决
ChaosBlade 是一个开源的混沌工程实验工具,旨在通过模拟各种常见的硬件、软件、网络、应用等故障,帮助开发者在测试环境中验证系统的容错和自动恢复能力。以下是关于ChaosBlade的一些常见问题合集:
21 0

推荐镜像

更多