kubernetes——pv+pvc+nfs实验

目录

简介

实验环境

实验描述

实验步骤

1.先画好实验流程图,方便确定每台机器的作用,避免混淆

2.在每台机器上安装好nfs-utils软件包

3.验证能否挂载成功

4.在master机器上创建pv使用nfs服务器上的共享目录

5.在master机器上创建pvc使用pv

6.在master机器上创建pod使用pvc

7.测试


简介

 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
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值