What is cdk8s?
cdk8s (Cloud Development Kit for Kubernetes) is an open-source software development framework for defining Kubernetes applications and resources using familiar programming languages. It allows developers to use high-level constructs and abstractions to define Kubernetes manifests, making it easier to manage and deploy Kubernetes resources programmatically.
What are cdk8s's main functionalities?
Defining Kubernetes Manifests
This code sample demonstrates how to define a Kubernetes Deployment manifest using cdk8s. It creates a deployment with 3 replicas of an NGINX container.
const cdk8s = require('cdk8s');
const { App, Chart } = cdk8s;
const k8s = require('cdk8s-plus-17');
const app = new App();
const chart = new Chart(app, 'MyChart');
new k8s.Deployment(chart, 'MyDeployment', {
spec: {
replicas: 3,
selector: {
matchLabels: { app: 'my-app' }
},
template: {
metadata: { labels: { app: 'my-app' } },
spec: {
containers: [{
name: 'my-app',
image: 'nginx'
}]
}
}
}
});
app.synth();
Using High-Level Constructs
This code sample shows how to use high-level constructs to define a Kubernetes Service manifest. It creates a LoadBalancer service that routes traffic to port 80 of the pods labeled with 'app: my-app'.
const cdk8s = require('cdk8s');
const { App, Chart } = cdk8s;
const k8s = require('cdk8s-plus-17');
const app = new App();
const chart = new Chart(app, 'MyChart');
new k8s.Service(chart, 'MyService', {
spec: {
type: 'LoadBalancer',
ports: [{ port: 80, targetPort: 80 }],
selector: { app: 'my-app' }
}
});
app.synth();
Composing Charts
This code sample demonstrates how to compose multiple Kubernetes resources into a single chart. It defines both a Deployment and a Service within a custom chart class.
const cdk8s = require('cdk8s');
const { App, Chart } = cdk8s;
const k8s = require('cdk8s-plus-17');
class MyChart extends Chart {
constructor(scope, id, props) {
super(scope, id, props);
new k8s.Deployment(this, 'MyDeployment', {
spec: {
replicas: 3,
selector: {
matchLabels: { app: 'my-app' }
},
template: {
metadata: { labels: { app: 'my-app' } },
spec: {
containers: [{
name: 'my-app',
image: 'nginx'
}]
}
}
}
});
new k8s.Service(this, 'MyService', {
spec: {
type: 'LoadBalancer',
ports: [{ port: 80, targetPort: 80 }],
selector: { app: 'my-app' }
}
});
}
}
const app = new App();
new MyChart(app, 'MyChart');
app.synth();
Other packages similar to cdk8s
pulumi
Pulumi is an infrastructure as code tool that allows you to define cloud resources using general-purpose programming languages. It supports Kubernetes and provides a similar approach to cdk8s by allowing you to define Kubernetes resources programmatically. However, Pulumi also supports other cloud providers like AWS, Azure, and Google Cloud, making it a more versatile tool for multi-cloud environments.
helm
Helm is a package manager for Kubernetes that allows you to define, install, and upgrade complex Kubernetes applications using Helm charts. Unlike cdk8s, which uses programming languages to define resources, Helm uses YAML templates. Helm is widely adopted and has a large repository of pre-built charts, making it easier to deploy common applications.
kustomize
Kustomize is a tool for customizing Kubernetes configurations. It allows you to define overlays to modify existing Kubernetes manifests without using templates. Kustomize is integrated into kubectl, making it a convenient option for Kubernetes users. Unlike cdk8s, Kustomize focuses on configuration management rather than programmatic resource definition.
cdk8s
Cloud Development Kit for Kubernetes
cdk8s is a software development framework for defining Kubernetes
applications using rich object-oriented APIs. It allows developers to leverage
the full power of software in order to define abstract components called
"constructs" which compose Kubernetes resources or other constructs into
higher-level abstractions.
This library is the foundation of cdk8s. It includes base types that are
used to define cdk8s applications.
Chart
The Chart
is a container that synthesizes a single Kubernetes manifest.
class MyChart extends Chart {
constructor(scope: Construct, ns: string) {
super(scope, ns);
}
}
During synthesis, charts collect all the ApiObject
nodes (recursively) and
emit a single YAML manifest that includes all these objects.
ApiObject
An ApiObject
is a construct that represents an entry in a Kubernetes manifest.
In most cases, you won't use ApiObject
directly but rather use classes that
are generated by the cdk8s CLI and extend this base class.
Testing
cdk8s bundles a set of test utilities under the Testing
class:
Testing.app()
returns an App
object bound to a temporary output directory.Testing.synth(chart)
returns the Kubernetes manifest synthesized from a
chart.
License
This project is distributed under the Apache License, Version 2.0.
This module is part of the cdk8s project.