When it comes to deployment architectures, Kubernetes is a flexible orchestration tool. It can run on premises,...
in a public cloud and across multiple public clouds.
A multi-cloud Kubernetes deployment includes multiple nodes distributed across more than one cloud platform. For example, you could have some nodes in two public clouds, such as AWS and Microsoft Azure. Or, you could run some nodes in a public cloud, run others in a private cloud and manage those nodes through the same Kubernetes instance.
In this approach, the distribution of master and worker nodes within a cluster -- the set of host servers for a Kubernetes instance -- between the different clouds can take various forms. Spreading the masters among different clouds is the best way to achieve high availability. However, an alternative approach is to run the master, or masters, within only one cloud, even if some worker nodes run in another cloud.
Benefits of multi-cloud Kubernetes
Resiliency is the main rationale for a multi-cloud Kubernetes strategy -- a node failure in one cloud would not cause the entire instance to fail. Also, an organization can host nodes within multiple availability zones or regions within the same cloud, which provides some protection against localized infrastructure failures.
A multi-cloud Kubernetes strategy is also considerably flexible. Multi-cloud environments enable enterprises to pick and choose from cloud providers' offerings, and organizations that host nodes in multiple clouds gain more configuration options for the Kubernetes infrastructure. For example, one cloud vendor might offer different virtual server instance configurations than another vendor. As a result, a multi-cloud Kubernetes deployment would provide an organization with a longer list of configuration options.
Finally, multi-cloud Kubernetes can be attractive because it enables an enterprise to set up a single application management and deployment system. IT teams don't have to learn a separate set of tools for each cloud that their organization uses, as would be the case when they use a public cloud vendor's hosted Kubernetes service, such as Amazon Elastic Container Service for Kubernetes.
However, even though Kubernetes standardizes and streamlines the deployment process, doing so across clouds introduces complexity. IT teams that manage multi-cloud Kubernetes deployments need to know how to provision infrastructure on different clouds and use different configuration tools for each platform. Also, the more clouds in use, the more there is to monitor.
Implement Kubernetes in multiple clouds
In the past, admins could use the Kubernetes federation feature to run multiple clusters spread across different clouds. However, Kubernetes' original federation feature is now deprecated; although it will still technically work, its use is "strongly discouraged" by Kubernetes developers.
The promise of the original federation feature never came to fruition due to issues with the API at the cluster level, a lack of flexibility and other limitations. The Kubernetes development community is working on Federation version 2, but it is not yet mature at time of publication.
That leaves two main approaches to set up Kubernetes across multiple clouds:
- Download a Kubernetes release from io, install it and add nodes from multiple clouds, as desired.
This strategy requires the most effort, because Kubernetes must be set up from scratch. Admins have to manually provision nodes on different clouds, using providers' native provisioning tools, such as AWS CloudFormation and Azure Resource Manager. However, this is not the case if they use third-party software such as Terraform to automate and standardize provisioning.
- Use a Kubernetes distribution that supports multiple clouds.
Red Hat offers a version of Kubernetes that supports multiple clouds in the commercial OpenShift Container Platform. It is also possible with the Origin Community Distribution, which relies on the same upstream Kubernetes distribution as OpenShift Container Platform. Other versions of OpenShift lack the flexibility to enable multi-cloud Kubernetes.
Additional options include Rancher, a multi-cluster management tool, and Platform9, a hybrid cloud management tool. These services make it possible to abstract multiple underlying host infrastructures -- such as multiple public or private clouds -- into a virtual infrastructure layer that you can manage from a single interface.