kubernetes——pv+pvc+nfs实验
4台centos7虚拟机 (都已经搭建好k8s)
目录
4.在master机器上创建pv使用nfs服务器上的共享目录
简介
PersistentVolume(PV)是一块集群里由管理员手动提供,或 kubernetes 通过 StorageClass 动态创建的存储。 PersistentVolumeClaim(PVC)是一个满足对 PV 存储需要的请求。
持久卷申领(PersistentVolumeClaim,PVC)表达的是用户对存储的请求。概念上与 Pod 类似。 Pod 会耗用节点资源,而 PVC 申领会耗用 PV 资源。Pod 可以请求特定数量的资源(CPU 和内存);同样 PVC 申领也可以请求特定的大小和访问模式 (例如,可以要求 PV 卷能够以 ReadWriteOnce、ReadOnlyMany 或 ReadWriteMany 模式之一来挂载,参见访问模式)。
实验环境
4台centos7虚拟机 (都已经搭建好k8s)
实验描述
使用pv持久卷和pvc持久卷申请结合nfs将内网的数据发布出去,让外网的用户可以访问到内网的数据,更深刻的理解pv、pvc和nfs的使用流程,有更深刻的体会。
实验步骤
1.先画好实验流程图,方便确定每台机器的作用,避免混淆
本实验直接用node1节点作为nfs服务器,也可以用其他的机器作为nfs服务器
2.在每台机器上安装好nfs-utils软件包
[root@node1 nfs]# yum install nfs-utils -y
在nfs服务器上创建共享目录,并写入内容到一个html文件中,方便后面查看
[root@node1 nfs]# mkdir -p /sc/web
[root@node1 nfs]# cd /sc/web
[root@node1 web]# echo "welcome to sc" >>index.html
[root@node1 web]# ls
index.html
[root@node1 web]# cat index.html
welcome to sc
nfs服务器上启动nfs服务
[root@node1 nfs]# service nfs start
[root@node1 nfs]# service enable nfs 设置开机自动启动
在nfs服务器上编辑/etc/exports文件,让指定网段的机器可以挂载在我的共享目录中
[root@node1 nfs]# vim /etc/exports
/sc/web 102.167.107.0/24(rw,no_root_squash,sync)
命令介绍:
/sc/web 共享的目录的路径
192.168.107.0/24 允许能访问的机器的网段
(rw,sync,all_squash) 拥有的权限 rw 可以读写 sync 在host上修改了数据,里面同步到nfs服务器
all_squash 当登录NFS主机使用共享目录的使用者是root时,其权限将被转换成为匿名使用者,通常它的UID与GID都会变成nobody身份
刷新nfs服务或者重新输出共享目录
[root@node1 web]# exportfs -a 输出所有共享目录
[root@node1 web]# exportfs -v 显示输出的共享目录
/sc/web 192.168.107.0/24(sync,wdelay,hide,no_subtree_check,sec=sys,rw,secure,no_root_squash,no_all_squash)
[root@node1 web]# exportfs -r 重新输出所有的共享目录
[root@node1 web]# exportfs -v
/sc/web 192.168.107.0/24(sync,wdelay,hide,no_subtree_check,sec=sys,rw,secure,no_root_squash,no_all_squash)
[root@node1 web]#
[root@node1 web]# service nfs restart 重启nfs服务
Redirecting to /bin/systemctl restart nfs.service
[root@master web]#
3.验证能否挂载成功
在master或者node1和node2机器上挂载到nfs的共享目录
[root@node2 hejin]# mkdir /sc
[root@node2 hejin]# mount 192.168.107.145:/sc/web /sc
验证,输入df -Th|grep nfs,若输出结果,则表示挂载成功
[root@node2 sc]# df -Th|grep nfs
192.168.107.145:/sc/web nfs4 17G 6.7G 11G 39% /sc
4.在master机器上创建pv使用nfs服务器上的共享目录
[root@master 55]# vim nfs-pv.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
name: sc-nginx-pv
labels:
type: sc-nginx-pv
spec:
capacity:
storage: 5Gi
accessModes:
- ReadWriteMany
storageClassName: nfs #pv对应的名字
nfs:
path: "/sc/web" #nfs共享的目录
server: 192.168.107.145 #nfs服务器的ip地址
readOnly: false #访问模式
[root@master 55]#
应用和查看
[root@master 55]# kubectl apply -f nfs-pv.yaml
persistentvolume/sc-nginx-pv created
[root@master 55]# kubectl get pv
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
sc-nginx-pv 5Gi RWX Retain Available nfs 5s
task-pv-volume 10Gi RWX Retain Bound default/task-pv-claim manual 24h
task-pv-volume-2 10Gi RWX Retain Bound default/task-pv-claim-2 manual2 57m
[root@master 55]#
5.在master机器上创建pvc使用pv
[root@master 55]# vim pvc-nfs.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: sc-nginx-pvc
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 1Gi
storageClassName: nfs #使用nfs类型的pv
应用和查看
[root@master 55]# kubectl apply -f pvc-nfs.yaml
persistentvolumeclaim/sc-nginx-pvc created
[root@master 55]# kubectl get pvc
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
sc-nginx-pvc Bound sc-nginx-pv 5Gi RWX nfs 5s
task-pv-claim Bound task-pv-volume 10Gi RWX manual 24h
task-pv-claim-2 Bound task-pv-volume-2 10Gi RWX manual2 58m
6.在master机器上创建pod使用pvc
[root@master 55]# vim pod-nfs.yaml
apiVersion: v1
kind: Pod #这里使用pod方式去部署,下面也会介绍用deployment方式部署
metadata:
name: sc-pv-pod-nfs
spec:
volumes:
- name: sc-pv-storage-nfs
persistentVolumeClaim:
claimName: sc-nginx-pvc
containers:
- name: sc-pv-container-nfs
image: nginx
ports:
- containerPort: 80
name: "http-server"
volumeMounts:
- mountPath: "/usr/share/nginx/html"
name: sc-pv-storage-nfs
应用和验证
[root@master 55]# kubectl apply -f pod-nfs.yaml
pod/sc-pv-pod-nfs created
[root@master 55]#
[root@master 55]# kubectl get pod -o wide|grep nfs
sc-pv-pod-nfs 1/1 Running 0 22s 10.244.3.84 node3 <none> <none>
7.测试
在maser机器上访问pod的sc-pv-pod-nfs的ip,如果输出nfs服务器共享文件的内容,则证明成功
[root@master 55]# curl 10.244.3.84
welcome to sanchuang
[root@master 55]#
在nfs服务器上修改共享目录的内容,然后再重新在mater机器上访问,观察是否变化,若跟nfs服务器上的共享目录一样,则证明成功
升级版本:使用deployment方式部署pod
注意:如果刚刚做完了上面的实验效果,先要删除pod的方式,输入kubectl delete -f pod-nfs.yaml,然后再进行下面的操作
[root@master 55]vim pod-nfs.yaml
apiVersion:apps/v1
kind: Deployment
metadata:
name: nginx-deployment
labels:
app: zhou-nginx
spec:
replicas: 5 #创建5个副本
selector:
matchLabels:
app: zhou-nginx
template:
metadata:
labels:
app: zhou-nginx
spec:
volumes:
- name: sc-pv-storage-nfs-2
persistentVolumeClaim:
claimName: sc-nginx-pvc
containers:
- name: sc-pv-container-nfs-2
image: nginx
ports:
- containerPort: 80
name: "http-server"
volumeMounts:
- mountPath: "/usr/share/nginx/html"
name: sc-pv-storage-nfs-2
应用和查看
[root@master 55]kubectl apply -f pod-nfs.yaml
[root@master pv]# kubectl get pod
NAME READY STATUS RESTARTS AGE
my-nginx-575db987b-8w76d 1/1 Running 0 6h32m
my-nginx-575db987b-tmp8c 1/1 Running 0 6h32m
my-nginx-575db987b-xk4t6 1/1 Running 0 6h32m
nginx-deployment-845d67c665-6gqv2 1/1 Running 0 7m34s
nginx-deployment-845d67c665-czrjt 1/1 Running 0 7m34s
nginx-deployment-845d67c665-f4mh8 1/1 Running 0 7m34s
nginx-deployment-845d67c665-fq2dr 1/1 Running 0 7m34s
nginx-deployment-845d67c665-zmzgb 1/1 Running 0 7m34s
php-apache-7c97954b84-x6m8h 1/1 Running 0 6h32m
test-pd 1/1 Running 0 6h2m
test-pd-2 1/1 Running 0 5h53m
然后创建一个service发布
[root@master pv]# cat my_service.yaml
apiVersion: v1
kind: Service
metadata:
name: my-nginx-nfs
labels:
run: my-nginx-nfs
spec:
type: NodePort
ports:
- port: 8070
targetPort: 80
protocol: TCP
name: http
selector:
app: zhou-nginx #注意这里要用app的形式,跟前面的nfs-pod文件对应,有些使用方法是run,不要搞错了
应用
[root@master 55]kubectl apply -f my_service.yaml
查看
[root@master pv]# kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.1.0.1 <none> 443/TCP 4d1h
my-nginx NodePort 10.1.72.105 <none> 8090:32692/TCP 2d3h
my-nginx-nfs NodePort 10.1.79.205 <none> 8070:31087/TCP 17s #这里的31087则是我们验证要访问的端口号
mydb ClusterIP 10.1.242.159 <none> 80/TCP 34h
myservice ClusterIP 10.1.74.140 <none> 80/TCP 34h
php-apache ClusterIP 10.1.217.140 <none> 80/TCP 27h
测试访问
随意访问一台主机的ip地址的31087端口,看是否出现画面
则证明发布成功
更多推荐
所有评论(0)