Kubernetes进阶之PersistentVolume 静态供给实现NFS网络存储

Kubernetes进阶之PersistentVolume 静态供给实现NFS网络存储
网络存储

NFS是一种很早的技术,单机的存储在服务器方面还是非常主流的,但nfs唯一的就是缺点比较大就是没有集群版,做集群化还是比较费劲的,文件系统做不了,这是一个很大的弊端,大规模的还是需要选择一些分布式的存储,nfs就是一个网络文件存储服务器,装完nfs之后,共享一个目录,其他的服务器就可以通过这个目录挂载到本地了,在本地写到这个目录的文件,就会同步到远程服务器上,实现一个共享存储的功能,一般都是做数据的共享存储,比如多台web服务器,肯定需要保证这些web服务器的数据一致性,那就会用到这个共享存储了,要是将nfs挂载到多台的web服务器上,网站根目录下,网站程序就放在nfs服务器上,这样的话。每个网站,每个web程序都能读取到这个目录,一致性的数据,这样的话就能保证多个节点,提供一致性的程序了。

单独拿一台服务器做nfs服务器,我们这里先搭建一台NFS服务器用来存储我们的网页根目录

[[email protected] ~]# yum install nfs-utils -y
暴露目录,让是让其他服务器能挂载这个目录

[[email protected] ~]# mkdir /opt/k8s
[[email protected] ~]# vim /etc/exports
/opt/k8s 192.168.30.0/24(rw,no_root_squash)

给这个网段加上权限,可读可写
[[email protected] ~]# systemctl start nfs

找个节点去挂载测试一下,只要去共享这个目录就要都去安装这个客户端

[[email protected] ~]# yum install nfs-utils -y
[[email protected] ~]# mount -t nfs 192.168.30.27:/opt/k8s /mnt
[[email protected] ~]# cd /mnt
[[email protected] mnt]# df -h
192.168.30.27:/opt/k8s    36G  5.8G   30G   17% /mnt
[[email protected] mnt]# touch a.txt

去服务器端查看已经数据共享过来了

[[email protected] ~]# cd /opt/k8s/
[[email protected] k8s]# ls
a.txt

删除nfs服务器的数据也会删除
接下来怎么将K8s进行使用
我们把网页目录都放在这个目录下

[[email protected] k8s]# mkdir wwwroot

[[email protected] demo]# vim nfs.yaml
apiVersion: apps/v1beta1
kind: Deployment
metadata:
  name: nfs
spec:
  replicas: 3
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx
        volumeMounts:
        - name: wwwroot
          mountPath: /usr/share/nginx/html
        ports:
        - containerPort: 80
      volumes:
      - name: wwwroot
        nfs:
          server: 192.168.30.27
          path: /opt/k8s/wwwroot

[[email protected] demo]# kubectl create -f nfs.yaml

[[email protected] demo]# kubectl get pod
NAME                                READY   STATUS             RESTARTS   AGE
mypod                               1/1     Running            0          6h6m
mypod2                              1/1     Running            0          6h
nginx-5ddcc6cb74-lplxl              1/1     Running            0          6h43m
nginx-deployment-744d977b46-8q97k   1/1     Running            0          48s
nginx-deployment-744d977b46-ftjfk   1/1     Running            0          48s
nginx-deployment-744d977b46-nksph   1/1     Running            0          48s
web-67fcf9bf8-mrlhd                 1/1     Running            0          103m

进入容器并查看挂载,确定挂载上

[[email protected] demo]# kubectl exec -it  nginx-deployment-744d977b46-8q97k bash
[email protected]:/# df -h
Filesystem                      Size  Used Avail Use% Mounted on
overlay                          17G  5.6G   12G  33% /
tmpfs                            64M     0   64M   0% /dev
tmpfs                           2.0G     0  2.0G   0% /sys/fs/cgroup
/dev/mapper/centos-root          17G  5.6G   12G  33% /etc/hosts
shm                              64M     0   64M   0% /dev/shm
192.168.30.27:/opt/k8s/wwwroot   36G  5.8G   30G  17% /usr/share/nginx/html
tmpfs                           2.0G   12K  2.0G   1% /run/secrets/kubernetes.io/serviceaccount
tmpfs                           2.0G     0  2.0G   0% /proc/acpi
tmpfs                           2.0G     0  2.0G   0% /proc/scsi
tmpfs                           2.0G     0  2.0G   0% /sys/firmware

我们在源pod的网页目录下写入数据,并查看我们的nfs服务器目录下也会共享

[email protected]:/# cd /usr/share/nginx/html/
[email protected]:/usr/share/nginx/html# ls
[email protected]:/usr/share/nginx/html# echo "hello world" > index.html
[email protected]:/usr/share/nginx/html# cat index.html
hello world

测试查看

[[email protected] k8s]# cd wwwroot/
[[email protected] wwwroot]# ls
[[email protected] wwwroot]# ls
index.html
[[email protected] wwwroot]# cat index.html
hello world

K8s为了做存储的编排
数据持久卷PersistentVolume 简称pv/pvc主要做容器存储的编排

? PersistentVolume(PV):对存储资源创建和使用的抽象,使得存储作为集群中的资源管理
pv都是运维去考虑,用来管理外部存储的
? 静态 :提前创建好pv,比如创建一个100G的pv,200G的pv,让有需要的人拿去用,就是说pvc连接pv,就是知道pv创建的是多少,空间大小是多少,创建的名字是多少,有一定的可匹配性
? 动态
? PersistentVolumeClaim(PVC):让用户不需要关心具体的Volume实现细节
使用多少个容量来定义,比如开发要部署一个服务要使用10个G,那么就可以使用pvc这个资源对象来定义使用10个G,其他的就不用考虑了
PersistentVolume 静态供给


先创建一个容器应用

[[email protected] ~]# cd demo/
[[email protected] demo]# mkdir storage
[[email protected] demo]# cd storage/
[[email protected] storage]# vim pod.yaml
apiVersion: v1
kind: Pod
metadata:
  name: my-pod
spec:
    containers:
    - name: nginx
      image: nginx:latest
      ports:
      - containerPort: 80
      volumeMounts:
        - name: www
          mountPath: /usr/share/nginx/html
  volumes:
    - name: www
      persistentVolumeClaim:
        claimName: my-pvc

卷需求yaml,这里的名称一定要对应,一般两个文件都放在一块

[[email protected] storage]# vim pvc.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: my-pvc
spec:
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 5Gi

接下来就是运维出场了,提前创建好pv

[[email protected] storage]# vim pv.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
  name: zhaocheng
spec:
  capacity:
    storage: 5Gi
  accessModes:
    - ReadWriteMany
  nfs:
    path: /opt/k8s/zhaocheng
server: 192.168.30.27

提前创建好pv,以及挂载目录

[[email protected] storage]# kubectl create -f pv.yaml
persistentvolume/my-pv created
[[email protected] storage]# kubectl get pv

zhaocheng   5Gi        RWX            Retain           Available                                   5s

我再创建一个pv,在nfs服务器提前把目录创建好,名称修改一下

[[email protected] ~]# cd /opt/k8s/
[[email protected] k8s]# mkdir zhaocheng
[[email protected] storage]# vim pv2.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
  name: zhaochengcheng
spec:
  capacity:
    storage: 10Gi
  accessModes:
    - ReadWriteMany
  nfs:
    path: /opt/k8s/zhaochengcheng
server: 192.168.30.27
[[email protected] storage]# kubectl get pv

zhaocheng        5Gi        RWX            Retain           Available                                   13s
zhaochengcheng   10Gi       RWX            Retain           Available                                   4s

然后现在创建一下我们的pod和pvc,这里我写在一起了

[[email protected] storage]# vim pod.yaml
apiVersion: v1
kind: Pod
metadata:
  name: my-pod
spec:
  containers:
  - name: nginx
    image: nginx:latest
    ports:
    - containerPort: 80
    volumeMounts:
      - name: www
        mountPath: /usr/share/nginx/html
  volumes:
    - name: www
      persistentVolumeClaim:
        claimName: my-pvc
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: my-pvc
spec:
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 5Gi

[[email protected] storage]# kubectl create -f pod.yaml 

这里会根据我们pod的需求去匹配我们静态的pv,我们是创建了一个5G,一个10G,根据自身大小去匹配

[[email protected] storage]# kubectl get pod,pvc

pod/my-pod                 1/1     Running   0          13s
pod/nfs-744d977b46-dh9xj   1/1     Running   0          12m
pod/nfs-744d977b46-kcx6h   1/1     Running   0          12m
pod/nfs-744d977b46-wqhc6   1/1     Running   0          12m

persistentvolumeclaim/my-pvc   Bound    zhaocheng   5Gi        RWX                           13s

进入容器查看我们的使用内存大小

[[email protected] storage]# kubectl exec -it pod/my-pod bash
[email protected]:/# df -Th
Filesystem                       Type     Size  Used Avail Use% Mounted on
overlay                          overlay   17G  4.9G   13G  29% /
tmpfs                            tmpfs     64M     0   64M   0% /dev
tmpfs                            tmpfs    2.0G     0  2.0G   0% /sys/fs/cgroup
/dev/mapper/centos-root          xfs       17G  4.9G   13G  29% /etc/hosts
shm                              tmpfs     64M     0   64M   0% /dev/shm
192.168.30.27:/opt/k8s/zhaocheng nfs4      36G  5.8G   30G  17% /usr/share/nginx/html
tmpfs                            tmpfs    2.0G   12K  2.0G   1% /run/secrets/kubernetes.io/serviceaccount
tmpfs                            tmpfs    2.0G     0  2.0G   0% /proc/acpi
tmpfs                            tmpfs    2.0G     0  2.0G   0% /proc/scsi
tmpfs                            tmpfs    2.0G     0  2.0G   0% /sys/firmware

去创建一个网页测试

[email protected]:/# cd /usr/share/nginx/html/
[email protected]:/usr/share/nginx/html# ls
[email protected]:/usr/share/nginx/html# echo "5G ready" > index.html
[email protected]:/usr/share/nginx/html# cat index.html
5G ready

去我们的nfs服务器查看

[[email protected] ~]# cd /opt/k8s/
[[email protected] k8s]# ls
wwwroot  zhaocheng  zhaochengcheng
[[email protected] k8s]# cd zhaocheng
[[email protected] zhaocheng]# cat index.html
5G ready

绑定一起了和我们5G的

[[email protected] storage]# kubectl get pv

zhaocheng        5Gi        RWX            Retain           Bound       default/my-pvc                           8m52s
zhaochengcheng   10Gi       RWX            Retain           Available                                            7m51s

原文地址:https://blog.51cto.com/14143894/2436212

时间: 2024-08-28 18:51:35

Kubernetes进阶之PersistentVolume 静态供给实现NFS网络存储的相关文章

配置NFS网络存储作为cinder的后端存储

安装cinder和nfs yum install -y openstack-cinder yum install cifs-utils 在controller节点配置nfs [[email protected] ~]# mkdir -p /data/nfs #创建一个共享挂载资源的目录 [[email protected] ~]# cat /etc/exports /data/nfs *(rw,sync,root_squash) #NFS服务程序的配置文件为/etc/exports sync 同

Kubernetes 之 Nginx 动静态 PV 持久存储 下篇

接上篇 Kubernetes 中部署 NFS Provisioner 为 NFS 提供动态分配卷(上篇)请添加链接描述 一.nginx 使用 nfs 静态 PV 1.静态 nfs-static-nginx-rc.yaml ##清理资源 kubectl delete -f nfs-static-nginx-rc.yaml -n test cat >nfs-static-nginx-rc.yaml<<\EOF ##创建namespace --- apiVersion: v1 kind: Na

Kubernetes进阶之ingress-nginx

Kubernetes进阶之ingress-nginx 目录:一 从外部访问应用最佳方式 二 配置管理 三 数据卷与数据持久卷 四 再谈有状态应用部署 五 K8S 安全机制 说在前面的话,选择nodeport的方式去暴露端口,那你需要得去判断暴露的端口有没有被占用,再创建新的应用会判断端口有没有被分配出去 nodeport本身是基于默认的iptables的代理模式做的网络转发,也就是SANT,DANT,基于四层的,做七层是做不了的,性能差一点,因为它需要防火墙的转发和过滤. 一.从外部访问应用最佳

Kubernetes进阶之secret及configmap配置管理

Kubernetes进阶之secret及configmap配置管理 目录: 一 从外部访问应用最佳方式 二 配置管理 三 数据卷与数据持久卷 四 再谈有状态应用部署 五 K8S 安全机制 二.配置管理Pod使用secret两种方式: ? 变量注入 (就是我们在写yaml的时候直接让它以变量的方式注入进去,注入pod中,去引用这个变量,去做相关的处理)? 挂载(直接从volume的形式挂载到我们指定的目录下)Configmap与Secret类似,区别在于ConfigMap保存的是不需要加密配置信息

NFS 网络文件系统 简单搭建

NFS网络文件系统搭建简单 NFS依赖于RPC(远程调用)端口号:2049 功能:用于Unix间数据共享和数据传输(挂载完成数据同步) Linux系统与Linux系统  Linux系统与aix系统  aix系统与aix系统 实验环境 Redhat7.3Linux系统 两台机器可以Ping通 IP配置服务端192.168.10.1 客户端192.168.10.5 安装步骤如下: 关闭防火墙 systemctl stop firewalld.service 查看是否关闭 systemctl stat

NFS网络文件共享存储服务器

NFS网络文件共享存储服务器 什么是NFS NFS(Network File System)即网络文件系统,它允许网络中的计算机之间通过TCP/IP网络共享资源.在NFS的应用中,本地NFS的客户端应用可以透明地读写位于远端NFS服务器上的文件,就像访问本地文件一样. 在企业集群架构的工作场景中,NFS网络文件系统一般被用来共享存储视频.图片.附件等静态资源文件,通常网站用户上的文件都会存放到NFS共享里.例如bbs产品的图片.附件头像等.然后前段所有的节点访问这些静态资源时都会读取NFS存储上

NFS 网络文件系统介绍

NFS网络文件系统介绍 什么是NFS系统? NFS是Network File System 的缩写,它的主要功能是通过网络让不同的机器系统之间可以彼此共享文件和目录.NFS服务器可以允许NFS客户端,将远端NFS服务器端的共享目录,挂载到本地NFS客户端中.(注NFS客户端一般为应用服务器如:web) NFS服务器端共享的目录就好像NFS客户端自己的磁盘分区和目录一样. 一般客户端挂载到本地目录的名字可以随便,但为方便管理,建议和服务器端一样比较好. NFS一般是用来存储共享视频.图片等静态数据

nfs网络文件系统服务介绍与实战第一部

1.NFS原理描述 什么是NFS?NFS是Network File System的缩写,它的主要功能是通过网络让不同的机器之间可以彼此共享文件或目录.NFS服务器可以允许NFS客户端将远端NFS服务器端的共享目录挂在到本地的NFS客户端中.在本地NFS客户端的机器看来,NFS服务器端共享的目录就好像是自己的磁盘分区或者目录一样. NFS一般用来存储共享视频.图片等静态数据,是当前互联网系统架构中最常用的服务之一. 2.NFS挂载结构图 图解:NFS对外共享了video这个目录,下面有两台NFS客

NFS网络文件共享

NFS(Network File System) NFS在企业中的应用场景 企业集群架构中,NFS网络文件系统一般用来存储共享的视频.图片.附件等静态资源,一般把网站用户上传的文件都放到NFS共享里,例如图片.附加.头像,然后前端所有的节点访问这些静态资源时都会读取NFS存储上的资源.NFS是当前互联网系统架构中最常用的数据存储服务之一,特别是中小型网站公司应用频率更高.大公司除了使用NFS外,还可能使用更为复杂的分布式文件系统Moosefs,glusterfs,FastDFS等. 非常low的