Deploy the gitlab-controller helm chart on Google Kubernetes Engine (GKE)
TypeScriptTo deploy the
gitlab-controller
Helm chart on Google Kubernetes Engine (GKE), you will need to follow several steps:-
Create a GKE cluster: You need a running Kubernetes cluster. With Pulumi, you can define your GKE cluster infrastructure using the
gcp.container.Cluster
resource. -
Install the Helm chart: After the cluster is up and running, you can deploy the
gitlab-controller
Helm chart using thekubernetes.helm.v3.Chart
resource from Pulumi's Kubernetes provider.
Here's a step-by-step Pulumi program written in TypeScript that accomplishes these tasks:
- Set up Pulumi: Import necessary Pulumi and GKE packages.
- Define the GKE Cluster: Define a new GKE cluster that the Helm chart will be deployed to.
- Configure Helm Chart Deployment: Deploy the Helm chart to the GKE cluster.
Below is the complete TypeScript program to deploy the
gitlab-controller
Helm chart onto a GKE cluster:import * as pulumi from "@pulumi/pulumi"; import * as gcp from "@pulumi/gcp"; import * as k8s from "@pulumi/kubernetes"; // Define the GKE cluster const cluster = new gcp.container.Cluster("gke-cluster", { initialNodeCount: 2, nodeVersion: "latest", minMasterVersion: "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 Cluster name export const clusterName = cluster.name; // Export the Kubeconfig to access the cluster export const kubeconfig = pulumi. all([cluster.name, cluster.endpoint, cluster.masterAuth]). apply(([name, endpoint, masterAuth]) => { const context = `${gcp.config.project}_${gcp.config.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: config: cmd-args: config config-helper --format=json cmd-path: gcloud expiry-key: '{.credential.token_expiry}' token-key: '{.credential.access_token}' name: gcp `; }); // Create a Kubernetes provider instance that uses our cluster from above. const k8sProvider = new k8s.Provider("gke-k8s", { kubeconfig: kubeconfig, }); // Deploy the gitlab-controller Helm chart const gitlabControllerChart = new k8s.helm.v3.Chart("gitlab-controller", { chart: "gitlab-controller", version: "<chart version>", // specify the chart version fetchOpts:{ repo: "https://charts.gitlab.io/", // the Helm repository URL }, values: { // specify the values needed for gitlab-controller chart // ... fill in necessary values here }, }, { provider: k8sProvider }); // ensure that this Chart uses the k8s cluster // Export the status of the Helm deployment export const helmStatus = gitlabControllerChart.status;
Explanation
-
GKE Cluster: The
gcp.container.Cluster
resource is used to create a new GKE cluster. You can adjust theinitialNodeCount
,nodeVersion
, andmachineType
according to the requirements of yourgitlab-controller
Helm chart. -
Kubeconfig: The kubeconfig is required to interact with the cluster via
kubectl
and other tools. We export this for easy access to the cluster. -
Kubernetes Provider: The
k8s.Provider
is a Pulumi wrapper aroundkubeconfig
that translates the Pulumi deployments into Kubernetes resources. -
Helm Chart: The
gitlab-controller
is deployed using thek8s.helm.v3.Chart
resource. You need to provide the actual chart version and set the appropriate values that you wish to configure the Helm chart with.
After writing this Pulumi program, you would run
pulumi up
to provision the GKE cluster and deploy the Helm chart.Deploying the Program
Ensure you have all prerequisites installed:
Pulumi CLI
Google Cloud SDK
kubectl
Helm
(if needing local helm operations)
Authenticate with GCP and set your GCP project:
gcloud auth login gcloud config set project <your-project-id>
Then, run the Pulumi program using:
pulumi up
This command initializes Pulumi, sets up the infrastructure according to the Pulumi file, and applies the Helm chart to your GKE cluster. After the deployment is completed successfully, information about the cluster and deployment status will be exported, and you can interact with your GitLab controller using
kubectl
.Remember to replace
<chart version>
with the specific version of thegitlab-controller
chart you want to deploy, and fill in thevalues
section with the configuration specific togitlab-controller
.-