Evaluation :: Rancher

Rancher is a little different to the gravity and kubespray projects that we have looked at previously. Rancher is a self-contained system that attempts to provide an easy way to deploy entire Kubernetes clusters in addition to providing a rich and growing set of click-to-install applications.

Start the rancher service

Rancher is distributed most conveniently as a docker container. Running the service is as simple as:

sudo docker run --name rancher-server -d --restart=unless-stopped -p 8080:8080 rancher/server:stable

After that, you can navigate to your host on port :8080 (or whatever host port you map to.) You’ll be greeted by a web page like this:

Adding nodes

Before Rancher can deploy anything, you need to run a join command on each of the nodes that you want to add to the rancher ecosystem.

  • Navigate to ‘INFRASTRUCTURE->Hosts’
  • Click the ‘Add Host’ button
  • If required, enter the real HTTP endpoint into the web form when prompted.

Run the join command on the nodes

sudo docker run -e CATTLE_AGENT_IP="playground2"  -e CATTLE_HOST_LABELS='environment=playground'  --rm --privileged -v /var/run/docker.sock:/var/run/docker.sock -v /var/lib/rancher:/var/lib/rancher rancher/agent:v1.2.11 http://playground1:8080/v1/scripts/28912A58DD5EEAACB1DF:1546214400000:oX3k2gnmM7kzcfmZdlgB8cwrapU

Once you have joined your nodes to the running Rancher system, the noeds will show up in the Hosts page.

Installing stacks

Now that we have nodes added to the cluster we can pick a stack to deploy (or create our own.) Rancher has a pretty rich catalog of pre-built stacks.

As part of the evaluation I selected the Vault stack. It failed to install on my lab setup, but it could well be something particular to my setup that caused the failure.


WhiKle stacks are being created Rancher provides very helpful immediate feedback in the webui, but what is going on at a deeper level is pretty difficult to get to.

Kubernetes!

Rancher comes with a Kubernetes implementation in the stack catalog. As of this writing it’s at version 1.12.7, so not bleeding-edge, but not ancient either.

I worked through quite a few failures after deploying the Kubernetes stack – most of which I resolved by adding a 4th node – making 3 cluster nodes and allowing quorum of etcd. After some additional manual restarting of services:

The resulting stack will look a little unfamiliar to those familiar with a base Kubernetes installation. Somehow the nodes and system services seem to be Rancher-managed and hidden away from the Kubernetes API.

This seems like an unfortunate decision given the push toward static pods and running ‘k8s-on-k8s.’ It seems like the community is moving in the direction of integration with the same scheduling and resource management tools for the control plane as the application plane.

Even with the stack fully running, Rancher provides tantalizing links that do not seem to work. This Kubernetes dashboard link was broken for me throughout the evaluation. I noted that here was no ‘Kubernetes Dashboard’ service in the stack, but I did not try deploying a helm of the dashboard. The link was there, and should have worked out of the box.

Conclusion

Rancher is an ambitious tool that aims to remove the complexity of deploying common stacks, and further ‘containerize’ full systems – think docker for docker-compose or Kubernetes deployments. In many ways, Rancher is attempting to achieve the same automation as Gravity. In so many other ways, it is building a completely new and unique ecosystem of turnkey deployments.

That automation and turnkey approach has two sides; in much of the evaluation, I found myself at a loss when trying to figure out why stacks were not working. There is very little direction leading you under the hood to enable admins to work through issues.

Adding Kubernetes to Rancher improves the situation somewhat, but I could not help but think “What is Rancher actually offering me here?” I did not get into working out if it is possible to switch out CNI providers, maybe add multus, or simply add something like local-storage-provider or StorageOS