1. Deploy the keda-operator helm chart on Rancher


    To deploy the KEDA (Kubernetes Event-driven Autoscaling) operator helm chart on Rancher using Pulumi, we will follow these steps:

    1. Set up our Pulumi program with the necessary imports.
    2. Configure Rancher to allow the creation of resources.
    3. Deploy the KEDA operator using the Helm chart.

    Pulumi's Rancher2 provider will be used to interact with Rancher, and the Helm Release resource will facilitate deploying the helm chart.

    Here is a detailed Pulumi program that accomplishes this:

    import * as pulumi from '@pulumi/pulumi'; import * as rancher2 from '@pulumi/rancher2'; import * as k8s from '@pulumi/kubernetes'; // Step 1: Set up the Rancher provider. Make sure you have the correct credentials and endpoint. const provider = new rancher2.Provider("rancher-provider", { // Assuming you have environment variables set up for RANCHER_ACCESS_KEY and RANCHER_SECRET_KEY. // Alternatively, you can hardcode the `apiUrl` and `tokenKey` values here. apiUrl: process.env.RANCHER_API_URL, tokenKey: pulumi.interpolate`${process.env.RANCHER_ACCESS_KEY}:${process.env.RANCHER_SECRET_KEY}`, }); // Step 2: Define the namespace where KEDA will be installed. const kedaNamespace = new k8s.core.v1.Namespace("keda-namespace", { metadata: { name: "keda", // Namespace's name. }, }, { provider }); // Step 3: Deploy the KEDA operator helm chart. // Ensure that the Helm chart version and repository URL are up-to-date. const kedaHelmChart = new k8s.helm.v3.Chart("keda-helm-chart", { chart: "keda", // Helm chart name. version: "2.4.0", // The version of the chart to deploy. repositoryOpts: { repo: "https://kedacore.github.io/charts", // The repository URL where the chart is hosted. }, namespace: kedaNamespace.metadata.name, // Include any additional helm values here you need eg. // values: { // "rabbitmq" { // "host": "rabbitmq.default.svc.cluster.local", // "queueLength": { // "value": "20", // "targetAverageValue": "1", // }, // }, // }, }, { provider }); // Export relevant resources export const kedaNamespaceName = kedaNamespace.metadata.name; export const kedaHelmChartName = kedaHelmChart.metadata.name;

    In this Pulumi program:

    • We import the @pulumi/pulumi, @pulumi/rancher2, and @pulumi/kubernetes libraries that provide the functionality to interact with Rancher and deploy Kubernetes resources, including Helm charts.
    • We set up a new Rancher provider, passing the necessary credentials to authenticate against the Rancher API.
    • We create a Kubernetes namespace called keda where the KEDA operator will be installed. The namespace is specified to be created in the Rancher-managed Kubernetes cluster by passing the provider initialized earlier.
    • We deploy the KEDA operator helm chart from the kedacore repository within the created namespace. The Chart resource represents a Helm chart that can be deployed into a Kubernetes cluster.
    • Finally, we export the names of the created namespace and Helm chart as outputs. This allows us to interact with these resources outside the Pulumi program, such as querying the resources' details using the Pulumi CLI.

    Remember to replace the apiUrl, RANCHER_ACCESS_KEY, and RANCHER_SECRET_KEY values with your actual Rancher API endpoint and credentials. These are typically sensitive values, so it's advisable to manage them using Pulumi Config Secrets or environment variables rather than hardcoding them into your program.