What is SaltStack?
SaltStack takes a new approach to infrastructure management by developing software that is easy enough to get running in seconds, scalable enough to manage tens of thousands of servers, and fast enough to control and communicate with them in milliseconds. Native Salt Cloud integration with powerful SaltStack configuration automation provides a cloud management platform for immediate cloud control, not just visualization.
Salt Cloud makes it easy to define and build heterogeneous cloud environments with a single command. SaltStack can then be used to orchestrate and configure the management of all the things that run in the cloud including any OS, virtualization, applications, application containers and code.
- Salt is a configuration management system, capable of maintaining remote nodes in defined states (for example, ensuring that specific packages are installed and specific services are running)
- Salt is a distributed remote execution system used to execute commands and query data on remote nodes, either individually or by arbitrary selection criteria
- It is currently the 4th most popular DevOps and Cloud Automation tool, with big brand name customers like mint.com, Hulu, Zillow, NASA, HP, LinkedIn, etc.
Salt Technical Overview
SaltStack is a high-speed remote execution platform that utilizes a master and minion architecture for infrastructure command and control. While the SaltStack architecture also offers Salt SSH for a more lightweight, agentless SaltStack alternative, the vast majority of SaltStack customers choose to utilize traditional SaltStack for extreme control of complex environments often running at massive scale.The Salt Master sends commands and configurations to the Salt Minion running on managed systems. The Salt Minion is an efficient and self-aware workhorse waiting for instructions. Asynchronous commands and data collection can be pushed or pulled between master and minion and communication is handled via a permanent, encrypted and authenticated connection.
Salt Cloud provides a powerful interface to interact with cloud hosts. This interface is tightly integrated with Salt, and new virtual machines are automatically connected to your Salt master after creation.
Since Salt Cloud is designed to be an automated system, most configuration is done using the following YAML configuration files:
- /etc/salt/cloud: The main configuration file, contains global settings that apply to all cloud hosts. See Salt Cloud Configuration.
- /etc/salt/cloud.providers.d/*.conf: Contains settings that configure a specific cloud host, such as credentials, region settings, and so on. Since configuration varies significantly between each cloud host, a separate file should be created for each cloud host. In Salt Cloud, a provider is synonymous with a cloud host (Amazon EC2, Google Compute Engine, Rackspace, and so on). See Provider Specifics.
- /etc/salt/cloud.profiles.d/*.conf: Contains settings that define a specific VM type. A profile defines the systems specs and image, and any other settings that are specific to this VM type. Each specific VM type is called a profile, and multiple profiles can be defined in a profile file. Each profile references a parent provider that defines the cloud host in which the VM is created (the provider settings are in the provider configuration explained above). Based on your needs, you might define different profiles for web servers, database servers, and so on. See VM Profiles.
Dimension Data CaaS Support
CaaS has its own non-standard API. SaltStack provides a wrapper on top of this API with common methods (abstract bindings) that are used by other IaaS solutions and Public cloud providers. Therefore, now you can use the Dimension Data Cloud module within Salt to communicate with both the public and private clouds (MCP 2.0).
Quick Start (Using Ubuntu as reference. CentOS and Debian are almost identical)
Install and configure the salt-master
Add the salt repository
- sudo apt-get install -y software-properties-common python-software-properties
- sudo add-apt-repository ppa:saltstack/salt
- sudo apt-get update
- sudo apt-get install salt-master
- sudo apt-get install salt-cloud
Master configuration, again this is all you need for the master to work. Edit using vim /etc/salt/master
Restart the master: sudo /etc/init.d/salt-master -restart
Install the salt-minion (You can install this on a separate server that you want to serve as a client, or minion)
Add the salt repository
sudo apt-get install -y software-properties-common python-software-properties
sudo add-apt-repository ppa:saltstack/salt
sudo apt-get update
sudo apt-get install salt-minion
sudo apt-get install salt-cloud
Minion configuration. Edit using vim /etc/salt/minion
master: <ip> # add the salt master ip value
Restart the minion: sudo /etc/init.d/salt-minion -restart
Accept the minion key
All Done. Now execute some commands on the minion. NOTE: In this example, debian8 is the name of the minion host.
salt debian8 grains.items # Display facts about the host
salt debian8 cmd.run “uname -a”
Follow the steps outlined here: Platform specific installation
Install Dimension Data module dependencies:
pip (Python package manager)
Apache LibCloud (Follow platform specific package manager commands)
NetAddr (Use the —upgrade option with pip command to ensure latest version)
Salt is installed and ready to be used for Dimension Data cloud deployment and orchestration
Salt Usage with Dimension Data module
Follow the instructions here to configure your environment to leverage the Dimension Data cloud module from Salt.
Now you can start to create cloud profiles to manage lifecycle of new/existing VM’s.
Get the ID of the image from step 1 (–list-images command) you want to use to clone VM’s. Also obtain the network domain and VLAN name of the network you want to deploy this VM(s)
Next create/edit the cloud profile in file /etc/salt/cloud.profiles. Paste the following and change the parameter values to match your environment.
provider: my-dimensiondata-config # name of cloud config
image: a8046bd1-04ea-4668-bf32-bf8d5540faed # OS image ID from (1a)
description: website application cluster # server description
network_domain: mynetwork # network domain name
vlan: myvlan # vlan name
auth: passw0rd # default OS password
To create multiple VM’s using the profile created in (b), issue the command:
salt-cloud –p centos5_dimensiondata websrv1 websrv2
This will create two new VM’s under the given network domain and vlan.