美文网首页
rancher 中使用NFS共享存储

rancher 中使用NFS共享存储

作者: 大罗马的太阳 | 来源:发表于2017-01-04 21:28 被阅读3609次

    本文解释如何在Centos 7中设置NFS服务器,并且如何Rancher中使用NFS 作为共享存储。解决volumes 数据跟随container 漂移的问题。
    注:本文提到的NFS server 仅是为了测试rancher共享存储而配置的。生产使用请进行具体配置。

    一、准备NFS Server 服务器

    1. 本例使用的NFS Server 服务器信息
      10.1.107.108
      centos 7.2

    2. 安装NFS Server
      yum -y install nfs-utils

    3. 配置NFS Server Exports
      要想客户端可以访问到,需要在服务端把挂载点export出来

    vim /etc/exports
    /mnt/share       10.1.107.0/24(rw,async,no_root_squash,no_subtree_check)
    

    参数说明:
    /mnt/share:nfs共享的目录
    10.1.107.0/24:*所有IP ,示例为10.1.107.0-10.1.107.254区间的IP可以访问;
    rw:read-write,可读写;
    ro:read-only,只读;
    sync:同步写入(文件同时写入硬盘和内存),适用在通信比较频繁且实时性比较高的场合
    async:异步写入(文件先写入内存,稍候再写入硬盘),性能较好(速度快),适合超大或者超多文件的写入,但有数据丢失的风险,比如突然断电等情况;
    root_squash(默认):将来访的root用户映射为匿名用户或用户组;
    no_root_squash:来访的root用户保持root帐号权限(可能会不安全);
    no_all_squash(默认):访问用户先与本机用户匹配,匹配失败后再映射为匿名用户或用户组;
    all_squash:将来访的所有用户映射为匿名用户或用户组;
    secure(默认):限制客户端只能从小于1024的tcp/ip端口连接服务器;
    insecure:允许客户端从大于1024的tcp/ip端口连接服务器;
    anonuid:匿名用户的UID值,通常是nobody或nfsnobody,可以在此处自行设定;
    anongid:匿名用户的GID值;
    no_subtree_check:如果NFS输出的是一个子目录,则无需检查其父目录的权限(可以提高效率)

    1. 启动NFS Server
    systemctl enable nfs-server.service
    systemctl start nfs-server.service
    

    如果已经启动nfs-server.service,修改/etc/exports后可以执行exportfs -a 重新加载配置

    1. 配置防火墙
    yum -y install firewalld
    systemctl start firewalld.service
    systemctl enable firewalld.service
    #务必注意ssh
    firewall-cmd --permanent --zone=public --add-service=ssh
    firewall-cmd --permanent --zone=public --add-service=nfs
    firewall-cmd --reload
    
    1. 客户端检测
      $ showmount -e 10.1.107.108
      正常情况下应该能看到/mnt/share

    二、配置Rancher

    1. 安装nfs插件
      rancher 界面商店选择 rancher NFS


    2. 配置nfs功能



      完成后在每个主机上都创建了一个实例。

    3. 创建卷
      在rancher界面基础设施里面存储应该可以看到已安装了的主机,可以添加卷,如果指定了卷名称,需要使用下面实践中给出的办法来对应。否则的话实例会自动创建一个卷名称。


    4. 使用
      创建service时,在卷的设置页面,卷驱动填写rancher-nfs,创建后,挂载volumes的标识是guid形式的。下面给出的实践是采用docker-compose的方式指定的挂载点key值。

    三、实践

    创建stack时指定docker-compose.yml是最方便的办法。[TBD:界面设置控制不是很精确,可能跟rancher-ui的版本有关系]
    下面给出gitlab的配置供参考,

    1. 配置了external: true说明是environment级别的共享。没有的话是stack级别的共享,即 docker-compose中不同的service可以共享。
    2. 配置了per_container: true说明是容器级别的共享,即每个容器独立创建一个volume。
    3. environment 级别的volume只能从界面手工删除,系统自动创建的volume会随容器销毁而销毁。
    1. docker-compose.yml
    version: '2'
    volumes:
      gitlab-config:
        external: true
        driver: 'rancher-nfs'
      gitlab-data:
        external: true
        driver: 'rancher-nfs'
      gitlab-log:
        external: true
        driver: 'rancher-nfs'
    services:
      web:
        image: gitlab/gitlab-ce:latest
        restart: always
        hostname: gitlab.126.com
        environment:
          GITLAB_TIMEZONE: Beijing
          GITLAB_OMNIBUS_CONFIG: |
            gitlab_rails['smtp_enable'] = true;
            gitlab_rails['smtp_address'] = "smtp.126.com";
            gitlab_rails['smtp_port'] = 25;
            gitlab_rails['smtp_user_name'] = "hq-yjysupport@126.com";
            gitlab_rails['smtp_password'] = "Password";
            gitlab_rails['smtp_authentication'] = "login";
            gitlab_rails['smtp_enable_starttls_auto'] = false;
            gitlab_rails['gitlab_email_from'] = 'hq-yjysupport@126.com';
            gitlab_rails['gitlab_email_reply_to'] = 'hq-yjysupport@126.com';
        ports:
          - 80:80
          - 443:443
          - 22:22
        volumes:
          - gitlab-config:/etc/gitlab
          - gitlab-log:/var/log/gitlab
          - gitlab-data:/var/opt/gitlab
    
    1. rancher-compose.yml
    version: '2'
    services:
      web:
        retain_ip: true
        scale: 1
        start_on_create: true
    

    1. http://docs.rancher.com/rancher/v1.3/en/rancher-services/storage-service/

    相关文章

      网友评论

          本文标题:rancher 中使用NFS共享存储

          本文链接:https://www.haomeiwen.com/subject/nhdavttx.html