A framework for synthesizing Kubernetes manifests using Winglang.
Install the Wing CLI:
npm i -g winglang
Create a new project and install this library:
mkdir wing-loves-k8s
cd wing-loves-k8s
npm i @winglibs/k8s
Let's define an app with a simple Kubernetes object:
// main.w
bring k8s;
new k8s.ApiObject(
apiVersion: "v1",
kind: "ConfigMap",
spec: {
data: {
key: "value",
},
}
);
Now, compile it to YAML:
$ wing compile -t @winglibs/k8s ubuntu.main.w
target/ubuntu.main.k8s
You
The output is a valid K8S YAML is in target/ubuntu.main.k8s
:
$ ls target/ubuntu.main.k8s
chart-c86185a7.k8s.yaml
You can set WING_K8S_OUTPUT
to helm
in order to produce a helm chart instead of simple manifest.
This requires a Chart.yaml
file next in the current directory.
You can use the WING_K8S_LABELS
environment variable to apply labels to all resources in an app.
The value is a JSON-encoded map.
The WING_K8S_NAMESPACE
variable can be used to specify the default namespace.
export WING_K8S_LABELS='{ "my-label": "123", "your-label": "444" }'
export WING_K8S_NAMESPACE='my-namespace'
wing compile -t @winglibs/k8s main.w
This library supports cdk8s and cdk8s-plus, so you can do stuff like this:
npm i cdk8s-plus-27
And then:
bring "cdk8s-plus-27" as k8s;
// lets create a volume that contains our app.
let appData = new k8s.ConfigMap();
appData.addDirectory("./nodejs-app");
let appVolume = k8s.Volume.fromConfigMap(this, "App", appData);
// lets create a deployment to run a few instances of a pod
let deployment = new k8s.Deployment(
replicas: 3,
);
// now we create a container that runs our app
let appPath = "/var/lib/app";
let port = 80;
let container = deployment.addContainer({
image: "node:14.4.0-alpine3.12",
command: ["node", "index.js", "{port}"],
port: port,
workingDir: appPath,
});
// make the app accessible to the container
container.mount(appPath, appVolume);
// finally, we expose the deployment as a load balancer service and make it run
deployment.exposeViaService(serviceType: k8s.ServiceType.LOAD_BALANCER);
- Support generating Wing bindings from K8S API specifications and CRDs (
cdk8s import
).
This library is licensed under the MIT License.