Kubernetes is a container orchestration tool built by Google.
It allows running a wide variety of workloads:
- StatefulSets, PersistentVolumes - for Stateful workloads
- Deployments, DaemonSets, Jobs - for Stateless workloads
- Deployments, StatefulSets & DaemonSets - for long-lived workloads
- Jobs - for short-lived workloads
- CronJobs - for periodic workloads
Kubernetes also provides resources for managing the network:
- Services - for exposing workloads using a host and a port
- Ingress Controller & Ingresses - for abstracting away services and manage complex rules
- API Gateway & Routes - similar to ingresses but more api-oriented
And finally, it provides means of configuring workloads:
- ConfigMaps - for workload configuration
- Secrets - for sensitive configuration
Orchestration systems decide where and when workloads run on a cluster of machines (physical or virtual). On top of that, orchestration systems usually help manage the lifecycle of the workloads running on them. Nowadays, these systems are usually used to orchestrate containers, with the most popular one being Kubernetes.
There are many advantages to using Orchestration tools:
- Improve the utilization of CPU, memory, and storage usage by running many processes on a single machine
- Manage the entire lifecycle of the orchestrated workloads: pre & post initialization & termination
- Control the scale of workloads and the scale of their underlying infrastructure separately
- Centralized management of workloads and infrastructure
As the industry standard for container orchestration, Kubernetes has many advantages:
- Wide variety of features for both common and advanced use-cases
- Wide variety of tools built by the community to provision, deploy, manage, and monitor resources on Kubernetes
- Ability to scale up & down workloads and infrastructure based on varying needs
- Ability to manage the lifecycle workloads
Some of Kubernetes' leading competitors are Nomad, AWS ECS, and GCP Cloud Run.
They all have a rich set of abilities, but all lack the community that exists around Kubernetes.
AWS ECS and GCP Cloud Run are more well suited for running workloads on AWS and GCP accordingly, due to a wide variety of integrations with other products the Cloud providers offer, but due to the same reason they vendor-lock the system to the selected cloud.
Our experience with Kubernetes have helped us build up knowledge and tools to help our clients.
Some of the things we did:
- Provisioned Kubernetes clusters on AWS, GCP, Azure and on-premise setups
- Implemented Kubernetes autoscaling solutions for both the nodes and for the workloads deployed on them
- Deployed and managed the lifecycle of stateless and stateful workloads using Helm
- Monitored Kubernetes clusters using Prometheus and Grafana
- Deployed and provisioned resources on Kubernetes using Pulumi and Terraform
- Implemented service mesh in multi-cluster setups
- Built entire serverless architectures on top of Kubernetes using Knative
The experience we have building a wide variety systems on top of Kubernetes helped us gain the knowledge required to help companies build high-end Kubernetes architectures.
- Review your current Kubernetes cluster
- Build a roadmap for improving your existing Kubernetes setup
- Deploy, monitor, and manage the life-cycle of workloads on Kubernetes
- Adopt best practices and industry-standard tools to manage Kubernetes