美文网首页
面向yaml编程---k8s使用nfs服务

面向yaml编程---k8s使用nfs服务

作者: 明天你好_ee9a | 来源:发表于2020-09-22 17:26 被阅读0次

上一文已经说到了Linux的nfs服务,本文是将nfs服务应用到k8s上。

在这里要先理解好为什么需要nfs服务?

因为NFS 是一个网络文件系统,它允许网络中的计算机之间通过TCP/IP网络共享资源,这样子就可以帮助我们解决k8是数据储存的问题。k8s是容器编排系统,容器就涉及到cpu,内存,硬盘等调度分配,nfs就是k8s储存的一个解决方案

理解k8s的pv/pvc

关于pvc

1.accessMode:访问模型;对象列表:

  • ReadWriteOnce – the volume can be mounted as read-write by a single node: RWO - ReadWriteOnce一人读写
  • ReadOnlyMany – the volume can be mounted read-only by many nodes: ROX - ReadOnlyMany 多人只读
  • ReadWriteMany – the volume can be mounted as read-write by many nodes: RWX - ReadWriteMany多人读写

2.resource:资源限制(比如:定义5GB空间,我们期望对应的存储空间至少5GB。)
3.selector:标签选择器。不加标签,就会在所有PV找最佳匹配。
4.storageClassName:存储类名称:
5.volumeMode:指后端存储卷的模式。可以用于做类型限制,哪种类型的PV可以被当前claim所使用。
6.volumeName:卷名称,指定后端PVC(相当于绑定)

PV和PVC是一一对应关系,当有PV被某个PVC所占用时,会显示banding,其它PVC不能再使用绑定过的PV。
PVC一旦绑定PV,就相当于是一个存储卷,此时PVC可以被多个Pod所使用。(PVC支不支持被多个Pod访问,取决于访问模型accessMode的定义)。
PVC若没有找到合适的PV时,则会处于pending状态。
PV是属于集群级别的,不能定义在名称空间中,而PVC时属于名称空间级别的
PV的reclaim policy选项:

  • 默认是Retain保留,保留生成的数据。
  • 可以改为recycle回收,删除生成的数据,回收pv
  • delete,删除,pvc解除绑定后,pv也就自动删除。

现在开始编写pv vim mypv.yaml

apiVersion: v1
kind: PersistentVolume
metadata:
  name: pv001
spec:
  capacity:
    storage: 10Gi
  accessModes:
    - ReadWriteMany
  nfs:
    path: /home/nfs
    server: 192.168.0.159

应用该pv

[root@master pv]# kubectl create -f mypv.yaml
[root@master pv]# kubectl get pv
NAME    CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM             STORAGECLASS   REASON   AGE
pv001   10Gi       RWX            Retain           Bound    default/myclaim                           4h20m

编写pvc vim mypvc.yaml

kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: myclaim
spec:
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 1Gi

应用pvc kubectl create -f mypvc.yaml

[root@master pv]# kubectl get pvc
NAME                   STATUS    VOLUME   CAPACITY   ACCESS MODES   STORAGECLASS          AGE
myclaim                Bound     pv001    10Gi       RWX                                  4h35m
编写pod 的yaml, vim myapp.yaml
apiVersion: v1
kind: Pod
metadata:
  name: myapp-demo
  namespace: default
spec:
  containers:
  - name: myapp
    image: ikubernetes/myapp:v1
    imagePullPolicy: IfNotPresent
    ports:
    - name: html
      containerPort: 80
    volumeMounts:
    - name: nfs
      mountPath: "/usr/share/nginx/html"
  volumes:
  - name: nfs
    persistentVolumeClaim:
      claimName: myclaim #绑定之前创建好的pvc

创建pod并查看状态

[root@master pv]# kubectl create -f myapp.yaml
[root@master pv]# kubectl get pods -owide
NAME                                      READY   STATUS             RESTARTS   AGE   IP            NODE     NOMINATED NODE   READINESS GATES
myapp-demo                                1/1     Running            0          77m   10.244.2.24   node2    <none>           <none>

测试 进入到/home/nfs目录 编写测试文件

[root@master pv]# cd /home/nfs/
[root@master nfs]# ll
总用量 0
[root@master nfs]# vim index.html
<!DOCTYPE html>
<html>
<head>
        <title></title>
</head>
<body>
        <h1>hello world!</h1>
</body>
</html>
访问
[root@master nfs]# curl 10.244.2.24
<!DOCTYPE html>
<html>
<head>
    <title></title>
</head>
<body>
    <h1>hello world!</h1>
</body>
</html>

k8s pv/pvc 的简单使用验证成功

相关文章

网友评论

      本文标题:面向yaml编程---k8s使用nfs服务

      本文链接:https://www.haomeiwen.com/subject/mfbnyktx.html