Ansible is a powerful infrastructure automation tool. Kubernetes is a powerful application deployment platform. We will see how to use these tools to automate massively-scalable, highly-available infrastructure.
Ansible is a flexible, open source automation tool that comes with a complete set of capabilities to perform a variety of configuration management tasks over multiple systems at the same time.
The most fundamental Ansible features are represented by modules. Modules are specialized plugins that do one thing right, like execute a system command or add one or more lines into a file. They also hide the complexity of advanced tasks by managing the state of operating systems services, installing and uninstalling software repositories, and more, in a distribution-agnostic way.
Docker containers run effectively under the control of Kubernetes. But, what happens when Docker, Kubernetes or any of the components they rely on need to be updated, restarted or otherwise maintained?
While these activities can be performed manually, those processes are both time-consuming and error-prone. In DevOps and IT, this is where automation tools come into play and show their true value. Ansible is a leading tool in this space due to the simplicity of getting it up and running. Ansible has no agents that need to be preinstalled on hosts; instead, it uses SSH to connect to hosts and its runbooks are written in YAML: an easy format to work with when using simple text editors and version control software like Git.
Kubernetes Clusters dont appear out of thin air. Depending on the type of clusters you Are using, they require management for upgrades and integrations. Cluster management can become crippling, especially if, like most organizations, you are managing multiple clusters.
If you are running inside a private cloud, or on bare metal servers, you will need a way to install Kubernetes and manage individual servers in the cluster. Ansible has a proven track record of being able to orchestrate multi-server applications, and Kubernetes itself is a multi-server application which happens to manage one or thousands of other multi server applications through containerization.
Even if you dont need multi cloud capabilities, Ansible offers useful abstractions like managing CloudFormation template deployments on AWS with the cloudformation module, or Terraform deployments with the terraform module.
Ansible shows great promise is in managing applications inside of Kubernetes. Using Ansible to build operators with the Operator SDK, you can encode all your applications lifecycle management (deployment, upgrades, backups, etc.) inside of a Kubernetes operator to be placed in any Kubernetes cluster even if you dont use Ansible to manage anything else in that cluster.
Rather than forcing developers and ops teams to learn Go or another specialized language to maintain an operator, you can build it with YAML and Ansible.
As an automation tool, Ansible is used to create playbooks for resolving common events and incidents that occur in the environment, from restarting applications and services to adding additional cluster nodes. This automation is used by on-call staff, from operations to development, to reduce mean time to acknowledge and recover (MTTA/MTTR), and to provide better service overall.