When comparing Kubernetes vs Ansible, the Slant community recommends Ansible for most people. In the question“What are the best WordPress deployment tools?” Ansible is ranked 1st while Kubernetes is ranked 3rd. The most important reason people chose Ansible is:
Ansible does not use agents. Instead, all master-agent communications are handled via SSH commands or through the Paramiko module which provides a Python interface to SSH.
Specs
Ranked in these QuestionsQuestion Ranking
Pros
Pro Open Source
Kubernetes is free and open source.
Pro Built on several years of experience with containers
Kubernetes was built on top of several years of experience from Google working on containers in production. It's a little opinionated on how containers should work and behave, but if used correctly it can help you achieve fault-tolerant systems.
Pro Fault tolerant
Almost everything in Kubernetes is designed to handle if parts of it fail or if your service crashed for whatever reason. So it's particularly adapted if you've a cluster (even a very small one).
Pro Works well with modern operating systems
Kubernetes works very well with modern environments (such as CoreOS or Red Hat Atomc) which offer lightweight computing nodes that you don't have to manage, since they are managed for you.
Pro Supported on several PaaS
Kubernetes is currently supported by Google Compute Engine, Rackspace, Microsoft Azure, and vSphere. Work is being done to support Kubernetes on OpenShift and CloudFoundry.
Pro Easy to do grouping tasks
Kubernetes uses labels which are key-value pairs that are attached to objects, usually pods. They are used to specify the characteristics of an object like the version, tier, etc. Labels are used to identify objects or groups of objects according to different characteristics that they may have, for example they can be used to identify all the pods that are included in the backend tier.
Through labels it's easier to do grouping tasks for pods or containers, like moving pods to different groups or assigning them to load-balanced groups.
Pro Great starting point for beginners
Kubernetes great for beginners who are just starting to work on clustering. It's probably the quickest and easiest way to start experimenting and learning cluster oriented development.
Pro Agentless
Ansible does not use agents. Instead, all master-agent communications are handled via SSH commands or through the Paramiko module which provides a Python interface to SSH.
Pro Gentle learning curve
Ansible is agentless, making it quick and painless to setup. Ansible has clear and detailed documentation and provides plenty of built-in modules. Its DSL is obtained using YAML and a familiar template system.
Pro Simple tasks can be run from the command line
Some simple tasks such as triggering updates or reboots, or even checking if the service is running can be done without configuration files. These commands can be run from the command line instead.
Pro Support for major cloud providers
Ansible supports managing major cloud devices (AWS, RackSpace, Digital Ocean, OpenStack) through a collection of modules which are available.
Pro Extensible in any language / runtime
Although you may need to preinstall favorite programming environment, Ansible modules are accessed via shell calls and therefore any executable on the remote system built for use with Ansible may be used as an Ansible module.
Pro Web UI
Ansible has a Web UI in the form of AnsibleWorks AWX which unfortunately does not tie directly into the CLI. So configuration elements present in the CLI can not appear in the UI unless a sync pass is run. Although the Web UI is helpful and functional, it's still not as complete feature-wise as the CLI.
Pro Easy to customize
Ansible is very easy to customize. It doesn't force you to use a language with which you are unfamiliar. Instead, all commands are packaged into YAML modules which are called playbooks. So as long as you use a programming language that can output JSON, you are able to customize it.
Pro Rich diff
Modules that support rich diffs can expose nearly every detail of what will change. However not all core modules support diffs, so there may still be some opaque chances made.
Pro Creating reusable components is simple
Making roles modular and reusable is a fast process with Ansible.
Cons
Con Cannot define containers through the Docker CLI
Kubernetes was not written for docker clustering alone. It uses a different API, configuration and different YAML definitions. So you can't use the Docker CLI or Docker Compose to define your containers. Everything has to be done from scratch.
Con Windows restrictions
Windows compatibility rules, the host OS version must match the container base image OS version. Only Windows containers with Windows Server 2019 are supported. Also other restrictions are present.
Con If used on an existing system, some re-organizing may be needed
Because of how opinionated Kubernetes is, it may be necessary to change some things if you decide to use Kubernetes as an orchestration tool in an existing application.
Con Sometimes Pods refuse to (re)start automatically
It happens that a Pod needs a manual kick before it runs properly, especially if you're near full utilisation of your machine resources. Sometimes it is just a long delay.
Con Slow
Compared to other tools, Ansible requires more time to complete the same actions.
Con Somewhat weak documentation
Ansible is still relatively new, as far as server automation tools go. This is the reason that many users have found it's documentation lacking in some parts. Although this is mitigated by the fact that it's very easy to learn to use.
Con Too easy to move the port in the crappy scripts you've been using for years
If you have an extensive codebase of scripts, your users might find it too easy to just port in the same unsupportable crappy scripts they've been using for years.
Con Doesn't have its own inventory system
Ansible really depends on you to provide it a list of nodes to run on and doesn't actively maintain a central inventory
Con No Python API available, despite the fact that Ansible is written in Python
Despite being written and taking good advantage of the python environment, Ansible offers no python api for programming, and does not make it possible to follow best practices for writing custom Ansible modules.