• Using Rancher NFS
    • 使用NFS之前的准备工作
    • 在Amazon EFS上使用Rancher NFS驱动
    • 配置Rancher NFS
    • Rancher NFS驱动选项
      • 驱动选项
    • 在UI中使用Rancher NFS
      • 创建卷
      • 在服务中使用卷
    • 在Compose文件中使用Rancher NFS
      • NFS卷示例
      • 使用host,exportBase和export的示例
    • Rancher NFS使用AWS EFS
    • 在移除卷时保留数据

    Using Rancher NFS


    Rancher支持将NFS卷作为容器的一个存储选项

    使用NFS之前的准备工作

    在部署Rancher NFS驱动之前,您需要先准备一个NFS服务器。例如,您可以使用如下命令在Ubuntu 16.04上安装NFS服务器。

    1. sudo apt-get update
    2. sudo apt-get install nfs-kernel-server

    在这个服务器上,您需要设置一个基础目录。首选,您需要创建一个共享目录。

    1. sudo mkdir /nfs
    2. sudo chown nobody:nogroup /nfs

    修改exports文件(/etc/exports).

    1. /nfs *(rw,sync,no_subtree_check,no_root_squash)

    在全部修改完成后,您需要重新启动NFS内核服务器。

    1. sudo systemctl restart nfs-kernel-server

    在Amazon EFS上使用Rancher NFS驱动

    Rancher的NFS驱动可以连接Amazon的EFS。当我们在Amazon EFS上使用Rancher NFS驱动时,环境内全部的主机都需要是EC2主机,并且这些主机要部署在与EFS所在区域相同的同一个可用区内。

    配置Rancher NFS

    当设置一个环境模版的时候,您可以选择启用Rancher NFS应用,这样以后用这个模版创建的环境都会包括Rancher的NFS服务。

    或者,如果您已经设置好了一个环境,您可以在应用商店中找到并部署Rancher NFS服务。

    注意: 某些存储服务可能与容器编排引擎不兼容(例如 Kubernetes)。环境模版会根据您选择的编排引擎显示其兼容的存储服务。但是在应用商店中可以看到全部的应用,不会按照编排引擎进行过滤。

    为了部署Rancher NFS,您需要指定如下配置:

    • NFS Server: NFS服务器的IP地址或者主机名称
    • Export Base Directory: NFS服务器输出的共享目录
    • NFS Version: 您所用的NFS版本,当前使用的是版本4
    • Mount Options: 用逗号分隔的默认挂载选项, 例如: ‘proto=udp’. 不要配置nfsvers选项,这个选项会被忽略。
    • On Remove: 当移除Rancher NFS卷的时候,底层数据是否应该被保留或者清理。选项有purgeretain,默认值为purge。从Rancher 1.6.6开始支持。

    Rancher NFS驱动选项

    当通过Rancher NFS驱动创建卷时,您可以通过一些选项来自定义自己的卷。这些选项是一些键值对,可以通过UI的驱动选项添加,也可以通过compose文件的driver_opts属性来添加。

    驱动选项

    • Host - (host): NFS主机
    • Export - (export): 当一个卷配置了host和export,将不会创建子文件夹,export的根目录将会被挂载。
    • Export Base - (exportBase): 默认情况下,卷可以配置host和export base,这样会在NFS服务器上创建一个名字唯一的子文件夹。
    • Mount Options - (mntOptions): 用逗号分隔的默认挂载选项。
    • On Remove - (onRemove): 当移除Rancher NFS卷的时候,底层数据是否应该被保留或者清理。选项有purgeretain,默认值为purge。从Rancher 1.6.6开始支持。

    在UI中使用Rancher NFS

    创建卷

    Rancher NFS在Rancher中部署成功后,您还需要在基础架构 -> 存储里创建NFS卷,之后才可以在服务中使用NFS卷。

    • 点击添加卷
    • 输入在服务中使用的卷的名称。
    • 可选: 添加额外的驱动选项。

    在服务中使用卷

    一旦卷在UI中被创建成功,您可以在服务中使用这个共享存储了。当创建一个服务时,在页签,可以输入卷驱动

    volume的语法格式与Docker相同,<volume_name>:</path/in/container>。Docker的卷默认是以读写模式进行挂载的,但是您可以通过在卷结尾处添加:ro使其以只读的模式进行挂载。

    卷驱动和存储驱动的名字一致,为存储驱动的应用名。默认情况下,Rancher NFS 存储驱动名称为rancher-nfs

    在Compose文件中使用Rancher NFS

    在基础设施应用中的Rancher NFS启动后,您可以开始在Compose文件中创建卷了。

    在Docker Compose文件中volumes下可以定义卷。在同一个Docker Compose中每个卷可以和多个服务关联。

    注意: 此功能只在Compose v2格式下生效。

    NFS卷示例

    在这里例子中,我们将创建一个NFS卷同时创建使用这个卷的服务。所有该应用中的服务将共享同一个卷。

    1. version: '2'
    2. services:
    3. foo:
    4. image: alpine
    5. stdin_open: true
    6. volumes:
    7. - bar:/data
    8. volumes:
    9. bar:
    10. driver: rancher-nfs

    使用host,exportBase和export的示例

    下面的例子展示了如何在某个服务中,覆盖hostexportBase

    1. version: '2'
    2. services:
    3. foo:
    4. image: alpine
    5. stdin_open: true
    6. volumes:
    7. - bar:/data
    8. volumes:
    9. bar:
    10. driver: rancher-nfs
    11. driver_opts:
    12. host: 192.168.0.1
    13. exportBase: /thisisanothershare

    您也可以给每个卷使用不同的exportBase,请看下面的例子。

    1. version: '2'
    2. services:
    3. foo:
    4. image: alpine
    5. stdin_open: true
    6. volumes:
    7. - bar:/bardata
    8. - baz:/bazdata
    9. volumes:
    10. bar:
    11. driver: rancher-nfs
    12. driver_opts:
    13. host: 192.168.0.1
    14. exportBase: /thisisanothershare
    15. baz:
    16. driver: rancher-nfs
    17. driver_opts:
    18. host: 192.168.0.1
    19. exportBase: /evenanothershare

    Rancher NFS使用AWS EFS

    在AWS上创建EFS文件系统之后,您可以部署Rancher NFS驱动来使用这个EFS文件系统。因为亚马逊EFS只在内部可达,所以只有与EFS在同一个可用区内的EC2主机可以访问EFS。因此,在创建存储驱动之前,您需要先添加EC2主机到Rancher环境中。

    您可以使用下面的选项来部署Rancher NFS:

    • NFS Server: xxxxxxx.efs.us-west-2.amazonaws.com
    • Export Base Directory: /
    • NFS Version: nfsvers=4

    在移除卷时保留数据

    驱动选项onRemove的默认值为purge。这意味着,当从Rancher中删除这个卷的时候,底层的数据也会被删除。如果您想要保留底层数据,您可以将这个选项设置为retain。您也可以给每个卷设置不同的onRemove值。如果nfs-driver选项onRemove被设置为retain,但是您想要在某个卷在Rancher中被删除时清理掉这个卷的底层数据,您可以通过docker-compose.yml在这个卷的driver_opts下面设置onRemove: purge。示例入下。

    1. services:
    2. foo:
    3. image: alpine
    4. stdin_open: true
    5. volumes:
    6. - bar:/data
    7. volumes:
    8. bar:
    9. driver: rancher-nfs
    10. driver_opts:
    11. onRemove: purge

    如果nfs-driver选项onRemove被设置为purge,您可以在卷的driver_opts里设置onRemove: retain来保留数据,这样当这个卷在Rancher中被移除时,数据将会被保留下来。

    1. services:
    2. foo:
    3. image: alpine
    4. stdin_open: true
    5. volumes:
    6. - bar:/data
    7. volumes:
    8. bar:
    9. driver: rancher-nfs
    10. driver_opts:
    11. onRemove: retain

    注意: 创建一个外部卷的时候,如果卷的名称和之前被删除的卷的名称相同,并且这个被删除的卷的数据被保留着,这时使用这个卷的容器可以访问被先前保留的数据。