The Kubernetes resource provider for Pulumi lets you create, deploy, and manage Kubernetes API resources and workloads in a running cluster. For a streamlined Pulumi walkthrough, including language runtime installation and Kubernetes configuration, click "Get Started" below.
pulumi-kubernetes
provides an SDK to create any of the API resources
available in Kubernetes.
This includes the resources you know and love, such as:
- Deployments
- ReplicaSets
- ConfigMaps
- Secrets
- Jobs etc.
The pulumi-kubernetes
SDK closely tracks the latest upstream release, and provides access
to the full API surface, including deprecated endpoints.
The SDK API is 100% compatible with the Kubernetes API, and is
schematically identical to what Kubernetes users expect.
At a minimum, we support the current Kubernetes version and the previous two versions. Older versions will likely work as well, but are not officially supported.
See the CHANGELOG for details
on supported versions of Kubernetes for each version of the pulumi-kubernetes
package.
Pulumi’s Kubernetes SDK is manufactured by automatically wrapping our library functionality around the Kubernetes resource OpenAPI spec as soon as a new version is released! Ultimately, this means that Pulumi users do not have to learn a new Kubernetes API model, nor wait long to work with the latest available versions.
Note: Pulumi also supports alpha and beta APIs.
Visit the FAQ for more details.
- Reference Documentation
- API Documentation
- All Examples
- Tutorials
- Install Pulumi.
- Install a language runtime such as Node.js or Python.
- Install a package manager
- Have access to a running Kubernetes cluster
- If
kubectl
already works for your running cluster, Pulumi respects and uses this configuration. - If you do not have a cluster already running and available, we encourage you to explore Pulumi's SDKs for AWS EKS, Azure AKS, and GCP GKE. Visit the reference docs for more details.
- If
- Install
kubectl
.
This package is available in JavaScript/TypeScript for use with Node.js, as well as in Python.
For Node.js use either npm
or yarn
:
npm
:
npm install @pulumi/kubernetes
yarn
:
yarn add @pulumi/kubernetes
For Python use pip
:
pip install pulumi-kubernetes
The following examples demonstrate how to work with pulumi-kubernetes
in
a couple of ways.
Examples may include the creation of an AWS EKS cluster, although an EKS cluster
is not required to use pulumi/kubernetes
. It is simply used to ensure
we have access to a running Kubernetes cluster to deploy resources and workloads into.
This example deploys resources from a YAML manifest file path, using the
transient, default kubeconfig
credentials on the local machine, just as kubectl
does.
Note: This capabality is primarily targeted for experimentation and transitioning to Pulumi. Pulumi's desired state model greatly benefits from having resources be directly defined in your Pulumi program as demonstrated in the workload example.
import * as k8s as "@pulumi/kubernetes";
const myApp = new k8s.yaml.ConfigFile("app", {
file: "app.yaml"
});
This example creates an EKS cluster with pulumi/eks
,
and then deploys a Helm chart from the stable repo using the
kubeconfig
credentials from the cluster's Pulumi provider.
Note: This capabality is primarily targeted for experimentation and transitioning to Pulumi. Pulumi's desired state model greatly benefits from having resources be directly defined in your Pulumi program as demonstrated in the workload example.
import * as eks from "@pulumi/eks";
import * as k8s from "@pulumi/kubernetes";
// Create an EKS cluster.
const cluster = new eks.Cluster("my-cluster");
// Deploy Wordpress into our cluster.
const wordpress = new k8s.helm.v2.Chart("wordpress", {
repo: "stable",
chart: "wordpress",
values: {
wordpressBlogName: "My Cool Kubernetes Blog!",
},
}, { providers: { "kubernetes": cluster.provider } });
// Export the cluster's kubeconfig.
export const kubeconfig = cluster.kubeconfig;
This example creates a EKS cluster with pulumi/eks
,
and then deploys an NGINX Deployment and Service using the SDK resource API, and the
kubeconfig
credentials from the cluster's Pulumi provider.
import * as eks from "@pulumi/eks";
import * as k8s from "@pulumi/kubernetes";
// Create an EKS cluster with the default configuration.
const cluster = new eks.Cluster("my-cluster");
// Create a NGINX Deployment and Service.
const appName = "my-app";
const appLabels = { appClass: appName };
const deployment = new k8s.apps.v1.Deployment(`${appName}-dep`, {
metadata: { labels: appLabels },
spec: {
replicas: 2,
selector: { matchLabels: appLabels },
template: {
metadata: { labels: appLabels },
spec: {
containers: [{
name: appName,
image: "nginx",
ports: [{ name: "http", containerPort: 80 }]
}],
}
}
},
}, { provider: cluster.provider });
const service = new k8s.core.v1.Service(`${appName}-svc`, {
metadata: { labels: appLabels },
spec: {
type: "LoadBalancer",
ports: [{ port: 80, targetPort: "http" }],
selector: appLabels,
},
}, { provider: cluster.provider });
// Export the URL for the load balanced service.
export const url = service.status.loadBalancer.ingress[0].hostname;
// Export the cluster's kubeconfig.
export const kubeconfig = cluster.kubeconfig;
If you are interested in contributing, please see the contributing docs.
You can read the code of conduct here.