Deploy the grafaml helm chart on AWS EKS
TypeScriptTo deploy the Grafana Helm chart on AWS Elastic Kubernetes Service (EKS), the Pulumi program will involve a sequence of steps. First, we'll create an instance of EKS, which is essentially a managed Kubernetes service provided by AWS. Once we have the cluster set up, we'll install the Helm chart for Grafana into that cluster.
Here is a detailed breakdown of what we are going to do:
- Set up an EKS cluster using the
eks.Cluster
resource from theeks
package. - Deploy the Grafana Helm chart using the
kubernetes.helm.v3.Chart
resource from thekubernetes
package.
Below is the Pulumi TypeScript code that accomplishes this:
import * as pulumi from "@pulumi/pulumi"; import * as aws from "@pulumi/aws"; import * as eks from "@pulumi/eks"; import * as k8s from "@pulumi/kubernetes"; // Create an EKS cluster. const cluster = new eks.Cluster("my-cluster", { // Define the desired EKS version. version: "1.21", // Add other required configuration. // Setting up the node group configuration with appropriate instance type. nodeGroupOptions: { // Define the size and type of the worker nodes. instanceType: "t2.medium", desiredCapacity: 2, minSize: 1, maxSize: 3, } }); // Set up the Kubernetes provider using the generated kubeconfig from the EKS cluster. const k8sProvider = new k8s.Provider("k8s-provider", { kubeconfig: cluster.kubeconfig.apply(JSON.stringify), }); // Deploy the Grafana Helm chart into the EKS cluster. const grafanaChart = new k8s.helm.v3.Chart("grafana", { chart: "grafana", // Specify the Grafana Helm chart version to use. version: "6.1.17", // Namespaces are automatically created by the Helm chart if they don't exist. namespace: "monitoring", fetchOpts: { // Provide the repository URL for the Grafana Helm chart. repo: "https://grafana.github.io/helm-charts", } }, { provider: k8sProvider }); // Export the EKS cluster's kubeconfig. export const kubeconfig = cluster.kubeconfig; // Export the endpoint of the Grafana service. export const grafanaEndpoint = grafanaChart.getResourceProperty("v1/Service", "monitoring/grafana", "status").apply(status => status.loadBalancer.ingress[0].hostname);
Explanation:
- We import the necessary Pulumi packages for AWS, EKS, and Kubernetes.
- We create an EKS cluster named
my-cluster
. We specify the desired Kubernetes version and node group configuration, including the number of nodes and their instance type. - We instantiate a Kubernetes provider,
k8sProvider
, which uses the generatedkubeconfig
from our EKS cluster to communicate with it. - We deploy Grafana using its Helm chart with the
k8s.helm.v3.Chart
resource. We specify the chart's name, version, namespace, and repository URL. - We export
kubeconfig
should you need to usekubectl
to interact with the EKS cluster manually. - We export the endpoint of the Grafana service once it's up and running. You can use this endpoint to access the Grafana dashboard in your web browser.
Before running this code with Pulumi, be sure to have the AWS CLI configured and the Pulumi CLI installed. Then, place this TypeScript code in a file named
index.ts
within a Pulumi project. Runpulumi up
to create and configure the AWS EKS cluster and deploy the Grafana Helm chart.- Set up an EKS cluster using the