Installing the NetApp Docker Volume Plugin on CoreOS

In this blog I will provide the steps to install the NetApp Docker Volume Plugin (nDVP) on CoreOS manually and automatically with cloud-config.

First, some introductions:

  • NetApp Docker Volume Plugin (nDVP):
    • Provides direct integration with the Docker ecosystem for NetApp storage including ONTAP, E-Series, and SolidFire. The nDVP allows for Docker integrated storage management including provisioning/deprovisioning, attaching/detaching, and cloning of NetApp storage. The nDVP software (a single binary) must be installed on the container host and reads its configuration from a JSON formatted config file when it is started. Each config file describes the connection with a single storage array config; multiple arrays == multiple nDVP daemons, each with a unique config file.
  • CoreOS:
    • A barebones linux distribution designed specifically to run containers at scale. Some common linux features like the OS installer and a package manager are absent. On the other hand, container ecosystem software like docker, rkt, and etcd are pre-installed. CoreOS is also self-updating and does so for all components in an atomic manner using an A/B partition strategy which causes the /usr filesystem to be read-only. Given CoreOS is a bit unique in how it works installing software on it needs some special care.

Install nDVP manually

To install manually follow these steps:

  1. Become root:

    sudo -i
    
  2. If you will use iSCSI connected storage start the iSCSI service:

    systemctl start iscsid
    
  3. Create a nDVP configuration file for your storage array type.

    • Copy a template from nDVP Github site for your platform and customize to match your site details.
    • Validate the JSON using JSONlint to avoid a syntax error that will prevent the driver from starting
    • Save this file to your container host. There are no requirements about name or directory location but for standardization the following filenames (matching the driver name) are suggested:

      Storage Driver Full Path to Config file
      SolidFire iSCSI /etc/netappdvp-solidfire-san.json
      ONTAP NFS /etc/netappdvp-ontap-nas.json
      ONTAP iSCSI /etc/netappdvp-ontap-san.json
      E-Series iSCSI /etc/netappdvp-eseries-iscsi.json
  4. Download, install, and start the plugin.

    • Replace the FULL-PATH-TO-CONFIG-FILENAME with the name of your config file
    • Replace the version of netappdvp with your desired version

      # Make a directory for the nDVP
      mkdir -p /opt/netappdvp
      
      # Download and install the software
      wget https://github.com/NetApp/netappdvp/releases/download/v1.3.3/netappdvp-1.3.3.tar.gz -O /tmp/netappdvp-1.3.3.tar.gz
      tar -zxvf /tmp/netappdvp-1.3.3.tar.gz -C /opt/netappdvp
      chown root:root /opt/netappdvp/netappdvp
      chmod 755 /opt/netappdvp/netappdvp
      
      # Start the nDVP passing the full path to your config file, and put it to the background
      /opt/netappdvp/netappdvp --config=CONFIG-FILENAME &
      
  5. You should now be able to use docker volume COMMAND -d netapp commands to manage persistent storage.

Install nDVP with cloud-config

To install using cloud-config you need to add a few new snippets. These instructions assume you will distribute using a Config Drive and a user_data file:

  1. Create a cloud-config file named user_data in the current working directory.

  2. Create a nDVP configuration file for your storage array type.

    • Copy a template from nDVP Github site for your platform into a text editor and customize to match your site details. It will be added to the cloud-config in the next step.
    • Validate the JSON using JSONlint to avoid a syntax error that will prevent the driver from starting
  3. Add a write_files definition to user_data so your nDVP config file will be saved on the container host:

    • There are no requirements about name or directory location but for standardization the following filenames (matching the driver name) are suggested:
    Storage Driver Full Path to Config file
    SolidFire iSCSI /etc/netappdvp-solidfire-san.json
    ONTAP NFS /etc/netappdvp-ontap-nas.json
    ONTAP iSCSI /etc/netappdvp-ontap-san.json
    E-Series iSCSI /etc/netappdvp-eseries-iscsi.json
    • Replace FULL-PATH-TO-CONFIG-FILENAME with the name of your nDVP config file including the full path (example: /etc/netappdvp-solidfire-san.json)

      # Write out nDVP config files
      write_files:
      - path: "FULL-PATH-TO-CONFIG-FILENAME"
      permissions: "0644"
      owner: "root"
      content: |
        # Paste your nDVP config JSON snippet here; indentation in YAML matters!
      
  4. If you will use iSCSI connected storage start the iSCSI service by adding a new unit definition to your user_data:

    coreos:
      units:
        # Start iSCSI
        - name: iscsid.service
          command: start
    
  5. Add a unit definition to download, install, and start the nDVP.

    • Remove the coreos: and units: lines if you already have this header.
    • Remove the After=iscsid.service line if you are not using iSCSI
    • Replace FULL-PATH-TO-CONFIG-FILENAME with the name of your nDVP config file including the full path (example: /etc/netappdvp-solidfire-san.json)
    • Replace the version of netappdvp with your desired version

      coreos:
      units:
      # Install and start ndvp service
      - name: "ndvp.service"
        command: "start"
      content: |
        [Unit]
        Description=nDVP service
        After=iscsid.service
      
        [Service]
        Restart=always
        ExecStartPre=-/usr/bin/mkdir -p /opt/netappdvp
        ExecStartPre=-/usr/bin/wget https://github.com/NetApp/netappdvp/releases/download/v1.3.3/netappdvp-1.3.3.tar.gz -O /tmp/netappdvp-1.3.3.tar.gz
        ExecStartPre=-/usr/bin/tar -zxvf /tmp/netappdvp-1.3.3.tar.gz -C /opt/netappdvp
        ExecStart=/opt/netappdvp/netappdvp --config=FULL-PATH-TO-CONFIG-FILENAME
      
  6. Deploy! You should be able to use docker volume COMMAND -d netapp commands to manage persistent storage.

Troubleshooting

  1. The nDVP daemon must be running for it to manage NetApp storage. Check that it is running with:

    ps -ef | grep netappdvp
    
  2. Check the nDVP logfile for status or error messages:

    tail /var/log/netappdvp/*
    
  3. Enable debug logging, try the action again, and then check the log. Enable debug logging in one of two ways:

    (a) Edit your nDVP config JSON to include and then restart the nDVP:

    "debug": true,
    

    or (b) [Re]start the netappdvp with the -debug flag:

    /opt/netappdvp/netappdvp --config=FULL-PATH-TO-CONFIG-FILENAME  -debug
    

As always, comments are welcome!

Share Comments
comments powered by Disqus