Why Kubernetes Is Getting So Popular: A Technical Overview
The article explains Kubernetes' rapid rise by detailing its history, YAML‑based declarative infrastructure, GitOps workflow, scalability features, security policies, cloud‑provider integration, extensibility through CRDs and Operators, and the vibrant community that drives continuous innovation.
When this article was written, Kubernetes had been around for about six years and had become one of the most beloved platforms for engineers, ranking third among the most popular platforms. Kubernetes is a system that lets you run containers and coordinate their workloads.
Originally, containers stem from Linux kernel isolation mechanisms (cgroups since 2007 and namespaces since 2002). With LXC in 2008 and Google’s Borg, containers gained importance, and Docker’s 2013 release popularized them. Kubernetes, released in 2015, quickly became the de‑facto standard for container scheduling.
Infrastructure Expressed in YAML
Kubernetes shifted infrastructure from code‑centric tools like Puppet and Chef to data‑centric YAML files. All resources—Pods, Deployments, ConfigMaps, etc.—can be described in YAML, for example:
apiVersion: v1
kind: Pod
metadata:
name: site
labels:
app: web
spec:
containers:
- name: front-end
image: nginx
ports:
- containerPort: 80This representation lets DevOps or SRE engineers describe workloads without writing code in languages such as Python, Ruby, or JavaScript.
GitOps: storing all YAML files in a Git repository provides version control, auditability, and easy automation via pull‑request workflows.
Scalability: YAML makes it simple to adjust numeric fields; for instance, the HorizontalPodAutoscaler can automatically scale pods between a minimum and maximum number.
apiVersion: autoscaling/v2beta2
kind: HorizontalPodAutoscaler
metadata:
name: myapp
namespace: default
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: myapp-deployment
minReplicas: 1
maxReplicas: 20
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 50Security and control: YAML can be validated with tools like Conftest and Open Policy Agent. An example OPA policy ensures containers do not run as root:
package main
den y[msg] {
input.kind = "Deployment"
not input.spec.template.spec.securityContext.runAsNonRoot = true
msg = "Containers must not run as root"
}Cloud‑provider integration: Kubernetes can automatically create cloud resources such as an AWS LoadBalancer when a Service of type LoadBalancer is defined.
Scalability
Kubernetes is highly extensible. Users can define Custom Resource Definitions (CRDs) to add new resource types, such as a CronTab:
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
name: crontabs.my.org
spec:
group: my.org
versions:
- name: v1
served: true
storage: true
schema:
openAPIV3Schema:
type: object
properties:
spec:
type: object
properties:
cronSpec:
type: string
pattern: '^([0-9*]+)(/[0-9]+)?(\s+([0-9*]+)(/[0-9]+)?){4}$'
replicas:
type: integer
minimum: 1
maximum: 10
scope: Namespaced
names:
plural: crontabs
singular: crontab
kind: CronTab
shortNames:
- ctInstances can then be created with a simple YAML file:
apiVersion: "my.org/v1"
kind: CronTab
metadata:
name: my-cron-object
spec:
cronSpec: "* * * * */5"
image: my-cron-image
replicas: 5Developers can also build Operators—controllers that automate the lifecycle of CRDs—using the Operator SDK:
$ operator-sdk new my-operator --repo github.com/myuser/my-operatorThe SDK scaffolds a project with Go code and YAML manifests, for example:
.
|____cmd
|____manager
| ____main.go
|____go.mod
|____deploy
| ____role.yaml
| ____role_binding.yaml
| ____service_account.yaml
| ____operator.yaml
|____tools.go
|____go.sum
|____.gitignore
|____version
| ____version.go
|____build
| ____bin
| ____user_setup
| ____entrypoint
| ____Dockerfile
|____pkg
| ____apis
| ____apis.go
|____controller
| ____controller.goAdditional SDK commands add APIs and controllers:
$ operator-sdk add api --api-version=myapp.com/v1alpha1 --kind=MyAppService
$ operator-sdk add controller --api-version=myapp.com/v1alpha1 --kind=MyAppServiceFinally, the operator can be built and pushed to a container registry:
$ operator-sdk build your.container.registry/youruser/myapp-operatorOther projects like KUDO let users create Operators with declarative YAML. For example, installing a Kafka operator:
$ kubectl kudo install kafkaand configuring it with parameters:
$ kubectl kudo install kafka --instance=my-kafka-name \
-p ZOOKEEPER_URI=zk-zookeeper-0.zk-hs:2181 \
-p ZOOKEEPER_PATH=/my-path -p BROKER_CPUS=3000m \
-p BROKER_COUNT=5 -p BROKER_MEM=4096m \
-p DISK_SIZE=40Gi -p MIN_INSYNC_REPLICAS=3 \
-p NUM_NETWORK_THREADS=10 -p NUM_IO_THREADS=20Innovation
Kubernetes releases a major version every three to four months, delivering dozens of new features and improvements each cycle, with a vibrant contributor community reflected in GitHub activity.
Community
The project graduated to the Cloud Native Computing Foundation in 2015 and now hosts many SIGs, CloudNativeCon/KubeCon events, and a technical oversight committee that drives ecosystem growth.
Future
Serverless frameworks such as Knative and OpenFaaS are abstracting infrastructure further, allowing developers to focus more on application code while Kubernetes continues to evolve with new open‑source projects.
High Availability Architecture
Official account for High Availability Architecture.
How this landed with the community
Was this worth your time?
0 Comments
Thoughtful readers leave field notes, pushback, and hard-won operational detail here.