Deploy the sonatype-nexus helm chart on Google Kubernetes Engine (GKE)
TypeScriptDeploying a Helm chart on a Kubernetes cluster involves several steps. In the case of deploying the
sonatype-nexus
Helm chart on Google Kubernetes Engine (GKE), you need to:- Create a GKE cluster.
- Configure
kubectl
to connect to the GKE cluster. - Deploy the Helm chart onto the cluster.
Below is the Pulumi TypeScript program that accomplishes each of these steps. Each section is explained, and comments are included to clarify what each part of the code does.
Step 1: Import Required Pulumi Packages
First, we'll import the necessary Pulumi packages. Make sure you have these packages installed in your Pulumi project.
import * as gcp from "@pulumi/gcp"; import * as k8s from "@pulumi/kubernetes";
Step 2: Configure GCP Project and GKE Cluster
You need to set up a new GKE cluster. Specify the necessary configuration, such as the machine type and the number of nodes.
const project = gcp.config.project; const zone = gcp.config.zone || "us-central1-a"; // Create a GKE cluster const cluster = new gcp.container.Cluster("my-gke-cluster", { initialNodeCount: 2, minMasterVersion: "latest", nodeVersion: "latest", nodeConfig: { machineType: "n1-standard-1", oauthScopes: [ "https://www.googleapis.com/auth/compute", "https://www.googleapis.com/auth/devstorage.read_only", "https://www.googleapis.com/auth/logging.write", "https://www.googleapis.com/auth/monitoring" ], }, });
Learn more about configuring GKE clusters.
Step 3: Export the Kubeconfig
In order to communicate with your GKE cluster, you need a kubeconfig file. Pulumi can generate one for you.
// Export the Kubeconfig const kubeconfig = pulumi. all([cluster.name, cluster.endpoint, cluster.masterAuth]) .apply(([name, endpoint, masterAuth]) => { const context = `${gcp.config.project}_${zone}_${name}`; return `apiVersion: v1 clusters: - cluster: certificate-authority-data: ${masterAuth.clusterCaCertificate} server: https://${endpoint} name: ${context} contexts: - context: cluster: ${context} user: ${context} name: ${context} current-context: ${context} kind: Config preferences: {} users: - name: ${context} user: auth-provider: name: gcp `; }); export const kubeconfig = kubeconfig;
Learn more about kubeconfig in Pulumi.
Step 4: Create a Kubernetes Provider
With the GKE cluster created and the kubeconfig exported, you can create a Kubernetes provider in Pulumi which uses this configuration.
// Create a Kubernetes provider that uses our GKE cluster const k8sProvider = new k8s.Provider("gke-k8s", { kubeconfig: kubeconfig, });
Step 5: Deploy the
sonatype-nexus
Helm ChartFinally, using the Kubernetes provider, you can deploy the
sonatype-nexus
Helm chart.// Deploy sonatype-nexus Helm chart const sonatypeNexus = new k8s.helm.v3.Chart("sonatype-nexus", { chart: "sonatype-nexus", version: "1.24.5", // Specify the version, or omit to use the latest fetchOpts: { repo: "https://sonatype.github.io/helm3-charts/", // The Helm repository for sonatype-nexus }, }, { provider: k8sProvider });
Learn more about Helm charts in Pulumi.
Complete Program
import * as pulumi from "@pulumi/pulumi"; import * as gcp from "@pulumi/gcp"; import * as k8s from "@pulumi/kubernetes"; // Specify the GCP project and zone const project = gcp.config.project; const zone = gcp.config.zone || "us-central1-a"; // Create the GKE cluster const cluster = new gcp.container.Cluster("my-gke-cluster", { initialNodeCount: 2, minMasterVersion: "latest", nodeVersion: "latest", nodeConfig: { machineType: "n1-standard-1", oauthScopes: [ "https://www.googleapis.com/auth/compute", "https://www.googleapis.com/auth/devstorage.read_only", "https://www.googleapis.com/auth/logging.write", "https://www.googleapis.com/auth/monitoring" ], }, }); // Export the kubeconfig const kubeconfig = pulumi. all([cluster.name, cluster.endpoint, cluster.masterAuth]) .apply(([name, endpoint, masterAuth]) => { const context = `${project}_${zone}_${name}`; return `apiVersion: v1 clusters: - cluster: certificate-authority-data: ${masterAuth.clusterCaCertificate} server: https://${endpoint} name: ${context} contexts: - context: cluster: ${context} user: ${context} name: ${context} current-context: ${context} kind: Config preferences: {} users: - name: ${context} user: auth-provider: name: gcp `; }); export const kubeconfigOut = kubeconfig; // Create a Kubernetes provider const k8sProvider = new k8s.Provider("gke-k8s", { kubeconfig: kubeconfig, }); // Deploy sonatype-nexus Helm chart const nexusChart = new k8s.helm.v3.Chart("sonatype-nexus", { chart: "sonatype-nexus", version: "1.24.5", fetchOpts: { repo: "https://sonatype.github.io/helm3-charts/", }, }, { provider: k8sProvider });
This program sets up the entire infrastructure and software deployment in a single
pulumi up
operation. ThekubeconfigOut
is exported so you can directly usekubectl
with this cluster. Thesonatype-nexus
chart is deployed using the provider that communicates with our provisioned GKE cluster.After deploying the chart with Pulumi, you can manage
sonatype-nexus
using Kubernetes tooling. You may need to perform additional steps for network configuration, setting up persistent volumes, or configuring Nexus settings post-deployment. These steps would follow the standard practices for managing any Helm-deployed application on Kubernetes.