Rancher入门到精通-2.0 docker ps -a 命令执行 无任何反应

本章目录

  1. 存储分类
  2. emptydir
  3. hostpath
  4. pvc,pv,nfs

一 k8s存储分类

  我一直相信画出图来再去了解比较直观,下面是我总结的k8s存储的分类,供参考

Rancher入门到精通-2.0 docker ps -a 命令执行 无任何反应_第1张图片

  k8s的存储常用的就是上面几种模式,分为临时存储,半持久化存储,与持久化存储这三类,本章我们着重讲解emptydir与hostpath与pvc跟pv等

二  emptydir

  1 emptydir是什么

  当pod的存储方案设定为emptydir的时候,pod启动时,就会在pod所在节点的磁盘空间开辟出一块空卷,最开始里面是什么都没有的,pod启动后容器产生的数据会存放到那个空卷中。空卷变成了一个临时卷

  供pod内的容器读取和写入数据,一旦pod容器消失,节点上开辟出的这个临时卷就会随着pod的销毁而销毁

 

  2 emptydir的用途

  •  充当临时存储空间,当pod内容器产生的数据不需要做持久化存储的时候用emptydir 
  •    设制检查点以从崩溃事件中恢复未执行完毕的长计算

  一般来说emptydir的用途都是用来充当临时存储空间,例如一些不需要数据持久化的微服务,我们都可以用emptydir来当做微服务pod的存储方案

 

  3 emptydir例子 

 

 1 apiVersion: v1
 2 kind: Pod
 3 metadata:
 4   name: test-pd
 5 spec:
 6   containers:
 7   - image: k8s.gcr.io/test-webserver
 8     name: test-container
 9     volumeMounts:
10     - mountPath: /cache    #挂载到容器中的路径
11       name: cache-volume
12   volumes:
13   - name: cache-volume
14     emptyDir: {}   #指定存储方式为emptydir

 

 

  

三  hostpath

  1 hospath 是什么

  hostPath类型则是映射node文件系统中的文件或者目录到pod里。在使用hostPath类型的存储卷时,也可以设置type字段,支持的类型有文件、目录、File、Socket、CharDevice和BlockDevice(我只映射过文件与目录)。

  其实这个功能就相当于docker中的-v  目录映射,只不过在k8s中的时候,pod会漂移,当pod漂移到其他node节点的时候,pod不会跨节点的去读取目录。所以说hostpath只能算一种半持久化的存储方式

 

  2 hostpath用途

  • 当运行的容器需要访问Docker内部结构时,如使用hostPath映射/var/lib/docker到容器;
  • 当在容器中运行cAdvisor时,可以使用hostPath映射/dev/cgroups到容器中;

 

  3 hostpath 例子

  

 

 1 apiVersion: v1
 2 kind: Pod
 3 metadata:
 4   name: test-pd
 5 spec:
 6   containers:
 7   - image: k8s.gcr.io/test-webserver
 8     name: test-container
 9     volumeMounts:
10     - mountPath: /test-pd
11       name: test-volume
12   volumes:
13   - name: test-volume
14     hostPath:
15       # directory location on host
16       path: /data            #node节点上的路径
17       # this field is optional
18       type: Directory   #path的属性,下面会介绍可选属性的值

 

 

 Rancher入门到精通-2.0 docker ps -a 命令执行 无任何反应_第2张图片

 

四  持久化存储-pvc  pv    nfs

  上面介绍了俩种临时存储于半持久化存储的方案。在k8s实际生产环境中,一般会选用私有云持久化存储方案还有公有云持久化存储方案,私有云存储方案包括nfs,ceph,glusterfs等方案。公有云存储会用到AWS等方案

  存储方案各有各的优缺点,可参考https://www.cnblogs.com/yswenli/p/7234579.html这篇文章。今天我们主要讲解pvc,pv,nfs之间的关系。

  简单来说,要使用持久化存储,就需要使用pvc去跟pv去申请,然后pv查看自己有没有合适的存储空间卷,有合适的就与pvc进行绑定。pv与pvc是一一对应绑定的。现在我们用一幅图来说明pvc,pv,nfs的关系

 Rancher入门到精通-2.0 docker ps -a 命令执行 无任何反应_第3张图片

    针对上面的图做一下说明

 

 

  1 pod的yaml中先指明存储选择pvc申请方式

 

 1 apiVersion: v1
 2 kind: Pod
 3 metadata:
 4   name: pvnginx
 5   labels:
 6     app: pvnginx
 7 spec:
 8   containers:
 9     - name: my-pvnginx
10       image: nginx
11       ports:
12         - name: http
13           containerPort: 80
14         - name: https
15           containerPort: 443
16        volumeMounts:
17          - name: html
18            mountPath: /data/html
19   volumes:
20     - name: html
21       persistentVolumeClaim:    #指明使用pvc模式
22         claimname: mypvc        #指明使用的pvc名称,下面我们需要建一个叫做mypvc的yaml资源

 

  

 

 

  2 创建一个叫做mypvc的pvc   yaml资源

 

 1 apiVersion: v1
 2 kind: persisitentVolumeClaim
 3 metadata:
 4   name: mypvc
 5   namespace: default
 6 spec:
 7   accessmodes: ["ReadWriteMany"]   #一共有三种模式,下面会一一说明
 8   resources:      #指定资源说明
 9     requests:         #指定请求
10       storage: 4Gi       #指定请求存储空间的大小

 

   * ReadWriteOnce – PV以 read-write 挂载到一个节点
  * ReadOnlyMany – PV以read-only方式挂载到多个节点
  * ReadWriteMany – PV以read-write方式挂载到多个节点

 

 

  3 设置符合条件的pv

 

 1 apiVersion: v1
 2 kind: PersistentVolume
 3 metadata:
 4   name: pv01
 5   labels:
 6     name: pv01
 7 spec:
 8   accessModes: ["ReadWriteMany"]
 9   capacity:
10     storage: 5Gi
11 
12   nfs:
13     server: 192.168.115.6    
14     path:  /home

 

 

 

  4 nfs创建存储卷

  NFS 是Network File System的缩写,即网络文件系统。Kubernetes中通过简单地配置就可以挂载NFS到Pod中,而NFS中的数据是可以永久保存的,同时NFS支持同时写操作。

 

1 # yum -y install nfs-util*
2 # cat /etc/exports
3 /home 192.168.115.0/24(rw,sync,no_root_squash)
4 # systemctl start rpcbind
5 # systemctl start nfs
6 # showmount -e 127.0.0.1
7 Export list for 127.0.0.1:
8 /home 192.168.115.0/24

 

  

 

  上面就是创建私有云存储方案的一个例子。当我们要使用持久化存储的时候,大体步骤是这样的

  • 首先选择是什么存储,是公有云存储还是私有云存储
  • 公有云存储方案根据厂商的不通,配置方法也不同。这个要根据厂商文档来操作。私有云存储的时候,选择好文件系统(ceph,glusterfs,nfs,moosefs)
  • 搭建好文件系统之后,创建不通存储大小的pv资源(如果业务量大,pod多,需要采用动态的pv,动态pv在k8s实战中会讲解)
  • 文件系统与pv都搭建好之后,根据pod去分配存储空间,然后创建对应的pvc就可以使用存储了

 

原文:https://www.cnblogs.com/mhy-blog/p/10831311.html

你可能感兴趣的:(云计算)