文档章节

121. kubernetes中使用NFS创建pv_pvc

Axin-linux
 Axin-linux
发布于 05/31 11:37
字数 1437
阅读 25
收藏 0

 kubernetes中使用NFS创建pv_pvc

 

 

Persistent Volume(持久化卷)简称PV, 是一个K8S资源对象,我们可以单独创建一个PV, 它不和Pod直接发生关系, 而是通过Persistent Volume Claim, 简称PVC来实现动态绑定, 我们会在Pod定义里指定创建好的PVC, 然后PVC会根据Pod的要求去自动绑定合适的PV给Pod使用。

#就是我们在pod定义的时候可以指定一个PVC。然后PVC再去和PV进行绑定(这个过程是自动的,不需要去设置上面)。

类似于linux我们不能直接使用一个磁盘,要格式化成你想要的格式,比如xfs、ext4。只有把磁盘格式化成你系统能识别的文件系统,你才能在里面写数据。那pv也是一样的,pod直接识别不了,需要借助PVC,才能使用它

持久化卷下PV和PVC概念:

Persistent Volume(PV)是由管理员设置的存储,它是群集的一部分(可理解为是物理层面的)。就像节点是集群中的资源一样,PV 也是集群中的资源。 PV 是 Volume 之类的卷插件,但具有独立于使用 PV 的 Pod 的生命周期(pv和pod之间没有直接的关系)。此 API 对象包含存储实现的细节,即 NFS、iSCSI 或特定于云供应商的存储系统。

PersistentVolumeClaim(PVC)是用户存储的请求。它与 Pod 相似,Pod 消耗节点资源,PVC 消耗 PV 资源。Pod 可以请求特定级别的资源(CPU 和内存)。PVC声明可以请求特定的大小和访问模式(例如,可以以读/写一次或只读多次模式挂载)。 #特定大小是请求磁盘存储的大小是多大,还有权限是可读还是可写或是只读

它和普通Volume的区别是什么呢?

普通Volume和使用它的Pod之间是一种静态绑定关系,在定义Pod的文件里,同时定义了它使用的Volume。Volume是Pod的附属品,我们无法单独创建一个Volume,因为它不是一个独立的K8S资源对象。 #我们在pod里面去定义一个 Volume,那么pod没了,Volnme也就没有了。而pv是独立存在的,pod没有了,跟pv没有关系

1 准备一台机器,搭建NFS服务

yum install nfs-utils

vim /etc/exportfs

/data/k8s/ 172.7.15.0/24(sync,rw,no_root_squash) #这里的ip要写node节点网段的ip端,是要分享整个集群的

mkdir /data/k8s #创建该目录

chmod 777 !$ #为方便测试,可加777的权限

systemctl start nfs

systemctl start rpcbind

systemctl enable nfs

systemctl enbale rpcbind

2 在node节点上测试

yum install nfs-utils

showmount -e 172.7.15.113

3 创建pv(master上)

vim mypv.yaml //内容如下

apiVersion: v1

kind: PersistentVolume

metadata:

name: pv001

spec:

capacity:

storage: 10Gi #给他10G的空间

accessModes:

- ReadWriteMany #就是可读可写很多次

nfs:

path: /data/k8s/ #挂载的目录

server: 172.7.15.113 #nfs服务端的ip

·························mypv.yaml文件到此为止································

kubectl create -f mypv.yaml #创建pv

kubectl get pv #查看pv

NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE

pv001 10Gi RWX Retain Available 10m

状态为Available,这是因为它还没有绑定到任何的pvc上面,当定义完pvc后,就可以自动绑定了。

4 创建pvc(master上) #让pod去引用他

vim mypvc.yaml //内容如下 #这个pvc文件可以自动的去关联上面创建的pv

kind: PersistentVolumeClaim #注意大小写

apiVersion: v1

metadata:

name: myclaim

spec:

accessModes:

- ReadWriteMany

resources:

requests:

storage: 8Gi

·························mypvc.yaml文件到此为止································

kubectl create -f mypvc.yaml

kubectl get pvc

NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE

myclaim Bound pv001 10Gi RWX 2m

可以看到,pvc状态为Bound,它绑定了pv001 #这个pv001就是上面我们创建的pv

5 定义pod #定义一个pod去使用pvc

vim pvpod.yaml //内容如下

apiVersion: v1

kind: Pod

metadata:

name: httpd-pvpod #注意名字不能和其他的pod有重复

spec:

containers:

- image: httpd

name: httpd-withpvc-pod

imagePullPolicy: Always

volumeMounts:

- mountPath: "/usr/local/apache2/htdocs/" #指定挂载到哪个目录去

name: httpd-volume

volumes:

- name: httpd-volume

persistentVolumeClaim:

claimName: myclaim #指定你pvc的名字

·························pvpod.yaml文件到此为止································

kubectl create -f pvpod.yaml

kubectl describe pod httpd-pvpod //查看Volumes那部分里的ClaimName

6 验证

1)到NFS的共享目录下创建一个文件

cd /data/k8s/

echo "Test file" > 1.html

2)进入到httpd-pod里

kubectl exec -it httpd-pvpod bash

cat /usr/local/apache2/htdocs/1.html #查看指定的目录下有无挂载的这个文件

3)删除httpd-pvpod

kubectl delete pod httpd-pod #删除这个pod,在master上查看是否有这个。以此证明pvc不受pod的删除而受影响

cat /data/k8s/1.html

4)重建httpd-pod

kubectl create -f pvpod.yaml #再次重建这个pod。然后再访问他,看他是否随着pod的重建而依然持久化这个文件

5)curl访问

kubectl get pod httpd-pvpod -o wide //查看其对应的IP #就是查看这个pod在哪个节点上

NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE

httpd-pod 1/1 Running 0 2m 172.20.3.5 172.7.15.114 <none>

curl 172.20.3.5/1.html #访问的时候要访问这个pod的唯一ip,而不是访问节点的ip。通过kubectl get pod httpd-pvpod -o wide这个命令来查看pod的ip

参考 http://www.showerlee.com/archives/2280

 

总结:

首先要搭建一个nfs,共享目录给这个集群里所有的节点,包括master

然后再node节点上测试nfs服务(showmount -e)

再创建pv

再创建pvc,pvc可以自动的去绑定pv

定义pod,指定pvc的名字。实验中的名字时myclin, claimName: myclaim

最后测试

 

 

 

 

 

 

 

 

 

 

 

 

© 著作权归作者所有

Axin-linux
粉丝 6
博文 121
码字总数 249504
作品 0
济南
私信 提问
利用NFS client provisioner动态提供Kubernetes后端存储卷–安装指南与实践

本文翻译自nfs-client-provisioner的说明文档,本文将介绍使用nfs-client-provisioner这个应用,利用NFS Server给Kubernetes作为持久存储的后端,并且动态提供PV。前提条件是有已经安装好的N...

店家小二
2018/12/14
0
0
nfs-client-provisioner源码分析

版权声明:本文为博主原创文章,未经博主允许不得转载。如需转载请联系本人,并标明作者和出处。 https://blog.csdn.net/huwh_/article/details/82052191 如果要开发一个,需要使用到the hel...

胡伟煌
2018/08/25
0
0
理解OpenShift(5):从 Docker Volume 到 OpenShift Persistent Volume

理解OpenShift(1):网络之 Router 和 Route 理解OpenShift(2):网络之 DNS(域名服务) 理解OpenShift(3):网络之 SDN 理解OpenShift(4):用户及权限管理 理解OpenShift(5):从 Do...

SammyLiu
2018/12/17
0
0
kubernetes Value:将磁盘挂载到容器,PV,PVC

6.1.介绍卷 6.1.1.卷的类型 emptyDir-用于存储临时数据的简单空目录 hostPath-用于将目录从工作节点的文件系统挂载到pod nfs-挂载到pod中的NFS共享卷。 还有其他的如gitRepo、gcepersistenD...

姚红
09/10
0
0
浅析kubernetes创建Pv、Pvc、Deployment

浅析kubernetes创建Pv、Pvc、Deployment 基本环境 创建有状态服务的操作顺序 创建PV 我这里使用的是NFS服务,点击NFS部署及优化,搭建自己的NFS服务。 创建PVC 创建Deployment...

品鉴初心
2018/07/24
0
0

没有更多内容

加载失败,请刷新页面

加载更多

mysql-connector-java升级到8.0后保存时间到数据库出现了时差

在一个新项目中用到了新版的mysql jdbc 驱动 <dependency>     <groupId>mysql</groupId>     <artifactId>mysql-connector-java</artifactId>     <version>8.0.18</version> ......

ValSong
今天
5
0
Spring Boot 如何部署到 Linux 中的服务

打包完成后的 Spring Boot 程序如何部署到 Linux 上的服务? 你可以参考官方的有关部署 Spring Boot 为 Linux 服务的文档。 文档链接如下: https://docs.ossez.com/spring-boot-docs/docs/r...

honeymoose
今天
6
0
Spring Boot 2 实战:使用 Spring Boot Admin 监控你的应用

1. 前言 生产上对 Web 应用 的监控是十分必要的。我们可以近乎实时来对应用的健康、性能等其他指标进行监控来及时应对一些突发情况。避免一些故障的发生。对于 Spring Boot 应用来说我们可以...

码农小胖哥
今天
9
0
ZetCode 教程翻译计划正式启动 | ApacheCN

原文:ZetCode 协议:CC BY-NC-SA 4.0 欢迎任何人参与和完善:一个人可以走的很快,但是一群人却可以走的更远。 ApacheCN 学习资源 贡献指南 本项目需要校对,欢迎大家提交 Pull Request。 ...

ApacheCN_飞龙
今天
5
0
CSS定位

CSS定位 relative相对定位 absolute绝对定位 fixed和sticky及zIndex relative相对定位 position特性:css position属性用于指定一个元素在文档中的定位方式。top、right、bottom、left属性则...

studywin
今天
9
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部