nfs方式挂载卷
首先创建一个nfs(可以在私有仓库的虚拟机,或者新虚拟机)
[root@passyt ~]# mkdir /nfs
[root@passyt nfs]# yum install nfs-utils.x86_64 -y
[root@passyt nfs]# vim /etc/exports ##编写nfs挂载文件
/nfs *(rw,sync,no_root_squash)
[root@passyt nfs]# systemctl enable --now rpcbind
[root@passyt nfs]# systemctl enable --now nfs
[root@passyt nfs]# showmount -e ##显示远程挂载目录
Export list for passyt.com:
/nfs *
在server1上编写yaml文件
apiVersion: v1
kind: Pod
metadata:
name: test-pd
spec:
containers:
- name: test-container
image: nginx
volumeMounts:
- mountPath: /usr/share/nginx/html
name: test-volume
volumes:
- name: test-volume
nfs:
server: 192.168.122.3
path: /nfs
将镜像nginx中的默认发布目录挂载到了/nfs目录中,我们可以使用ip地址进行访问。
[kubeadm@server1 nfs]$ kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
test-pd 1/1 Running 0 3m19s 10.244.2.39 server3 <none> <none>
[kubeadm@server1 nfs]$ curl 10.244.2.39
<html>
<head><title>403 Forbidden</title></head>
<body>
<center><h1>403 Forbidden</h1></center>
<hr><center>nginx/1.17.8</center>
</body>
</html>
但是这个时侯我们发现这个访问被拒绝掉了,因为将nginx的目录挂载到了一个目录中,/nfs目录将默认发布目录给覆盖掉了,所以没有发布页面,访问就被拒绝掉了。那如何添加发布页面,直接到私有仓库下的nfs目录进行添加即可。
[root@passyt nfs]# echo passyt.com > index.html
添加完成再进行访问。
[kubeadm@server1 nfs]$ curl 10.244.2.39
passyt.com
这样就可以访问的到了。
pv 持久卷
pv是集群内由管理员提供的网络存储的一部分。pv也是一种资源,一种卷的插件,但是生命周期和pod是相互独立的。
使用pv我们需要pvc(持久卷声明),和pod类似,pod使用node资源,pvc使用pv资源。
pv提供静态和动态两种方式。
创建静态pv
apiVersion: v1
kind: PersistentVolume
metadata:
name: nfs-pv1
spec:
capacity: ##控制容量
storage: 1Gi
volumeMode: Filesystem ##卷的模式
accessModes: ##访问方式
- ReadWriteOnce ##一个人可以读写,还有ReadWriteMany多个人读写,ReadOnlyMany多人只读
persistentVolumeReclaimPolicy: Recycle ##回收策略,Recycle再利用,Delete删除关联的储存资源,Retain保留手动回收
storageClassName: nfs
nfs:
path: /nfs
server: 192.168.122.3
编写完成后就可以封装为一个pv了。
查看pv
[kubeadm@server1 nfs]$ kubectl describe pv nfs-pv1
Name: nfs-pv1
Labels: <none>
Annotations: <none>
Finalizers: [kubernetes.io/pv-protection]
StorageClass: nfs
Status: Available
Claim:
Reclaim Policy: Recycle
Access Modes: RWO
VolumeMode: Filesystem
Capacity: 1Gi
Node Affinity: <none>
Message:
Source:
Type: NFS (an NFS mount that lasts the lifetime of a pod)
Server: 192.168.122.3
Path: /nfs
ReadOnly: false
Events: <none>
再多创建几个pv
[kubeadm@server1 nfs]$ kubectl get pv
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
nfs-pv1 1Gi RWO Recycle Available nfs 39h
nfs-pv2 2Gi RWX Retain Available nfs 39h
nfs-pv3 5Gi ROX Delete Available nfs 39h
##Available表示空闲资源,未绑定pvc
##Bound绑定给了某个pv
##Released pvc已经删除但是pv还再回收
##Failed表示回收失败
创建pvc
编写yaml文件
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: pvc1
spec:
accessModes:
- ReadWriteOnce
storageClassName: nfs
resources:
requests:
storage: 1Gi
创建pvc时,从上面的文件中筛选条件,筛选模式,大小等,只有都满足了才可以进行绑定创建。
[kubeadm@server1 nfs]$ kubectl get pvc
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
pvc1 Bound nfs-pv1 1Gi RWO nfs 2m25s
[kubeadm@server1 nfs]$ kubectl get pv
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
nfs-pv1 1Gi RWO Recycle Bound default/pvc1 nfs 39h
pod挂载pv
apiVersion: v1
kind: Pod
metadata:
name: test-pd
spec:
containers:
- name: test-container
image: nginx
volumeMounts:
- mountPath: /usr/share/nginx/html
name: test-volume
volumes:
- name: test-volume ##上面没什么,主要下面挂接,可以直接指定pvc的名称
persistentVolumeClaim:
claimName: pvc1
pod使用pvc去识别pv,对pv进行绑定应用