精华内容
下载资源
问答
  • Volume

    千次阅读 2018-05-06 13:41:43
    默认情况下容器的数据都是非持久化的,在容器消亡以后数据也跟着丢失,所以 Docker 提供了 Volume 机制以便将数据持久化存储。类似的,Kubernetes 提供了更强大的 Volume 机制和丰富的插件,解决了容器数据持久化和...

    概述


    什么是Valume

    默认情况下容器的数据都是非持久化的,在容器消亡以后数据也跟着丢失,所以 Docker 提供了 Volume 机制以便将数据持久化存储。类似的,Kubernetes 提供了更强大的 Volume 机制和丰富的插件,解决了容器数据持久化和容器间共享数据的问题。

    与 Docker 不同,Kubernetes Volume 的生命周期与 Pod 绑定。容器挂掉后 Kubelet 再次重启容器时,Volume 的数据依然还在,而 Pod 删除时,Volume 才会清理。数据是否丢失取决于具体的 Volume 类型,比如 emptyDir 的数据会丢失,而 PV 的数据则不会丢

    Volume类型

    目前,Kubernetes 支持以下 Volume 类型:
    emptyDir、hostPath、hostPath、gcePersistentDisk、awsElasticBlockStore、nfs、iscsi、flocker、glusterfs、rbd、cephfs、gitRepo、secret、persistentVolumeClaim、downwardAPI、azureFileVolume、azureDisk、vsphereVolume、Quobyte、PortworxVolume、ScaleIO、FlexVolume、StorageOS、local

    用的比较多的是:emptyDir、hostPath、nfs、glusterfs

    本地数据卷


    emptyDir

    emptyDir表示空目录,会在宿主机上创建数据卷目录并挂在到容器中。

    创建emptyDir类型的数据卷

    下面通过yaml文件创建一个emptyDir类型的数据卷:

    apiVersion: v1
    kind: Pod
    metadata:
      name: redis-pod
    spec:
      containers:
      - image: redis
        name: redis
        volumeMounts:
        - mountPath: /cache
          name: cache-volume
      volumes:
      - name: cache-volume
        emptyDir: {}

    这里会创建一个叫redis-pod的pod,使用redis镜像,然后创建了一个emptyDir类型的volume,并挂载到容器的/cache。注意在yaml文件中volumes的定义和containers的定义在同一级。

    创建这个pod:

    kubectl create -f empty.yaml

    这里写图片描述

    查看数据卷

    进入到这个pod中,可以看到我们挂载的cache目录:
    这里写图片描述

    hostPath

    可以将宿主机中的目录挂载到容器中。

    创建hostPath类型的volume

    通过yaml文件创建:

    apiVersion: v1
    kind: Pod
    metadata:
      name: test-pd
    spec:
      containers:
      - image: nginx
        name: test-container
        volumeMounts:
        - mountPath: /tmp-test
          name: test-volume
      volumes:
      - name: test-volume
        hostPath:
          path: /tmp
          type: Directory

    这里指定了源宿主机路径为/tmp,并指定它的类型为目录,将它挂在到容器的/tmp-test上

    创建:

    kubectl create -f hostpath.yaml 

    这里写图片描述

    查看volume

    进入这个pod:
    这里写图片描述

    可以看到容器将宿主机中的tmp目录挂载到了容器中的tmp-test上,其中的文件就是宿主机的文件。

    因为我实在master上查看的,所以下意识看了一下master上的tmp文件,发现文件名不对啊,后来想到应该是看node节点的tmp目录

    查看下pod分配到了哪个node,并查看该node下的tmp目录:
    这里写图片描述

    应用场景

    比如说做宿主机性能分析的应用,将proc等目录挂载到容器中可以用到,因为这些目录在任何宿主机上都有。

    网络数据卷


    NFS

    安装nfs

    首先另起一台虚拟机安装nfs:

    yum install -y rpcbind
    yum install -y nfs-utils

    配置exports:
    echo "/opt/nfs/data *(rw,no_root_squash)" >> /etc/exports

    创建nfs挂载文件的相关目录:

    mkdir -p /opt/nfs/data
    touch /opt/nfs/data/index.html
    echo "This is nfs volume test for k8s" >  /opt/nfs/data/index.html

    启动nfs:

    /etc/init.d/rpcbind start
    /etc/init.d/nfs start  

    创建nfs类型的volume

    通过yaml文件配置:

    apiVersion: extensions/v1beta1
    kind: Deployment
    metadata:
      name: nginx-nfs
    spec:
      replicas: 3
      template:
        metadata:
          labels:
            app: nginx-nfs
        spec:
          containers:
          - name: nginx-nfs
            image: nginx
            volumeMounts:
            - name: wwwroot
              mountPath: /usr/share/nginx/html
            ports:
            - containerPort: 80
          volumes:
          - name: wwwroot
            nfs:
            server: 10.10.109.19
            path: /opt/nfs/data

    这里指定了创建3副本的nginx,并指定nfs数据卷服务器为10.10.109.19,挂载/opt/wwwroot到容器的/usr/share/nginx/html

    创建:

    kubectl create -f nfs.yaml

    这里写图片描述

    访问测试

    首先将pod作为服务发布:

    apiVersion: v1
    kind: Service
    metadata:
      name: nginx-nfs-svc 
      labels:
        app: nginx-nfs
    spec:
      ports:
      - port: 90
        targetPort: 80
      selector:
        app: nginx-nfs

    发布:

    kubectl create -f nginx-service.yaml

    这里写图片描述

    在node节点通过ClusterIP进行访问.

    GlusterFS

    这是一个主流的分布式的存储,可以保证数据的可靠性和提高性能。

    Presustent Volumes 持久卷


    相关概念

    Presustent Volumes:又称为 PV,持久卷,是对存储抽象实现,是的存储作为集群中的资源。
    Presustent VolumesClaim:又称 PVC,持久卷申请,PVC消费PV资源

    pv 和 pvc是一种对底层存储抽象化管理的机制。pod 申请 PVC作为卷来使用,集群通过PVC查找绑定的PV,并挂在给pod

    PV类型

    • GCEPersistentDisk
    • AWSElasticBlockStore
    • AzureFile
    • AzureDisk
    • FC (Fibre Channel)
    • FlexVolume
    • Flocker
    • NFS
    • iSCSI
    • RBD (Ceph Block Device)
    • CephFS
    • Cinder (OpenStack block storage)
    • Glusterfs
    • VsphereVolume
    • Quobyte Volumes
    • HostPath
    • VMware Photon
    • Portworx Volumes
    • ScaleIO Volumes
    • StorageOS

    PV设定时的重要参数

    访问模式(accessModes)

    accessModes 主要有如下的几个:

    • ReadWriteOnce:读写挂载在一个节点上(谁用谁挂载)
    • ReadOnlyMany:只读挂载在多个节点上
    • ReadWriteMany:读写挂载在多个节点上

    回收策略(Recycling Policy)

    主要的Recycling Policy有如下三个:

    • Retain:不做任何操作,不使用的时候需要手动删除(默认)
    • Recycle:没有PVC使用的时候清空数据让其他PVC使用
    • Delete:

    PV状态(Phase)

    常见的Phase有如下几种:
    - Available:可用(可以被新的pvc挂载)
    - Bound:已经被pvc挂载了
    - Released:pvc已不再使用需要回收
    - Failed:创建失败

    创建一个PV

    通过nfs创建

    这也是我这里采用的方法

    apiVersion: v1
    kind: PersistentVolume
    metadata:
      name: nfs-pv
    spec:
      capacity:
        storage: 5Gi
      accessModes:
        - ReadWriteMany
      persistentVolumeReclaimPolicy: Recycle
      nfs:
        path: /opt/nfs/data
        server: 10.10.109.19
    
    kubectl create -f nfs-pv.yaml

    通过glusterfs创建

    apiVersion: v1
    kind: PersistentVolume
    metadata:
      name: gluster-pv
    spec:
      capacity:
        storage: 5Gi
      accessModes:
        - ReadWriteMany
      glusterfs:
        endpoints: "glusterfs-cluster"
        path: "gv0"
        readOnly: false

    查看创建的PV资源:
    这里写图片描述

    可以看到通过NFS创建的容量5G的pv已经成功了

    创建pvc

    只创建pv并不能直接使用,还需要pvc进行对pv的消费

    pvc是统一的,不用考虑后端是nfs还是glusterfs

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: pvc001
    spec:
      accessModes:
        - ReadWriteMany
      resources:
        requests:
          storage: 5Gi
    
    kubectl create -f pvc.yaml

    requests指定了这个pvc申请多大的pv

    一般情况下可能会有多个pv,这种情况下pvc如何绑定pv的呢?其实是有两个条件:
    1、根据pvc申请的容量,采用最小匹配原则,例如有5G、10G、20G的pv,pvc申请4G,那么就会匹配到5G的pv
    2、根据访问模式匹配,匹配访问模式和pv模式一直的

    查看创建情况:
    这里写图片描述

    可以看到pv和pvc已经是绑定的状态。

    创建应用

    现在创建一个nginx应用来使用这个pvc:

    apiVersion: v1
    kind: Pod
    metadata:
      name: mypod
    spec:
      containers:
        - name: nginx
          image: nginx
          volumeMounts:
          - mountPath: "/usr/share/nginx/html"
            name: wwwroot
      volumes:
        - name: wwwroot
          persistentVolumeClaim:
            claimName: pvc001
    
    kubectl create -f pvc-app.yaml

    在这个应用创建的时候指定了使用pvc的名称为pvc001

    查看创建结果:
    这里写图片描述

    已经创建成功了

    查看一下这个pod的ip,然后在任意节点上访问测试下这个pod:

    现在nginx的页面是nfs中的index的内容了

    然后尝试修改一下nfs中的index的内容然后重新访问:

    在修改后nginx的页面也同时更改了

    pv和pvc带来的好处

    首先就是不需要过多的关注后端的存储,不论后端是nfs还是glasterfs,对于开发人员更加友好。

    另外就是方便统一管理后端存储,运维人员负责生成不同大小的pv,开发人员只需要请求合适的pvc即可。

    展开全文
  • Extend volume

    2017-10-10 14:28:42
    原本的volume的size是1G 点击extend volume 将size 扩大到2G 点击extend volume 后,成功将volume的size 调整为2G 对应的cinder-api的log 对应的code如下:/cinder/volume/api.py,方法为 extend...

    原本的volume的size是1G

    点击extend volume

    将size 扩大到2G

    点击extend volume 后,成功将volume的size 调整为2G


    对应的cinder-api的log

    对应的code如下:/cinder/volume/api.py,方法为 extend

    可见是让cinder volume来调整size

    具体的code为

    extend     _volume /srv/cinder/lib/python2.7/site-packages/cinder/volume/drivers/rbd.py:1010


    展开全文
  • Docker - Docker VolumeVolume命令详解

    千次阅读 2020-11-25 21:48:16
    Docker学习(四)- Docker VolumeVolume命令详解 什么是数据卷(Volume) Docker镜像被存储在一系列的只读层中。当我们创建一个容器时,Docker会读取镜像(只读),并在其顶部添加一层读写层。如果正在运行中的...

    Docker - Docker Volume及Volume命令详解

    什么是数据卷(Volume)

    Docker镜像被存储在一系列的只读层中。当我们创建一个容器时,Docker会读取镜像(只读),并在其顶部添加一层读写层。如果正在运行中的容器修改了现有文件,该文件将会被拷贝出底层的只读层,放到最顶层的读写层中。读写层中原来的旧版本文件(未被更改过的文件)仍然存在于镜像中。

    所以当Docker容器被删除后,再基于原来的镜像创建容器时,将创建一个没有任何数据更改的容器,在之前那个容器中的数据更改会丢失掉。只读层和读写层的组合被Docker称为联合文件系统(Union File System)。

    为了能够持久化这些更改过的数据,并且能够很容易实现容器间共享数据,Docker提出了Volume的概念。Volume是外部默认的联合文件系统或者是存在于宿主文件系统中正常的文件或文件夹。

    为什么需要数据卷(Volume)

    这得从Docker容器的文件系统说起。出于效率等一系列原因,Docker容器的文件系统在宿主机上存在的方式很复杂,这会带来下面几个问题:

    • 不能在宿主机上很方便地访问容器中的文件。
    • 无法在多个容器之间共享数据。
    • 当容器删除时,容器中产生的数据将会丢失。

    为了解决这些问题,Docker引入了数据卷(Volume) 机制。数据卷以独立于Docker文件系统的形式存在于宿主机中。数据卷的最大特点是:其生存周期独立于容器的生存周期

    数据卷的设计目的就是数据的持久化,因为其生存周期独立于容器的生存周期,因此Docker不会在容器删除时删除其挂载的数据卷。所以数据卷可以带来以下好处:

    • 数据卷可在容器之间共享或重用数据。
    • 数据卷的更改可以直接生效。
    • 数据卷的生命周期一直持续到没有容器使用它为止。
    • 对数据卷操作不会影响到镜像本身。
    • 数据卷可以完成容器到宿主机、宿主机到容器以及容器到容器之间的数据共享。

    Volume命令

    通过docker volume help可以查看Volume有哪些命令。

    [root@izoq008ryseuupz docker]# docker volume help
    
    Usage:	docker volume COMMAND
    
    Manage volumes
    
    Commands:
      create      Create a volume
      inspect     Display detailed information on one or more volumes
      ls          List volumes
      prune       Remove all unused local volumes
      rm          Remove one or more volumes
    
    Run 'docker volume COMMAND --help' for more information on a command.
    
    

    通过docker volume COMMAND --help可以查看每个Volume命令的详情。

    docker volume ls

    列出所有的数据卷。

    [root@izoq008ryseuupz docker]# docker volume ls --help
    
    Usage:	docker volume ls [OPTIONS]
    
    List volumes
    
    Aliases:
      ls, list
    
    Options:
      -f, --filter filter   Provide filter values (e.g. 'dangling=true')
          --format string   Pretty-print volumes using a Go template
      -q, --quiet           Only display volume names
    

    查看本地所有的数据卷。

    docker volume ls
    
    [root@izoq008ryseuupz docker]# docker volume ls
    DRIVER              VOLUME NAME
    local               3c1ed533ce142b49eadc15ba57b87a3bac780e89e22c06503b3e909ab69ed62f
    local               5b086d5fdb68b5a58593fdca6d6f0a9b3ead0ed929fd3961b7db48e3a928c24d
    local               8eb0f149b72711acd9618f827fc26a9afcce63ed51f1e60ac48e752344f88f22
    local               08b4d10ef219075ee8a283112be06e1df52729bf23d3216342da3f8b21a0c127
    local               31a6cbc600b3d30d0c567b3842ce5e7944495fcc12d42008385912d32facfd7a
    local               208ddc66938b611237d4e868cb8800a36b5390969ba7a22d2d2e65a8c173b2c8
    local               3285a7fb977eb7a87da83b2a5ff838c98037b15ec659eeff68c489e7004114ea
    local               a4beb8e0e17a3369c8c9a447d777323df71d2b5e2f77ebfc69cc99af39e1077a
    local               db153ec29b07b6268e7204fc2e91a32db91797bcd8f4d92c7e2637577cd1a155
    local               dcf0505225e08c4c4d24f0e89ac83ed02a5387620734c4add6ab4f1d8196489c
    local               f00edae7bd06b264a25329143fa2207e998491e459c24b0c30b1f78996a49369
    

    只需要展示数据卷的名称,可以使用-q选项。

    docker volume ls -q
    
    [root@izoq008ryseuupz docker]# docker volume ls -q
    3c1ed533ce142b49eadc15ba57b87a3bac780e89e22c06503b3e909ab69ed62f
    5b086d5fdb68b5a58593fdca6d6f0a9b3ead0ed929fd3961b7db48e3a928c24d
    8eb0f149b72711acd9618f827fc26a9afcce63ed51f1e60ac48e752344f88f22
    08b4d10ef219075ee8a283112be06e1df52729bf23d3216342da3f8b21a0c127
    31a6cbc600b3d30d0c567b3842ce5e7944495fcc12d42008385912d32facfd7a
    208ddc66938b611237d4e868cb8800a36b5390969ba7a22d2d2e65a8c173b2c8
    3285a7fb977eb7a87da83b2a5ff838c98037b15ec659eeff68c489e7004114ea
    a4beb8e0e17a3369c8c9a447d777323df71d2b5e2f77ebfc69cc99af39e1077a
    db153ec29b07b6268e7204fc2e91a32db91797bcd8f4d92c7e2637577cd1a155
    dcf0505225e08c4c4d24f0e89ac83ed02a5387620734c4add6ab4f1d8196489c
    f00edae7bd06b264a25329143fa2207e998491e459c24b0c30b1f78996a49369
    

    其他的选项可以自己去试一试。

    docker volume create

    创建一个数据卷。

    [root@izoq008ryseuupz docker]# docker volume create --help
    
    Usage:	docker volume create [OPTIONS] [VOLUME]
    
    Create a volume
    
    Options:
      -d, --driver string   Specify volume driver name (default "local")
          --label list      Set metadata for a volume
      -o, --opt map         Set driver specific options (default map[])
    

    创建数据卷centos-volume

    [root@izoq008ryseuupz docker]# docker volume create centos-volume
    centos-volume
    [root@izoq008ryseuupz docker]# docker volume ls
    DRIVER              VOLUME NAME
    local               3c1ed533ce142b49eadc15ba57b87a3bac780e89e22c06503b3e909ab69ed62f
    local               5b086d5fdb68b5a58593fdca6d6f0a9b3ead0ed929fd3961b7db48e3a928c24d
    local               8eb0f149b72711acd9618f827fc26a9afcce63ed51f1e60ac48e752344f88f22
    local               08b4d10ef219075ee8a283112be06e1df52729bf23d3216342da3f8b21a0c127
    local               31a6cbc600b3d30d0c567b3842ce5e7944495fcc12d42008385912d32facfd7a
    local               208ddc66938b611237d4e868cb8800a36b5390969ba7a22d2d2e65a8c173b2c8
    local               3285a7fb977eb7a87da83b2a5ff838c98037b15ec659eeff68c489e7004114ea
    local               a4beb8e0e17a3369c8c9a447d777323df71d2b5e2f77ebfc69cc99af39e1077a
    local               centos-volume
    local               db153ec29b07b6268e7204fc2e91a32db91797bcd8f4d92c7e2637577cd1a155
    local               dcf0505225e08c4c4d24f0e89ac83ed02a5387620734c4add6ab4f1d8196489c
    local               f00edae7bd06b264a25329143fa2207e998491e459c24b0c30b1f78996a49369
    

    其他的选项可以自己去试一试。

    docker volume inspect

    展示一个或多个数据卷的详细信息。

    [root@izoq008ryseuupz _data]# docker volume inspect --help
    
    Usage:	docker volume inspect [OPTIONS] VOLUME [VOLUME...]
    
    Display detailed information on one or more volumes
    
    Options:
      -f, --format string   Format the output using the given Go template
    

    展示数据卷centos-volume的详细信息。

    [root@izoq008ryseuupz _data]# docker volume inspect centos-volume
    [
        {
            "CreatedAt": "2020-11-25T17:30:06+08:00",
            "Driver": "local",
            "Labels": {},
            "Mountpoint": "/var/lib/docker/volumes/centos-volume/_data",
            "Name": "centos-volume",
            "Options": {},
            "Scope": "local"
        }
    ]
    

    其他的选项可以自己去试一试。

    docker volume prune

    移除未使用的数据卷。

    [root@izoq008ryseuupz _data]# docker volume prune --help
    
    Usage:	docker volume prune [OPTIONS]
    
    Remove all unused local volumes
    
    Options:
          --filter filter   Provide filter values (e.g. 'label=<label>')
      -f, --force           Do not prompt for confirmation
    
    docker volume prune
    
    [root@izoq008ryseuupz _data]# docker volume ls
    DRIVER              VOLUME NAME
    local               3c1ed533ce142b49eadc15ba57b87a3bac780e89e22c06503b3e909ab69ed62f
    local               5b086d5fdb68b5a58593fdca6d6f0a9b3ead0ed929fd3961b7db48e3a928c24d
    local               6b5a0394e690c4e0e869ddecc0db24a748a0229c70a83db46e0f2f95e3314958
    local               8eb0f149b72711acd9618f827fc26a9afcce63ed51f1e60ac48e752344f88f22
    local               08b4d10ef219075ee8a283112be06e1df52729bf23d3216342da3f8b21a0c127
    local               31a6cbc600b3d30d0c567b3842ce5e7944495fcc12d42008385912d32facfd7a
    local               208ddc66938b611237d4e868cb8800a36b5390969ba7a22d2d2e65a8c173b2c8
    local               3285a7fb977eb7a87da83b2a5ff838c98037b15ec659eeff68c489e7004114ea
    local               a4beb8e0e17a3369c8c9a447d777323df71d2b5e2f77ebfc69cc99af39e1077a
    local               c8079a1f169f2f0d93923db7b785f1033a46bdc8cf6baf73d742ebbb3c03d6a4
    local               centos-volume
    local               db153ec29b07b6268e7204fc2e91a32db91797bcd8f4d92c7e2637577cd1a155
    local               dcf0505225e08c4c4d24f0e89ac83ed02a5387620734c4add6ab4f1d8196489c
    local               f00edae7bd06b264a25329143fa2207e998491e459c24b0c30b1f78996a49369
    [root@izoq008ryseuupz _data]# docker volume prune 
    WARNING! This will remove all local volumes not used by at least one container.
    Are you sure you want to continue? [y/N] y
    Deleted Volumes:
    31a6cbc600b3d30d0c567b3842ce5e7944495fcc12d42008385912d32facfd7a
    208ddc66938b611237d4e868cb8800a36b5390969ba7a22d2d2e65a8c173b2c8
    3c1ed533ce142b49eadc15ba57b87a3bac780e89e22c06503b3e909ab69ed62f
    db153ec29b07b6268e7204fc2e91a32db91797bcd8f4d92c7e2637577cd1a155
    f00edae7bd06b264a25329143fa2207e998491e459c24b0c30b1f78996a49369
    a4beb8e0e17a3369c8c9a447d777323df71d2b5e2f77ebfc69cc99af39e1077a
    5b086d5fdb68b5a58593fdca6d6f0a9b3ead0ed929fd3961b7db48e3a928c24d
    8eb0f149b72711acd9618f827fc26a9afcce63ed51f1e60ac48e752344f88f22
    centos-volume
    08b4d10ef219075ee8a283112be06e1df52729bf23d3216342da3f8b21a0c127
    dcf0505225e08c4c4d24f0e89ac83ed02a5387620734c4add6ab4f1d8196489c
    3285a7fb977eb7a87da83b2a5ff838c98037b15ec659eeff68c489e7004114ea
    
    Total reclaimed space: 94.79MB
    [root@izoq008ryseuupz _data]# docker volume ls
    DRIVER              VOLUME NAME
    local               6b5a0394e690c4e0e869ddecc0db24a748a0229c70a83db46e0f2f95e3314958
    local               c8079a1f169f2f0d93923db7b785f1033a46bdc8cf6baf73d742ebbb3c03d6a4
    

    其他的选项可以自己去试一试。

    docker volume rm

    移除一个或多个数据卷,不能移除被容器使用的数据卷。

    [root@izoq008ryseuupz _data]# docker volume rm --help
    
    Usage:	docker volume rm [OPTIONS] VOLUME [VOLUME...]
    
    Remove one or more volumes. You cannot remove a volume that is in use by a container.
    
    Aliases:
      rm, remove
    
    Examples:
    
    $ docker volume rm hello
    hello
    
    
    Options:
      -f, --force   Force the removal of one or more volumes
    

    查询容器centos.9的详细信息。

    [root@izoq008ryseuupz ~]# docker inspect centos.9
    

    可以得到容器ID、数据卷挂载等信息。

    "Id": "857601f85a5adf1e1305f2f6a7c317431af6841d750b7dd947a03b0725e0ae49"
    
            "Mounts": [
                {
                    "Type": "volume",
                    "Name": "8aee2f0aa880dc1892a01c211101f6360158ae64867b90e5ad3685d7a4ca9496",
                    "Source": "/var/lib/docker/volumes/8aee2f0aa880dc1892a01c211101f6360158ae64867b90e5ad3685d7a4ca9496/_data",
                    "Destination": "centos-nwe",
                    "Driver": "local",
                    "Mode": "",
                    "RW": true,
                    "Propagation": ""
                }
            ]
    
    [root@izoq008ryseuupz ~]# docker volume rm 8aee2f0aa880dc1892a01c211101f6360158ae64867b90e5ad3685d7a4ca9496
    Error response from daemon: remove 8aee2f0aa880dc1892a01c211101f6360158ae64867b90e5ad3685d7a4ca9496: volume is in use - [857601f85a5adf1e1305f2f6a7c317431af6841d750b7dd947a03b0725e0ae49]
    

    很显然不能移除该数据卷,因为它正在被容器ID为857601f85a5adf1e1305f2f6a7c317431af6841d750b7dd947a03b0725e0ae49(容器名称为centos.9)的容器使用。

    所以需要先移除该容器(只停止是不行的)。

    [root@izoq008ryseuupz ~]# docker stop centos.9
    centos.9
    [root@izoq008ryseuupz ~]# docker rm centos.9
    centos.9
    

    再移除该数据卷。

    [root@izoq008ryseuupz ~]# docker volume rm 8aee2f0aa880dc1892a01c211101f6360158ae64867b90e5ad3685d7a4ca9496
    8aee2f0aa880dc1892a01c211101f6360158ae64867b90e5ad3685d7a4ca9496
    [root@izoq008ryseuupz ~]# docker volume ls
    DRIVER              VOLUME NAME
    local               6b5a0394e690c4e0e869ddecc0db24a748a0229c70a83db46e0f2f95e3314958
    local               3799beaa4dfc538280ecb0817a57ad92d160b6a46611e914c5c5ab832a66d3a7
    local               c8079a1f169f2f0d93923db7b785f1033a46bdc8cf6baf73d742ebbb3c03d6a4
    

    其他的选项可以自己去试一试。

    Docker Volume及Volume命令详解就介绍到这里。

    写博客是博主记录自己的学习过程,如果有错误,请指正,谢谢!

    展开全文
  • create volume

    千次阅读 2017-10-09 14:54:11
    点击create volume 会看到如下界面 填好信息后选择create volume,就可以看到新建的volume 每个voulme对应的操作如下:

    点击create volume

    会看到如下界面



    填好信息后选择create volume,就可以看到新建的volume

    每个voulme对应的操作如下:

    点击“Create Volume” 按钮,cinder-api 将接收到创建 volume 的请求。

    查看 cinder-api 日志 /opt/stack/logs/c-api.log。

    可见收到了一个POST 类型的RESTFUL API 来创建一个1GB的volume

    cinder-api 启动了一个 Flow(工作流)volume_create_api。Flow 的执行状态依次为 PENDING, RUNNING 和 SUCCESS。分别对应ExtractVolumeRequestTask,QuotaReserveTask,EntryCreateTask


    最终成功创建volume

    对应的cinder-api的源码如下:


    cinder-scheduler 执行调度:

    可以看到cinder-schedule 的状态变化为PENDING->RUNNING->SUCCESS.启动的flow有两个ExtractSchedulerSpecTask,ScheduleCreateVolumeTask。经过的filter有三个AvailabilityZoneFilter,CapacityFilter,CapabilitiesFilter


    /cinder/cinder/scheduler/filter_scheduler.py,方法为 schedule_create_volume

    cinder-volume 也启动了一个 Flow 来完成 volume 创建工作,Flow 的名称为 volume_create_manage

    volume_create_manager 首先执行 ExtractVolumeRefTask, OnFailureRescheduleTask, ExtractVolumeSpecTask, NotifyVolumeActionTask 为 volume 创建做准备。

    从2570可以看出用的是rdb driver最终在2577行成功创建volume。


    展开全文
  • Moo Volume

    2017-10-11 13:15:01
    When cow i MOOs at cow j, the volume of this MOO must be equal to the distance between i and j, in order for j to be able to hear the MOO at all. Please help FJ compute the total volume of sound ...
  • Delete volume

    2017-10-10 14:41:32
    确认后这个volume就会被删除了 对应的cinder-api的log如下 可见收到一个delete的restful api code如下: /cinder/volume/api.py,方法为 delete。 可见是发送消息给cinder voulme了 检查有没有backup...
  • docker volume用法

    万次阅读 2019-08-23 15:51:36
    volume在docker中的意思表示将宿主机上的目录挂在到docker容器中,这样可以保持数据持久化,当将容器删除时,数据不会丢失 1、手动创建一个volume可以使用命令:docker volume create wincom-node,如下图所示: ...
  • Cinder-volumeVolume Type介绍

    千次阅读 2018-04-06 08:50:36
    Volume TypeCinder可以支持多个或多种存储后端(Multiple-Storage Backend)并存,每个存储后端都有自己的名字,但是这个名字并不要求是唯一的,可以被共用,此时cinder-scheduler会根据Filter来选择在哪个存储...
  • docker volume删除卷

    千次阅读 2019-12-05 17:05:03
    docker volume prune rm
  • docker volume创建卷

    2019-12-05 15:14:14
    docker volume create
  • Dockerfile 指令 VOLUME 介绍

    千次阅读 2020-09-29 17:49:44
    通过dockerfile的 VOLUME 指令可以在镜像中创建挂载点,这样只要通过该镜像创建的容器都有了挂载点。 还有一个区别是,通过VOLUME 指令创建的挂载点,无法指定主机上对应的目录,是自动生成的。 #test FROM ...
  • Fog Volume渲染算法实现

    千次阅读 2018-12-27 21:42:51
    由于项目需求,需要实现Fog Volume的效果,查阅了网上资料没有找到相关算法介绍,Unity虽然提供了插件但是效果不是项目想要的,只能自己去写,为了便于日后查阅,写篇博客记录下来,在介绍Fog Volume算法实现之前,...
  • detach volume流程分析

    2017-03-10 16:29:38
    Detach volume和Attach volume的执行相反 detach volume流程是: cinder-api post detach请求-->nova-compute执行volume卸载(Generate XML)、initiator断开iscsi连接-->cinder-volume删掉对应volume的target ...
  • 综述 关于System Volume Information占用的大量磁盘空间 步骤 进入控制面板: 系统和安全 系统 系统保护 成功!
  • Unity PostProcess & Volume

    2020-11-12 13:02:45
    上一步摄像机上的Post-process Volume是勾选了IsGlobal的,即对场景内的所有物体都有影响。那么如果想让摄像机在进入某个特定范围时使用另一个后处理配置要怎么做呢?可以在指定区域配置一个不勾选IsGlobal的Post-...
  • Docker volume分析

    2017-06-04 23:05:27
    docker volume的相关分析
  • docker挂载volume

    千次阅读 2018-03-06 11:59:56
    假如你想把数据库集成到docker中,那么为了使容器数据持久化,你需要利用dockre volume。你可以先创建一个volume然后再挂载,也可以直接不创建直接挂载容器目录。你可以指定容器目录挂载到宿主机特定目录,也可以不...
  • docker volume源码分析

    万次阅读 2016-12-29 17:41:00
    这是在docker v1.10.3版本的使用过程中,使用convoy 作为volume driver,在一次docker volume remove失败时,使我不得不对docker volume 的源码做一次分析。
  • kubernetes volume 源码详解

    千次阅读 2017-05-24 23:35:02
    kubernetes volume 相关源码详解
  • Kubernetes对象之Volume

    千次阅读 2017-11-22 11:11:10
    Kubernetes对象之Volume Kubernetes的Volume
  • nova 挂载volume

    千次阅读 2017-11-06 14:15:40
    nova 挂载volume的入口在E:\nova\nova\api\openstack\compute\volumes.py 中的VolumeAttachmentController类的create方法 def create(self, req, server_id, body): """Attach a volume to an instance.""" con
  • kubernetes使用local volume

    2020-05-29 09:29:32
    local volume简介 参考:https://kubernetes.io/docs/concepts/storage/volumes/#local local volume指的是所挂载的某个本地存储设备,例如磁盘、分区或者目录。local volume只能用作静态创建的持久卷。尚不支持动态...
  • cinder-volumes在删除volume时很慢, 并且此时create volume的其他操作也无反应, 也无日志. 理论 green thread的概念就是之间不共享数据, 每个green thread有自己的私有的数据对象, 并且非阻塞, 一...
  • Docker存储Volume使用

    千次阅读 2018-06-08 09:23:48
    1.使用docker自定义data volume 在mysql官方镜像的Dockerfile中定义了以下volume VOLUME /var/lib/mysql 所以如果不指定-v参数docker会自定一个volume docker run -d --name mysql1 -e MYSQL_ALLOW_EMPTY_...
  • Docker 挂载Volume数据卷

    千次阅读 2020-07-08 14:29:29
    Docker容器提供volume数据卷的方式,可以直接挂载宿主机文件或目录到容器里,可以理解为目录映射,这样就可以让所有的容器共享宿主机数据,从而只需要改变宿主机的数据源就能够影响到所有的容器数据,或者当容器意外...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 233,165
精华内容 93,266
关键字:

volume