准备:
一个k8s集群,nfs服务器
一.配置环境
1.NFS服务器
安装nfs软件:
yum install nfs-utils -y
清除iptables规则:
iptables -F
关闭防火墙:
service firewalld stop
systemctl disable firewalld
关闭selinux防火墙:
setenforce 0
设置共享目录:
[root@localhost ~]# vim /etc/exports
[root@localhost ~]# cat /etc/exports
/web 192.168.74.0/24(rw,sync,all_squash)
新建共享目录/web和index.html网页:
[root@localhost ~]# mkdir /web
[root@localhost ~]# cd /web
[root@localhost web]# echo 'welcome to hunan sanchuang!!!' >> index.html
[root@localhost web]# cat index.html
welcome to hunan sanchuang!!!
this is a beautiful city!!
设置/web文件夹的权限,允许其他人过来读写:
[root@localhost web]# chmod 777 /web
drwxrwxrwx. 2 root root 24 9月 6 15:01 /web
[root@localhost web]# chown nfsnobody:nfsnobody /web
[root@localhost web]# ll -d /web
drwxrwxrwx. 2 nfsnobody nfsnobody 24 9月 6 15:01 /web
刷新nfs或者重新输出共享目录:
[root@localhost web]# exportfs -rv
exporting 192.168.74.0/24:/web
2.node节点
安装nfs软件即可:
yum install nfs-utils -y
二.编写并且执行yaml文件
在master节点上操作
1.创建NFS类型的storageclass
先创建一个文件夹吧:
cd /
mkdir storage/
cd storage/
mkdir pv-pvc
cd pv-pvc
编写yaml文件:
[root@master-1 pv-pvc]# vim nfs-sc.yaml
[root@master-1 pv-pvc]# cat nfs-sc.yaml
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: example-nfs
provisioner: sc.com/sc-nfs
parameters:
server: 192.168.74.159
path: /web
readOnly: "false"
执行yaml文件:
[root@master-1 pv-pvc]# kubectl apply -f nfs-sc.yaml
storageclass.storage.k8s.io/example-nfs created
[root@master-1 pv-pvc]# kubectl get sc
NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE
example-nfs sc.com/sc-nfs Delete Immediate false 4h40m
2.创建pv
编写yaml文件:
[root@master-1 pv-pvc]# vim pv-nfs.yaml
[root@master-1 pv-pvc]# cat pv-nfs.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
name: sc-nginx-pv-2 ######
labels:
type: sc-nginx-pv-2 ######
spec:
capacity:
storage: 5Gi
accessModes:
- ReadWriteMany ######
storageClassName: nfs #pv对应的名字 ######
nfs:
path: "/web" #nfs共享的目录 ######
server: 192.168.74.159 #nfs服务器的ip地址
readOnly: false #访问模式
执行:
[root@master-1 pv-pvc]# kubectl apply -f pv-nfs.yaml
persistentvolume/sc-nginx-pv-2 created
[root@master-1 pv-pvc]# kubectl get pv
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
sc-nginx-pv-2 5Gi RWX Retain Bound default/sc-nginx-pvc-1 nfs 6m24s
3.创建pvc
编辑:
[root@master-1 pv-pvc]# vim pvc-nfs.yaml
[root@master-1 pv-pvc]# cat pvc-nfs.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: sc-nginx-pvc-1
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 1Gi
storageClassName: nfs #使用nfs类型的pv,指定pv
执行:
[root@master-1 pv-pvc]# kubectl apply -f pvc-nfs.yaml
persistentvolumeclaim/sc-nginx-pvc-1 created
[root@master-1 pv-pvc]# kubectl get pvc
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
sc-nginx-pvc-1 Bound sc-nginx-pv-2 5Gi RWX nfs 4s
4.创建pod
编写:
[root@master-1 pv-pvc]# vim pod-nfs.yaml
[root@master-1 pv-pvc]# cat pod-nfs.yaml
apiVersion: v1
kind: Pod
metadata:
name: sc-pv-pod-nfs
spec:
volumes:
- name: sc-pv-storage-nfs
persistentVolumeClaim:
claimName: sc-nginx-pvc-1
containers:
- name: sc-pv-container-nfs
image: nginx
imagePullPolicy: IfNotPresent
ports:
- containerPort: 80
name: "http-server"
volumeMounts:
- mountPath: "/usr/share/nginx/html" # 容器内部的挂载点
name: sc-pv-storage-nfs
执行:
[root@master-1 pv-pvc]# kubectl apply -f pod-nfs.yaml
pod/sc-pv-pod-nfs created
[root@master-1 pv-pvc]# kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
php-apache-748554cb8-h2fhg 1/1 Running 1 5h50m 10.244.84.167 node-1 <none> <none>
sc-pv-pod-nfs 1/1 Running 0 6m25s 10.244.84.168 node-1 <none> <none>
验证结果
在任意节点访问nginx服务
[root@master-1 pv-pvc]# curl 10.244.84.168
welcome to hunan sanchuang!!!
this is a beautiful city!!
搞定!!!