1. Answers
  2. Create A Kubernetes Deployment In A Custom Namespace With A Loadbalancer With Pulumi

Create a Kubernetes Deployment in a Custom Namespace With a Loadbalancer With Pulumi

Introduction

In this guide, we will create a Kubernetes deployment in a custom namespace with a LoadBalancer using Pulumi. The key services involved are Kubernetes for container orchestration and Pulumi for infrastructure as code.

Step-by-Step Explanation

Step 1: Install Pulumi and Dependencies

First, ensure you have Pulumi installed. You can install it using npm:

npm install -g pulumi

Also, make sure you have the Kubernetes CLI (kubectl) installed and configured to interact with your cluster.

Step 2: Create a New Pulumi Project

Create a new Pulumi project:

pulumi new typescript

Step 3: Define the Custom Namespace

In your index.ts file, define the custom namespace:

import * as pulumi from "@pulumi/pulumi";
import * as k8s from "@pulumi/kubernetes";

const customNamespace = new k8s.core.v1.Namespace("custom-namespace", {
    metadata: { name: "custom-namespace" },
});

Step 4: Create the Kubernetes Deployment

Next, define the Kubernetes deployment within the custom namespace:

const appLabels = { app: "nginx" };
const deployment = new k8s.apps.v1.Deployment("nginx-deployment", {
    metadata: {
        namespace: customNamespace.metadata.name,
    },
    spec: {
        selector: { matchLabels: appLabels },
        replicas: 2,
        template: {
            metadata: { labels: appLabels },
            spec: {
                containers: [{
                    name: "nginx",
                    image: "nginx",
                    ports: [{ containerPort: 80 }],
                }],
            },
        },
    },
});

Step 5: Create the LoadBalancer Service

Finally, create a LoadBalancer service to expose the deployment:

const service = new k8s.core.v1.Service("nginx-service", {
    metadata: {
        namespace: customNamespace.metadata.name,
    },
    spec: {
        selector: appLabels,
        ports: [{ port: 80, targetPort: 80, protocol: "TCP" }],
        type: "LoadBalancer",
    },
});

Step 6: Deploy the Resources

Run the following commands to deploy the resources:

pulumi up

Pulumi will prompt you to confirm the deployment. Once confirmed, it will create the namespace, deployment, and LoadBalancer service in your Kubernetes cluster.

Summary

In this guide, we created a Kubernetes deployment in a custom namespace with a LoadBalancer using Pulumi. We defined the custom namespace, created the deployment, and exposed it using a LoadBalancer service. Pulumi simplifies the process of managing Kubernetes resources with infrastructure as code.

Full Code Example

import * as pulumi from "@pulumi/pulumi";
import * as k8s from "@pulumi/kubernetes";

// Define the custom namespace
const customNamespace = new k8s.core.v1.Namespace("custom-namespace", {
    metadata: { name: "custom-namespace" },
});

// Define the Kubernetes deployment within the custom namespace
const appLabels = { app: "nginx" };
const deployment = new k8s.apps.v1.Deployment("nginx-deployment", {
    metadata: {
        namespace: customNamespace.metadata.name,
    },
    spec: {
        selector: { matchLabels: appLabels },
        replicas: 2,
        template: {
            metadata: { labels: appLabels },
            spec: {
                containers: [{
                    name: "nginx",
                    image: "nginx",
                    ports: [{ containerPort: 80 }],
                }],
            },
        },
    },
});

// Create a LoadBalancer service to expose the deployment
const service = new k8s.core.v1.Service("nginx-service", {
    metadata: {
        namespace: customNamespace.metadata.name,
    },
    spec: {
        selector: appLabels,
        ports: [{ port: 80, targetPort: 80, protocol: "TCP" }],
        type: "LoadBalancer",
    },
});

Deploy this code

Want to deploy this code? Sign up for a free Pulumi account to deploy in a few clicks.

Sign up

New to Pulumi?

Want to deploy this code? Sign up with Pulumi to deploy in a few clicks.

Sign up