Deploy the minio-standalone helm chart on Digital Ocean Kubernetes Service
TypeScriptTo deploy the MinIO standalone Helm chart on a DigitalOcean Kubernetes Service (DOKS) cluster using Pulumi, you will need to follow a few steps. The Pulumi program I'm going to share will accomplish the following:
- Create a new DOKS cluster on DigitalOcean.
- Deploy the MinIO Helm chart on the newly created Kubernetes cluster.
We'll use Pulumi's DigitalOcean and Kubernetes packages to manage resources on DigitalOcean and deploy the Helm chart to the cluster.
Prerequisites
Ensure that you have the following installed and configured:
- Pulumi CLI
- DigitalOcean Access Token (required to authenticate with your DigitalOcean account)
- Helm CLI (if you want to customize values or templates)
Step 1: Set up the Pulumi Project
Before running the Pulumi program, initialize a new Pulumi project and install the necessary packages.
pulumi new typescript
Install the DigitalOcean and Kubernetes Pulumi packages:
npm install @pulumi/digitalocean @pulumi/kubernetes
Step 2: Write the Pulumi Program
Here's the complete Pulumi program written in TypeScript that deploys the MinIO Helm chart on a DOKS cluster:
import * as digitalocean from "@pulumi/digitalocean"; import * as kubernetes from "@pulumi/kubernetes"; // Create a DigitalOcean Kubernetes cluster. const cluster = new digitalocean.KubernetesCluster("my-doks", { region: "nyc3", version: "1.21.5-do.0", nodePool: { size: "s-2vcpu-2gb", name: "default", nodeCount: 2, }, }); // Create a Kubernetes provider instance using the DOKS cluster credentials. const k8sProvider = new kubernetes.Provider("k8s", { kubeconfig: cluster.kubeConfigs[0].rawConfig, }); // Deploy the MinIO Helm chart using the Kubernetes provider. const minioChart = new kubernetes.helm.v3.Chart("minio", { chart: "minio", namespace: "default", version: "8.0.10", // Specify the chart version you want to deploy fetchOpts:{ repo: "https://helm.min.io/", }, }, { provider: k8sProvider }); // Export the cluster's kubeconfig. export const kubeconfig = cluster.kubeConfigs[0].rawConfig;
Explanation
-
We create a new DigitalOcean Kubernetes cluster by instantiating
digitalocean.KubernetesCluster
. This sets up a new cluster in the specified region with the given node size and count. (DigitalOcean.KubernetesCluster) -
Next, we create a Pulumi Kubernetes provider that uses the kubeconfig from the newly created DOKS cluster. This provider is necessary to interact with your Kubernetes cluster. (Kubernetes Provider)
-
We then declare a Helm chart resource,
kubernetes.helm.v3.Chart
, representing the MinIO Helm chart. Thechart
argument specifies MinIO, andfetchOpts.repo
points to MinIO's Helm chart repository. The provider associated with this Helm chart is our newly created k8sProvider, which ensures that the Helm chart will be deployed to the DOKS cluster we created earlier. (Helm Chart) -
Finally, we export the kubeconfig of the cluster, which can be used with
kubectl
or other Kubernetes tools to interact with your cluster. -
The
version
field is optional, but it's a good practice to specify which version of the Helm chart you want to deploy to avoid surprises if the chart is updated.
Running the Program
To run the program, execute the following commands:
pulumi up
This command will preview the changes and prompt for confirmation before provisioning resources on DigitalOcean and deploying the MinIO Helm chart.
After deployment, you'll be able to see the kubeconfig output on the console, which you can use with
kubectl
to interact with your cluster and check the status of your MinIO deployment.To clean up the resources, you can run the following command:
pulumi destroy
This command will remove all resources that were created, including the DigitalOcean Kubernetes cluster and MinIO Helm release.