Deploy the elasticsearch-exporter helm chart on Oracle Kubernetes Engine (OKE)
TypeScriptTo deploy the
elasticsearch-exporter
Helm chart on Oracle Kubernetes Engine (OKE) with Pulumi, we need to perform several steps:- Set up the Oracle Cloud Infrastructure (OCI) provider to manage OKE resources.
- Set up the Kubernetes provider to interact with the OKE cluster.
- Use the Helm Chart resource to deploy the
elasticsearch-exporter
chart on the cluster.
Below, you'll find a program written in TypeScript that performs each of these steps. This program assumes that you have already set up and configured Pulumi to interact with your OCI account. It also assumes you have an existing Kubernetes cluster running on OKE and that you have the required Kubernetes configuration to access your cluster.
Let's go through the code step by step:
Setting up OCI Provider for Oracle Kubernetes Engine (OKE)
Firstly, we need to ensure that we can manage OCI resources, namely the Kubernetes cluster on OKE.
import * as oci from "@pulumi/oci"; const provider = new oci.Provider("oci", { region: "us-phoenix-1" });
In the code snippet above, we import the OCI package and create an OCI provider instance specifying the region where our OKE cluster is running.
Setting up Kubernetes Provider
To interact with Kubernetes clusters, we use the Kubernetes provider. We will configure the Kubernetes provider to use the kubeconfig that we download from OCI. This step assumes that
kubeconfig
is located at~/.kube/config
on your system. The path to your kubeconfig might vary depending on your setup, and you should update it accordingly.import * as k8s from "@pulumi/kubernetes"; const k8sProvider = new k8s.Provider("k8sProvider", { kubeconfig: fs.readFileSync(path.join(__dirname, "kubeconfig"), "utf8"), });
In the snippet above, we create a new instance of the Kubernetes provider, which will be used to deploy the Helm chart. We are reading the kubeconfig file, converting it to a
utf8
encoded string, and passing it to the Kubernetes provider.Deploying Elasticsearch Exporter Helm Chart
For deploying Helm charts, we use the
Chart
resource from the Pulumi Kubernetes provider. Theelasticsearch-exporter
Helm chart can be found in the public Helm chart repositories or you can specify your own if you have it in a private repository.import * as helm from "@pulumi/kubernetes/helm/v3"; const elasticsearchExporterChart = new helm.Chart("elasticsearch-exporter", { chart: "elasticsearch-exporter", version: "4.0.1", // specify the version you wish to deploy fetchOpts: { repo: "https://helm.elastic.co", }, }, { provider: k8sProvider });
In the above code, we use the
Chart
class to define that we want to deploy theelasticsearch-exporter
Helm chart to our Kubernetes cluster. You can specify a particular version of the chart to be deployed; if not provided, the latest version will be used by default. Therepo
is the URL of the Helm repository where the chart is located.Putting it All Together
Now let's put all the snippets together into a complete Pulumi program that deploys the
elasticsearch-exporter
Helm chart to an OKE-based Kubernetes cluster.import * as pulumi from "@pulumi/pulumi"; import * as oci from "@pulumi/oci"; import * as k8s from "@pulumi/kubernetes"; import * as fs from "fs"; import * as path from "path"; import * as helm from "@pulumi/kubernetes/helm/v3"; // Set up the Oracle Cloud Infrastructure (OCI) provider const ociProvider = new oci.Provider("oci", { region: "us-phoenix-1" }); // Set up the Kubernetes provider const kubeConfigPath = path.join(__dirname, "kubeconfig"); const kubeconfig = fs.readFileSync(kubeConfigPath, "utf8"); const k8sProvider = new k8s.Provider("k8sProvider", { kubeconfig: kubeconfig, }); // Deploy the elasticsearch-exporter Helm chart const elasticsearchExporterChart = new helm.Chart("elasticsearch-exporter", { chart: "elasticsearch-exporter", version: "4.0.1", fetchOpts: { repo: "https://helm.elastic.co", }, }, { provider: k8sProvider }); // Export the name of the cluster export const clusterName = elasticsearchExporterChart.getResourceProperty("kubernetes:core/v1:Service", "elasticsearch-exporter-elasticsearch-exporter", "metadata").apply(m => m.name);
In this program, we start by importing the necessary modules and setting up our providers. Then, we deploy the
elasticsearch-exporter
Helm chart to our Kubernetes cluster. After deployment, we export the name of the service that is created, which could be used to interact with the Elasticsearch Exporter service within your Kubernetes cluster.You can run this program by executing
pulumi up
within the directory containing the file.Remember to replace
path.join(__dirname, "kubeconfig")
with the actual path to your kubeconfig file. Theregion
in theoci.Provider
should also match the OKE cluster region. And ensure you have theelasticsearch-exporter
chart available in the specified Helm repository or adjust the repository accordingly.