Use Docker Machine to create Docker hosts with RackHD. This is the first solution that enables bare-metal provisioning of Docker and configuration of Docker Swarm to a hardware agnostic server infrastructure.
RackHD Machine Driver increases efficiency by using RackHD APIs to drive automation for all compatible hardware. This entirely new solution differs from other available drivers that are focused on automating virtual machines or proprietary stacks, and allows users to capture all the robust benefits such as increased application performance and reduced management complexity by removing the hypervisor layer.
Linux & Mac OSX:
curl -L https://github.com/codedellemc/docker-machine-rackhd/releases/download/v0.2.0/docker-machine-driver-rackhd.`uname -s`-`uname -m` >/usr/local/bin/docker-machine-driver-rackhd && chmod +x /usr/local/bin/docker-machine-driver-rackhd
To use the driver first make sure you are running at least version
0.5.1 of docker-machine
.
$ docker-machine -v
docker-machine version 0.5.1 (7e8e38e)
Verify docker-machine
can access the RackHD driver by issuing the --help
or | more
flags. A list of RackHD options will be displayed on the menu.
$ docker-machine create -d rackhd | more
Usage: docker-machine create [OPTIONS] [arg...]
Specify rackhd
as the driver with --driver
or -d
create flags then accompany it with any of the following options as additional parameters.
Options:
Option | Environment Variable | Default | Description |
---|---|---|---|
--rackhd-endpoint | RACKHD_ENDPOINT | localhost:8080 | RackHD Endpoint for API traffic |
--rackhd-transport | RACKHD_TRANSPORT | http | RackHD Endpoint Transport. Specify http or https |
--rackhd-node-id | RACKHD_NODE_ID | Specify Node ID, MAC Address or IP Address | |
--rackhd-sku-id | RACKHD_SKU_ID | ID of SKU to pick a node from | |
--rackhd-sku-name | RACKHD_SKU_NAME | Name of SKU to pick a node from | |
--rackhd-ssh-user | RACKHD_SSH_USER | root | SSH User Name for the node |
--rackhd-ssh-key | RACKHD_SSH_KEY | Path to an existing SSH private key to SSH into node | |
--rackhd-ssh-password | RACKHD_SSH_PASSWORD | root | SSH Password for the node (only use if no key is present) |
--rackhd-ssh-port | RACKHD_SSH_PORT | 22 | SSH Port for the node |
--rackhd-ssh-attempts | RACKHD_SSH_ATTEMPTS | 10 | Number of attempts to check that SSH port is available |
--rackhd-ssh-timeout | RACKHD_SSH_TIMEOUT | 15 | Timeout (in seconds) for checking that SSH port is up |
--rackhd-workflow-name | RACKHD_WORKFLOW_NAME | Name of RackHD workflow to run on node | |
--rackhd-workflow-poll | RACKHD_WORKFLOW_POLL | 15 | Frequency in seconds to poll for status of active workflow |
--rackhd-workflow-timeout | RACKHD_WORKFLOW_TIMEOUT | 60 | Max time in minutes to wait for workflow to finish |
NOTE: Specifying either a Node ID or a SKU is required.
The driver can work by either specifying a Node ID to work against, or the driver can choose a node from an existing SKU (which acts as a pool of nodes). When given a specific Node ID, the Node must be a compute
instance, not an enclosure
.
These examples will function as expected if Docker Machine has access to the DHCP network of RackHD.
Create a Docker host using a specific Node ID. In this case, the node already has an OS (CentOS) and we are using the default username and password to SSH into the node. An SSH key will be automatically generated and used for future connections.
$ docker-machine create -d rackhd --rackhd-node-id 56c61189f21f01b608b3e594 rackhdtest
Running pre-create checks...
(rackhdtest) Testing accessibility of endpoint: localhost:8080
(rackhdtest) Test Passed. localhost:8080 Monorail and Redfish API's are accessible and installation will begin
Creating machine...
(rackhdtest) Connection succeeded on: 172.31.128.16:22
(rackhdtest) Creating SSH key...
(rackhdtest) Copy public SSH key to rackhdtest [172.31.128.16]
Waiting for machine to be running, this may take a few minutes...
Detecting operating system of created instance...
Waiting for SSH to be available...
Detecting the provisioner...
Provisioning with centos...
Copying certs to the local machine directory...
Copying certs to the remote machine...
Setting Docker configuration on the remote daemon...
Checking connection to Docker...
Docker is up and running!
To see how to connect your Docker Client to the Docker Engine running on this virtual machine, run: docker-machine env rackhdtest
Here is an example using the name of a SKU, allowing the driver to choose a node automatically. We also have the driver install CoreOS on the node, and pass it the path to an existing SSH private key that will match the public key that gets installed on the node by RackHD.
$ docker-machine create --d rackhd --rackhd-sku-name SmallNode --rackhd-ssh-key ~/git/RackHD/on-http/data/rackhd_rsa --rackhd-workflow-name Graph.InstallCoreOS --rackhd-ssh-user core rackhdtest
Running pre-create checks...
(rackhdtest) Testing accessibility of endpoint: localhost:9090
(rackhdtest) Test Passed. localhost:9090 Monorail and Redfish API's are accessible and installation will begin
(rackhdtest) Looking for available node within SKU
(rackhdtest) Found a free node within SKU, Node ID: 57bdf3197ca543010074684b
Creating machine...
(rackhdtest) Connection succeeded on: 172.31.128.5:22
Waiting for machine to be running, this may take a few minutes...
Detecting operating system of created instance...
Waiting for SSH to be available...
Detecting the provisioner...
Provisioning with coreOS...
Copying certs to the local machine directory...
Copying certs to the remote machine...
Setting Docker configuration on the remote daemon...
Checking connection to Docker...
Docker is up and running!
To see how to connect your Docker Client to the Docker Engine running on this virtual machine, run: docker-machine env rackhdtest
Note that when using a workflow to install an OS, it takes many minutes to do the install. It can be useful to use the --debug
flag to track progress.
Check out the RackHD Vagrant + Docker Machine Example to view a complete in-depth configuration and walk-through.
The functions for life cycle of machine management such as Start, Stop, Restart, Kill, and Remove requires the use of IPMI or other OBM solution. The driver does not need to know these credentials, rather they are configured within RackHD. Be sure these credentials are a part of the RackHD provisioning workflow when a node is being discovered.
Licensed under the Apache License, Version 2.0 (the “License”); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an “AS IS” BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.
If you have questions relating to the project, please either post Github Issues, join our Slack channel available by signup through community.emc.com and post questions into #support
, or reach out to the maintainers directly. The code and documentation are released with no warranties or SLAs and are intended to be supported through a community driven process.