Deploy the elk-frontend helm chart on Oracle Kubernetes Engine (OKE)
TypeScriptWe will deploy an ELK (Elasticsearch, Logstash, Kibana) stack frontend using a Helm chart on the Oracle Kubernetes Engine (OKE). Doing this involves several steps with Pulumi:
- Set up the Kubernetes cluster: We'll use the Oracle Container Engine for Kubernetes to provision our cluster.
- Deploy the Helm chart: We'll then deploy the
elk-frontend
Helm chart onto the cluster.
The two main resources we'll use are:
oci.ContainerEngine.Cluster
: This will create and manage a Kubernetes cluster within Oracle's cloud infrastructure.kubernetes.helm.v3.Chart
: This allows us to deploy Helm charts to a Kubernetes cluster.
Let's get started with writing the Pulumi program in TypeScript.
import * as oci from "@pulumi/oci"; import * as k8s from "@pulumi/kubernetes"; const projectName = "elk-stack"; // 1. Provision an Oracle Kubernetes Engine cluster // This would set up an OKE cluster, which involves networking resources, configuring settings, and setting up the shape. // Note that you have to specify the compartmentId and the vcnId which need to be pre-provisioned or managed as separate resources. const cluster = new oci.containerengine.Cluster("oke_cluster", { // Specify the compartment where the cluster will be created compartmentId: "ocid1.compartment.oc1..exampleuniqueID", // Please replace with your actual compartment OCID // Kubernetes version for the cluster - the exact versions would be dependent on OCI support at the time of provisioning kubernetesVersion: "v1.20.8", // Define options like enabling the Kubernetes dashboard and which network resources to use options: { // OCI might require you to specify specific additional options for addons, network setup, etc. // e.g. `serviceLbSubnetIds: ["subnet OCID1", "subnet OCID2"]` } // Fill in other required parameters according to your setup/environment }); // 2. Deploy the `elk-frontend` Helm chart on the OKE cluster // Assuming we have our cluster, we will deploy the Helm chart to this cluster. // This will typically involve setting up a Kubeconfig file that Pulumi can use to communicate with the cluster. // We need to get the kubeconfig for the Oracle Kubernetes Engine cluster const kubeconfig = cluster.kubeConfig.content.apply(content => { return Buffer.from(content, "base64").toString("utf-8"); }); // Create a k8s Provider linked with the kubeconfig from the OKE cluster const k8sProvider = new k8s.Provider("oke_k8s", { kubeconfig: kubeconfig, }); // Use the k8s.Provider to install the elk-frontend helm chart const elkChart = new k8s.helm.v3.Chart("elk-frontend", { // Provide the name of the chart and the repository it is located in chart: "elk-frontend", version: "1.0.0", // specify the version of the chart fetchOpts: { repo: "https://helm-repository-service.com/helm-charts", // replace with actual Helm repository URL }, }, { provider: k8sProvider }); // Export the public IP to access Kibana once it is up and running export const kibanaEndpoint = `Kibana is running at: http://${elkChart.getResourceProperty("v1/Service", "kibana", "status").apply(s => s.loadBalancer.ingress[0].ip)}`; // To access Kibana, use the provided URL once the deployment is complete.
In this program:
- We've created an OKE cluster using
oci.ContainerEngine.Cluster
. The real OCID values forcompartmentId
and other OKE-specific options must be used. - A Helm chart for the ELK frontend is deployed using
kubernetes.helm.v3.Chart
with a fake repository and chart name which you'll have to replace with the actual chart details. - Finally, we've exported an endpoint that you can use to access the Kibana dashboard once it's deployed.
To run this program:
- Install the Pulumi CLI and set up the OCI provider.
- Replace placeholders with your actual project's values (like
compartmentId
,vcnId
, Helm chart version, and repository URL). - Run
pulumi up
to create the resources. - Once the resources are successfully provisioned, you can access Kibana through the URL exported by the program.