前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Kubernetes(七) - Volume

Kubernetes(七) - Volume

作者头像
喵了个咪233
发布2022-03-24 10:47:58
4130
发布2022-03-24 10:47:58
举报

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.本地磁盘

代码语言:javascript
复制
> 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
然后我们就可以对对进行进行挂载了
代码语言:javascript
复制
> 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盘作为挂载盘,用法如下

代码语言:javascript
复制
> 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盘

代码语言:javascript
复制
> 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
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018/07/11 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Kubernetes(七) - Volume
    • 1.本地磁盘
      • 2.NAS网络盘
        • 3. 其他Volume支持类型
        相关产品与服务
        容器镜像服务
        容器镜像服务(Tencent Container Registry,TCR)为您提供安全独享、高性能的容器镜像托管分发服务。您可同时在全球多个地域创建独享实例,以实现容器镜像的就近拉取,降低拉取时间,节约带宽成本。TCR 提供细颗粒度的权限管理及访问控制,保障您的数据安全。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档