文档章节

Kubernetes(七) - Volume

喵了_个咪
 喵了_个咪
发布于 2018/07/11 18:02
字数 747
阅读 93
收藏 2

Kubernetes(七) - Volume

Docker是无状态的不管被销毁多少次都会恢复到最初的状态,但是这就意味着在程序过程中产生的配置也好文件也好会丢失,对于Docker我们经常会使用磁盘挂载的方式来保存一些重要的内容,比如运行在Docker下的数据库的源数据,比如程序的日志文件等,在K8S中也提供同样的配置方式

PS: 磁盘使用中1.8 和 1.9存在差异,1.8需要创建PersistentVolume在创建之后才能创建PersistentVolumeClaim,1.9之后只需要创建PersistentVolumeClaim就可以了

Kubernetes官方文档:https://kubernetes.io/docs/reference/

Kubernetes官方Git地址:https://github.com/kubernetes/kubernetes

PS:本系列中使用 KubernetesV1.8 RancherV1.6.14

1.本地磁盘

> vim local-pv.yaml

apiVersion: v1
kind: PersistentVolume
metadata:
  name: local-pv-1
  labels:
    type: local
spec:
  capacity:
    storage: 20Gi
  accessModes:
    - ReadWriteOnce
  hostPath:
    path: /tmp/data/pv-1
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: redis-pv-claim
  labels:
    app: redis
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 20Gi

> kubectl create -f local-pv.yaml
persistentvolume "local-pv-1" created
persistentvolumeclaim "mysql-pv-claim" created

然后我们就可以对对进行进行挂载了

> vim volume-local.yaml
apiVersion: v1
kind: Pod
metadata:
  name: volume-local-pod
spec:
  containers:
  - name: mypod
    image: redis
    volumeMounts:                         # 磁盘挂载
      - name: redis-pv-claim
        mountPath: "/etc/redis"
  volumes:                                  # 磁盘挂载别称定义
  - name: redis-pv-claim
    persistentVolumeClaim:
      claimName: redis-pv-claim
> kubectl create -f volume-local.yaml
pod "volume-local-pod" created

这个时候容器的节点在K8S-S1上我们看一下是否保存到了K8S-S1的磁盘上了吗

2.NAS网络盘

但是这样做有一个很大的弊端,如果这个Pod重启可能会被调度到其他的节点上,那么对应挂载盘的就会情况,这里有两种方式解决,第一种就是固定Pod运行的节点,在就是使用共享磁盘(首先你需要创建一个NAS盘)

一般用的比较频繁的就是NAS盘作为挂载盘,用法如下

> vim nfs-pv.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
  name: nfs-pv
spec:
  capacity:
    storage: 5Gi
  accessModes:
    - ReadWriteMany
  nfs:
    server: xxxxxx.cn-hangzhou.nas.aliyuncs.com   # nfs的地址
    path: "/"                                     # nfs的挂载目录(一定需要有这个文件目录)
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: nfs-pv
spec:
  accessModes:
    - ReadWriteMany
  storageClassName: ""
  resources:
    requests:
      storage: 5Gi

> kubectl create -f nfs-pv.yaml
persistentvolume "nfs-pv" created
persistentvolumeclaim "nfs-pv" created

我们创建两个Pod共享一个NAS盘

> vim volume-nfs.yaml
apiVersion: extensions/v1beta1 
kind: Deployment
metadata:
  name: volume-nfs
spec:
  replicas: 2  
  template:
    metadata:
      labels:                                   # 容器的标签 可和service关联
        app: volume-nfs
    spec:
      containers:
      - name: mypod
        image: redis
        volumeMounts:                         # 磁盘挂载
          - name: nfs-pv
            mountPath: "/etc/redis"
      volumes:                                  # 磁盘挂载别称定义
      - name: nfs-pv
        persistentVolumeClaim:
          claimName: php-general-test
> kubectl create -f volume-nfs.yaml
deployment "volume-nfs" created

两个Pod分别在不同的节点中

3. 其他Volume支持类型

具体使用明细可以参考官方文档: Volumes | Kubernetes

  • awsElasticBlockStore
  • azureDisk
  • azureFile
  • cephfs
  • downwardAPI
  • emptyDir
  • fc (光纤通道)
  • flocker
  • gcePersistentDisk
  • gitRepo
  • glusterfs
  • hostPath
  • iscsi
  • local
  • nfs
  • persistentVolumeClaim
  • projected
  • portworxVolume
  • quobyte
  • rbd
  • scaleIO
  • secret
  • storageos
  • vsphereVolume

© 著作权归作者所有

共有 人打赏支持
喵了_个咪
粉丝 327
博文 150
码字总数 199180
作品 4
杨浦
技术主管
私信 提问
MAC环境下Docker整合Kubernetes

一:MAC系统安装最新的Docker版本(18.6.0),安装好之后启动Docker容器,切换到Kubernetes如图勾选 二:有个地方要注意的是添加国内注册地址(GreatWall大家懂得) 三:在启动Kubernetes之前需要...

WALK_MAN
2018/08/02
0
0
Kubernetes Ingress 模块初探

Ingress是Kubernetes中用于对Service进行公网负载均衡的一个模块,要使用ingress资源,必须有对应的ingress controller来管控ingress。业务需要实现定制化的ingress controller,将ingress资...

bellengao
2018/06/24
0
0
七款Kubernetes工具助您扩展容器架构

最初由Google开发的容器编排工具Kubernetes已成为敏捷和DevOps团队的重要资源。作为一个开源工具,Kubernetes正在成为一个生态系统,而其他工具也正在开发一些组件来支持Kubernetes。这些扩展...

Docker
2018/07/06
0
0
手把手教你构建 Kubernetes 1.8 + Flannel 网络(三)

关于 Kubernetes 1.8 + Flannel 的分享今天就完成了,需要完整资料和代码(包括所需的包)的看文章底部的领取方式。 六.Docker-registry web 私有仓库构建 环境说明: 我们选取 master 192.1...

51reboot
2018/01/05
0
0
如何在 Kubernetes 环境中搭建 MySQL (一):简介

  最近因为工作上的需求,搭建了一套部署在 Kubernetes 环境中的 MySQL,可能听起来就是让 MySQL 的 docker image 跑在 Kubernetes 里,应该没什么难度,可实际操作起来,这其实是相当复杂...

blackpiglet
2018/05/07
0
0

没有更多内容

加载失败,请刷新页面

加载更多

开始看《Java学习笔记》

虽然书买了很久,但一直没看。这其中也写过一些Java程序,但都是基于IDE的帮助和对C#的理解来写的,感觉不踏实。 林信良的书写得蛮好的,能够帮助打好基础,看得出作者是比较用心的。 第1章概...

max佩恩
昨天
11
0
Redux 三大原则

1.单一数据源 在传统的MVC架构中,我们可以根据需要创建无数个Model,而Model之间可以互相监听、触发事件甚至循环或嵌套触发事件,这些在Redux中都是不被允许的。 因为在Redux的思想里,一个...

wenxingjun
昨天
7
0
跟我学Spring Cloud(Finchley版)-12-微服务容错三板斧

至此,我们已实现服务发现、负载均衡,同时,使用Feign也实现了良好的远程调用——我们的代码是可读、可维护的。理论上,我们现在已经能构建一个不错的分布式应用了,但微服务之间是通过网络...

周立_ITMuch
昨天
4
0
XML

学习目标  能够说出XML的作用  能够编写XML文档声明  能够编写符合语法的XML  能够通过DTD约束编写XML文档  能够通过Schema约束编写XML文档  能够通过Dom4j解析XML文档 第1章 xm...

stars永恒
昨天
2
0
RabbitMQ学习(2)

1. 生产者客户端 void basicPublish(String exchange, String routingKey, boolean mandatory, boolean immediate, BasicProperties props, byte[] body) 1. 在生产者客户端发送消息时,首先......

江左煤郎
昨天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部