dcos storage plugin-configuration

ENTERPRISE

Manage plugin configurations.

dcos storage plugin-configuration

Manage plugin configurations.

Synopsis

A plugin configuration specifies how DSS launches a CSI plugin instance when a volume provider is created.

A CSI plugin is a software component used to present storage capacity to a DC/OS cluster. An example CSI plugin is the lvm CSI plugin which presents LVM volume groups as storage capacity to a DC/OS cluster. A CSI plugin runs on a DC/OS private or public agent in the cluster.

DSS takes care of managing the various instances of a CSI plugin running in the DC/OS cluster.

A plugin configuration specifies a CSI plugin to use. Currently the only supported plugins are lvm and devices.

A plugin configuration can specify environment variables, resource limits and the URI to the CSI plugin binary which will be fetched and launched when a volume provider is created from the plugin configuration. A new version of a plugin configuration is created using the dcos storage plugin-configuration update subcommand.

You can view the values of the config-version field for your plugin configurations using the dcos storage plugin-configuration list command.

DSS ships with a default plugin configuration for the lvm and devices plugins. You can see the default plugin configuration using the dcos storage plugin-configuration generate subcommand.

# Print default configuration for 'lvm' plugins.
dcos storage plugin-configuration generate --name=lvm

# Print default configuration for 'devices' plugins.
dcos storage plugin-configuration generate --name=devices

After you upgrade DSS you may want to upgrade your plugin configurations to pick up tweaks and fixes. On the other hand, you may have already carefully crafted your plugin configurations, in which case DSS does not want to automatically update them. If you would like to update your plugin configurations you can run the following commands

# List all versions of the 'lvm' plugin configuration, newer versions are
# displayed at the bottom.
# The bottom version of the plugin configuration is the latest one. If the
# --all-versions flag is not specified, only the latest plugin configuration
# will be shown.
dcos storage plugin-configuration list --name=lvm --all-versions
{
  "plugin-configurations": [
      {
          "name": "lvm",
          "description": "Default configuration for the lvm plugin shipped with DSS",
          "config-version": 1,
          "spec": {
              "csi-template": {
                  "services": [
                      "CONTROLLER_SERVICE",
                      "NODE_SERVICE"
                  ],
                  "command": {
                      "value": "{{.Cmdline | json }}",
                      "shell": true,
                      "environment": {
                          "CONTAINER_LOGGER_DESTINATION_TYPE": "journald+logrotate",
                          "CONTAINER_LOGGER_EXTRA_LABELS": "{\"CSI_PLUGIN\":\"csilvm\"}",
                          "LD_LIBRARY_PATH": "/opt/mesosphere/lib",
                          "PATH": "/opt/mesosphere/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
                      },
                      "uris": [
                          {
                              "value": "http://storage-artifacts.marathon.l4lb.thisdcos.directory:10000/csilvm",
                              "cache": true,
                              "executable": true
                          }
                      ]
                  },
                  "resources": [
                      {
                          "name": "cpus",
                          "value": 0.1
                      },
                      {
                          "name": "mem",
                          "value": 128
                      },
                      {
                          "name": "disk",
                          "value": 10
                      }
                  ]
              }
          },
          "created-at": "2019-04-01T09:40:58.237692Z"
      },
      {
          "name": "lvm",
          "description": "Default configuration for the lvm plugin shipped with DSS",
          "config-version": 2,
          "spec": {
              "csi-template": {
                  "services": [
                      "CONTROLLER_SERVICE",
                      "NODE_SERVICE"
                  ],
                  "command": {
                      "value": "{{.Cmdline | json }}",
                      "shell": true,
                      "environment": {
                          "CONTAINER_LOGGER_DESTINATION_TYPE": "journald+logrotate",
                          "CONTAINER_LOGGER_EXTRA_LABELS": "{\"CSI_PLUGIN\":\"csilvm\"}",
                          "LD_LIBRARY_PATH": "/opt/mesosphere/lib",
                          "PATH": "/opt/mesosphere/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
                      },
                      "uris": [
                          {
                              "value": "http://storage-artifacts.marathon.l4lb.thisdcos.directory:10000/csilvm",
                              "cache": true,
                              "executable": true
                          }
                      ]
                  },
                  "resources": [
                      {
                          "name": "cpus",
                          "value": 0.1
                      },
                      {
                          "name": "mem",
                          "value": 256
                      },
                      {
                          "name": "disk",
                          "value": 10
                      }
                  ]
              }
          },
          "created-at": "2019-04-02T09:40:58.237692Z"
      }
  ]
}
# Update the 'lvm' plugin configuration using the default 'lvm' plugin configuration
# that is baked into the current DSS version. This is typically done after upgrading.
dcos storage plugin-configuration generate --name=lvm | \
  dcos storage plugin-configuration update

# Let's list the 'lvm' plugin configuration versions once more.
dcos storage plugin-configuration list --name=lvm --all-versions
{
  "plugin-configurations": [
      {
          "name": "lvm",
          "description": "Default configuration for the lvm plugin shipped with DSS",
          "config-version": 1,
          "spec": {
              "csi-template": {
                  "services": [
                      "CONTROLLER_SERVICE",
                      "NODE_SERVICE"
                  ],
                  "command": {
                      "value": "{{.Cmdline | json }}",
                      "shell": true,
                      "environment": {
                          "CONTAINER_LOGGER_DESTINATION_TYPE": "journald+logrotate",
                          "CONTAINER_LOGGER_EXTRA_LABELS": "{\"CSI_PLUGIN\":\"csilvm\"}",
                          "LD_LIBRARY_PATH": "/opt/mesosphere/lib",
                          "PATH": "/opt/mesosphere/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
                      },
                      "uris": [
                          {
                              "value": "http://storage-artifacts.marathon.l4lb.thisdcos.directory:10000/csilvm",
                              "cache": true,
                              "executable": true
                          }
                      ]
                  },
                  "resources": [
                      {
                          "name": "cpus",
                          "value": 0.1
                      },
                      {
                          "name": "mem",
                          "value": 128
                      },
                      {
                          "name": "disk",
                          "value": 10
                      }
                  ]
              }
          },
          "created-at": "2019-04-01T09:40:58.237692Z"
      },
      {
          "name": "lvm",
          "description": "Default configuration for the lvm plugin shipped with DSS",
          "config-version": 2,
          "spec": {
              "csi-template": {
                  "services": [
                      "CONTROLLER_SERVICE",
                      "NODE_SERVICE"
                  ],
                  "command": {
                      "value": "{{.Cmdline | json }}",
                      "shell": true,
                      "environment": {
                          "CONTAINER_LOGGER_DESTINATION_TYPE": "journald+logrotate",
                          "CONTAINER_LOGGER_EXTRA_LABELS": "{\"CSI_PLUGIN\":\"csilvm\"}",
                          "LD_LIBRARY_PATH": "/opt/mesosphere/lib",
                          "PATH": "/opt/mesosphere/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
                      },
                      "uris": [
                          {
                              "value": "http://storage-artifacts.marathon.l4lb.thisdcos.directory:10000/csilvm",
                              "cache": true,
                              "executable": true
                          }
                      ]
                  },
                  "resources": [
                      {
                          "name": "cpus",
                          "value": 0.1
                      },
                      {
                          "name": "mem",
                          "value": 256
                      },
                      {
                          "name": "disk",
                          "value": 10
                      }
                  ]
              }
          },
          "created-at": "2019-04-02T09:40:58.237692Z"
        },
        {
            "name": "lvm",
            "description": "Default configuration for the lvm plugin shipped with DSS",
            "config-version": 3,
            "spec": {
                "csi-template": {
                    "services": [
                        "CONTROLLER_SERVICE",
                        "NODE_SERVICE"
                    ],
                    "command": {
                        "value": "{{.Cmdline | json }}",
                        "shell": true,
                        "environment": {
                            "CONTAINER_LOGGER_DESTINATION_TYPE": "journald+logrotate",
                            "CONTAINER_LOGGER_EXTRA_LABELS": "{\"CSI_PLUGIN\":\"csilvm\"}",
                            "LD_LIBRARY_PATH": "/opt/mesosphere/lib",
                            "PATH": "/opt/mesosphere/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
                        },
                        "uris": [
                            {
                                "value": "http://storage-artifacts.marathon.l4lb.thisdcos.directory:10000/csilvm",
                                "cache": true,
                                "executable": true
                            }
                        ]
                    },
                    "resources": [
                        {
                            "name": "cpus",
                            "value": 0.1
                        },
                        {
                            "name": "mem",
                            "value": 512
                        },
                        {
                            "name": "disk",
                            "value": 10
                        }
                    ]
                }
            },
            "created-at": "2019-04-03T09:40:58.237692Z"
        }
    ]
}

Notice that there is a new lvm plugin configuration version registered (i.e., "config-version": 3).

Now that the lvm plugin configuration has been updated we need to upgrade our lvm volume providers to use the latest version.

# Show the list of existing providers. There is only one volume provider called 'lvm-ssds'.
dcos storage provider list --plugin=lvm --json
{
    "providers": [
        {
            "name": "lvm-ssds",
            "spec": {
                "plugin": {
                    "name": "lvm",
                    "config-version": 1,
                },
                ...
            }
        }
    ]
}
# We see that it currently lists the plugin as 'lvm' and the 'config-version' as 1.
# We will proceed to upgrade this volume provider from 'config-version: 1' to 'config-version: 3'.
cat <<EOF | dcos storage provider modify
{
    "name": "lvm-ssds",
    "spec": {
        "plugin": {
            "name": "lvm",
            "config-version": 3
        }
    }
}
EOF

It is somewhat awkward having to specify the plugin configuration’s config-version when modifying the volume provider if all we intend to do is update it use the latest config-version. Instead, we can set the config-version field to “latest” and DSS will replace the “latest” string with whatever the current plugin configuration’s config-version is.

# Upgrade this volume provider from 'config-version: 1' to 'config-version: latest'.
cat <<EOF | dcos storage provider modify
{
    "name": "lvm-ssds",
    "spec": {
        "plugin": {
            "name": "lvm",
            "config-version": "latest"
        }
    }
}
EOF

If the spec.plugin field is present in the volume provider configuration JSON the volume provider’s plugin configuration is updated. If the spec.plugin field is not present, the provider’s plugin configuration version is not modified.

dcos storage plugin-configuration [flags]

Options inherited from parent commands

Name Description
-h,--help Help for this command.
--timeout duration Override the default operation timeout. (default 55s)
-v,--verbose Verbose mode.