Rancher提供了不同的存储服务,从而使用户可以将存储卷映射到容器中。
当我们创建环境模板时,用户可以从应用商店选择需要在环境中的使用存储服务。
或者,如果用户已经创建了一个环境,你可以从 应用商店中选择并启动一个存储服务。
注意: 某些存储服务可能无法和一些容器编排调度引擎(例如,kubernetes)兼容。环境模板可以根据当前的编排调度框架限定可以使用的存储服务,而应用商店中则会显示全部的存储服务。
在存储服务启动后,在基础架构 -> 存储的界面中可以看到一个存储驱动已经被创建出来。在这个界面中,用户可以查看当前环境中所有可用的存储驱动。存储驱动的名称和刚刚启动的存储服务所在的应用的名称保持一致。
对于每一种存储驱动,主机上运行的存储服务都会被显示出来。正常情况下,环境里的所有主机都会出现在该页面。同时,存储驱动提供的卷列表以及卷的状态也会被显示出来。你可以看到每个卷的名称(比如,主机上的卷名称),以及每个卷的挂载点。对于每个挂载点,其容器信息以及该挂载点在容器中映射的路径都会被显示出来。
Rancher的存储服务中,卷的作用域可以在不同的级别生效。目前,只有Rancher Compose支持创建不同的存储作用域。UI上仅仅支持环境级别的卷创建操作。
应用级别的存储卷,应用中的服务如果引用了相同的卷都将共享同一个存储卷。不在该应用内的服务则无法使用此存储卷。
Rancher中,应用级别的存储卷的命名规则为使用应用名称为前缀来表明该卷为此应用独有,且会以随机生成的一组数字结尾以确保没有重名。在引用该存储卷时,你依然可以使用原来的卷名称。比如,如果你在应用 stackA
中创建了一个名为foo
的卷, 你的主机上显示的卷名称将为stackA_foo_<randomNumber>
,但在你的服务中,你依然可以使用foo
。
环境级别的存储卷,该环境中的所有服务如果 引用了相同的卷将共享同一个存储卷。不同应用中的不同服务也可以共享同一个存储卷。目前,通过UI只可以创建环境级别的卷。
在你的存储服务启动后且状态为active
,使用共享存储卷的服务就可以被创建了。在创建服务时,在卷选项卡中,输入卷以及卷驱动
卷 语法和Docker语法相同,<volume_name>:</path/in/container>
。Docker卷默认挂载为读写模式,但是你可以通过在卷的末尾添加:ro
将其挂载为只读模式。
卷驱动和存储驱动的名字一致,为存储驱动的应用名。
如果 <volume_name>
在存储驱动中已经存在,在存储卷作用域范围内,将使用相同的存储卷。
一个卷可以被分为两部分创建:
注意:该设定并不适用于Rancher EBS,使用Rancher EBS时,必须首先定义一个卷。
inactive
状态。在基础设施应用中的存储服务启动后,你可以开始创建卷了。在下面的例子中,我们将使用Rancher NFS 存储服务。
在Docker Compose文件中volumes
下可以定义卷。在同一个Docker Compose中每个卷可以和多个服务关联。此功能只在Compose v2格式下生效。
version: '2'
services:
foo:
image: busybox
stdin_open: true
volumes:
- bar:/var/lib/storage
volumes:
bar:
driver: rancher-nfs
默认情况下,所有的卷将为应用级别。在同一个Compose文件中所有引用同一个卷的服务或应用将共享同一个卷。
如果再同一个Compose文件中创建了一个新应用,一个新卷也会被创建。当应用被删除时,卷也会被删除。
在上面的例子上,卷bar
即为应用级别。
如果需要多个应用共享卷,你需要使用一个环境级别的卷。在这个例子里,必须先创建好卷,之后才可以启动使用这个卷对服务或应用。为了使用环境级别的卷,你需要添加external
选项到这个卷里。
version: '2'
services:
foo:
image: busybox
stdin_open: true
volumes:
- bar:/var/lib/storage
volumes:
bar:
driver: rancher-nfs
external: true
如果在当前环境中找不到一个叫bar
的环境级别的卷,那么将会有报错提示。环境级别的卷只能通过UI进行删除。