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.

Highlights:

  • 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.

Cloud Management

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).

Salt Installation

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

interface: 0.0.0.0

max_open_files: 100000

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

salt-key –list

salt-key –accept-all

salt

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”

Detailed (Alternative)

Follow the steps outlined here: Platform specific installation

Post-configuration

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.

centos5_dimensiondata:

  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.              

Explore more salt-cloud options and complex scenarios using maps, actions and functions.