In my previous blog post about the Kubernetes Plugin for Cloudify, I broke down the reasoning behind the need to orchestrate Kubernetes – the main reason being the need to orchestrate across diverse workloads. It’s no easy feat to get multiple Kubernetes clusters on different public and private clouds to talk with each other in a consistent manner. That is the plugin.
About Cloud Providers in Kubernetes
Before Kubernetes 1.6, Kubernetes used native Cloud Providers to communicate and provision Cloud resources. Over the course of releases 1.6 – 1.9, the Cloud Provider was externalized.
When a Kubernetes cluster is deployed, either a new or existing virtual network is the setting across which various Nodes in the cluster communicate. This may be an VPC, a LAN, or something else. The same holds true for the Compute and Storage requirements. If new resources are required, a Cloud Provider will be needed.
The role of the Cloud Provider in Kubernetes is to manage the lifecycle of these IaaS resources, such as VMs, Volumes, Load Balancers, etc.
Cloudify Kubernetes Provider
So, we are happy to announce the introduction of the Cloudify Kubernetes Multi-Cloud Provider. The Provider offers a different set of capabilities from the plugin. While the plugin is meant to create or delete resources on an already running cluster or associating pods with specific nodes, the Provider has a much more broad scope of capabilities, including managing clusters on any number of clouds.
The Kubernetes Provider is meant to allow Cloudify to act as the infrastructure manager for Kubernetes. This means it is capable of the following:
- Scale and Autoscale nodes natively
- Configure DNS and Load Balancing
- Storage and Compute customization
- Native Multi-cloud Support
On top of that, the Provider also enables:
- Kubernetes management of infrastructure lifecycle
- Open Infrastructure with native Kubernetes interface
What makes this especially interesting is that Cloudify, now acting as the Cloud Provider for Kubernetes, is able to much more easily deploy K8s on multiple clouds as well as auto-scale them simultaneously. In essence, Cloudify is the broker between Kubernetes and the actual infrastructure your application is running on.
The Provider Basics
When a Kubernetes Node joins a Kubernetes cluster, Kubernetes validates the node using the Instance object provider object.
The Cloudify Kubernetes Provider uses a node template of type
cloudify.nodes.ApplicationServer.kubernetes.Node to gather information about the node, such as hostname and IP. It also generates an SSL certificate for registration with the Cloudify API.
We use Cloudify groups to then build one-to-one dependencies for the Cloudify Kubernetes Nodes, for example, in OpenStack the Kubernetes Node is actually several application node templates for everything from client management and volume management to virtual ports and floating IPs. However, all Kubernetes sees is one “Node” in the cluster.
This implementation can be customized to suit your environment’s needs quite easily.
Below is a sample deployment of Kubernetes on OpenStack:
If you are interested in learning more about our Kubernetes integration, register for our Kubernetes Webinar.
Here are some more articles that may interest you:
Kubernetes Core Concepts and Tools for Monitoring K8s
Introducing the Cloudify Kubernetes Plugin
Orchestrating A Kubernetes Managed Virtual Network Function
Scaling Kubernetes Microservices on OpenStack With TOSCA Orchestration Pt I of II
Scaling Kubernetes Microservices on OpenStack With TOSCA Orchestration Pt II of II