Deploying on a Preexisting Cluster
ICM provides you with the option of allocating your own cloud or virtual host nodes or physical servers to deploy containers on. The provisioning phase usually includes allocation and configuration subphases, but when the Provider field is set to PreExisting, ICM bypasses the allocation phase and moves directly to configuration. There is no unprovisioning phase for a preexisting cluster.
Host Node Requirements for PreExisting
The preexisting host nodes must satisfy the criteria listed in the following sections.
ICM cannot deploy containers on the host on which it is running. Because ICM has no way to determine the IP address of its host, it is the user’s responsibility to avoid specifying the ICM host as a host node for Preexisting deployment.
ICM requires that SSH be installed and the SSH daemon running.
Additionally, a nonroot account must be specified in the SSHUser field in the defaults file. This account should have the following properties:
It must provide sudo access without requiring a password. You can enable this by creating or modifying a file in /etc/sudoers.d/ to contain the following line:
<accountname> ALL=(ALL) NOPASSWD:ALLCopy code to clipboard
To prohibit password logins altogether, you can use set the SSHOnly parameter to true. Because this prevents ICM from logging in using a password, it requires that you stage your public SSH key (as specified by the SSHPublicKey field) on each node.
If the home directory is located anywhere other than /home, it should be specified in the Home field in the defaults file, for example:
"Home": "/users/"Copy code to clipboard
Note that the home directory must not be a network directory shared among nodes (for example /nethome), because this would cause configuration files to overwrite one another.
ICM can log in as SSHUser using SSH keys or password login. Even if password logins are enabled, ICM will always try to log in using SSH first.
If you've configured your machines with SSH keys, you must specify the SSH public/private key pair your configuration file using the SSHPublicKey and SSHPrivateKey fields.
During the configuration phase, ICM configures SSH login and disables password login by default. If you don't wish password login to be disabled, you can touch the following sentinel file in the home directory of the SSHUser account:
mkdir -p ICM touch ICM/disable_password_login.done
If you've configured your machines with a password, specify it using the SSHPassword field in your configuration file. ICM assumes these credentials are not secure.
Enabling password login and specifying the SSHPassword field does not remove the requirement that ICM be able to carry out all postconfiguration operations via SSH.
To avoid conflicting with local security policies and because of variations among operating systems, ICM does not attempt to open any ports. The following table contains the default ports that must be opened to make use of various ICM features. As described in Port and Protocol Parameters, the ports are configurable, for example:
If you change one or more of these fields from the defaults as illustrated, you must ensure that the ports you specify are open.
|2376||tcp||Docker (TLS mode)||Required.|
|80||tcp||Web||Required to access the public Apache web server on nodes of role WS (web server).|
|DNS||Required for Weave DNS.|
|Weave Net||Required for Overlay=Weave (default for all providers except PreExisting).|
|Required for web access to InterSystems IRIS+Spark containers. Different ports may be specified using the fields SparkMasterPort, SparkWorkerPort, SparkMasterWebUIPort, SparkWorkerWebUIPort, SparkRESTPort, SparkDriverPort, and SparkBlocKManagerPort, respectively.|
|tcp||Spark||Required for web access to Spark containers. Different ports may be specified using the Spark*Port fields.|
|51773||tcp||InterSystems IRIS Superserver||Required. A different port may be specified using the SuperServerPort field.|
|52773||tcp||InterSystems IRIS Webserver||Required. A different port may be specified using the WebServerPort field.|
|2188||tcp||InterSystems IRIS ISCAgent||Required for mirroring. A different port may be specified using the ISCAgentPort field.|
|4002||tcp||InterSystems IRIS License Server||Required Note: A different port may be specified using the LicenseServerPort field.|
|53773||tcp||InterSystems IRIS JDBC Gateway Port||Required to use the JDBC Gateway. A different port may be specified using the JDBCGatewayPort field.|
As described in Storage Volumes Mounted by ICM, ICM mounts storage volumes used by InterSystems IRIS and Docker under /dev, using names specified by the fields listed in Device Name Parameters. These fields have defaults for other providers, but not for PreExisting, so they must be included in your defaults file for PreExisting deployments.
For provider PreExisting, the device name null (literal string) changes the behavior as follows:
Docker is configured to use the loopback logical volume manager (see Configure loop-lvm mode for testing ); this mode is not suitable for production use.
DataDeviceName, WIJDeviceName, Journal1DeviceName, Journal2DeviceName:
ICM simply creates the mount point as a local directory on the host volume; this mode is not suitable for production use.
Definitions File for PreExisting
The primary difference between PreExisting and the other providers is the contents of the definitions file, which contains exactly one entry per node, rather than one entry per role with a Count field to specify the number of nodes of that role. Each node is identified by its IP address or fully-qualified domain name. The fields shown in the following table are required for each node definition in a preexisting cluster deployment (along with other required fields described in other sections of this document):
|IPAddress||IP address of the preexisting node.||172.16.110.9|
|DNSName||Fully-qualified DNS name of the preexisting node; can be used in place of IPAddress. Must be resolvable by ICM and within the cluster. (For all other providers this is an output field, rather than an input field.)||subnet2node21.mycointernal.com|
|SSHUser||Nonroot user with passwordless sudo access (as described in SSH, above).||icmuser|