1. Deploy the horovod helm chart on Rancher


    Deploying the Horovod Helm chart on a Rancher managed Kubernetes cluster involves several steps. Below I'll guide you through the process of setting up the prerequisites using Pulumi and then deploying the Helm chart.

    Firstly, you'll need to have a Kubernetes cluster managed by Rancher. For simplicity, let's assume you already have access to a Rancher Kubernetes cluster. In case you don't have one, you will first need to create a cluster using the rancher2.Cluster resource.

    To deploy a Helm chart on a Rancher Kubernetes cluster using Pulumi, follow these steps:

    1. Configure access to your Rancher server.
    2. Use Pulumi's Helm Chart resource to deploy Horovod on your Kubernetes cluster.

    Below is the TypeScript program using Pulumi to deploy the Horovod Helm chart to your Rancher-managed cluster:

    import * as pulumi from '@pulumi/pulumi'; import * as kubernetes from '@pulumi/kubernetes'; import * as rancher2 from '@pulumi/rancher2'; // The stack reference from where the kubeconfig can be obtained // Replace 'my-org/my-rancher-cluster-stack' with the appropriate stack reference const clusterStackRef = new pulumi.StackReference('my-org/my-rancher-cluster-stack'); // Get the kubeconfig from the output of your Rancher cluster stack const kubeconfig = clusterStackRef.getOutput('kubeconfig'); // Create a Pulumi Kubernetes provider that uses the kubeconfig from Rancher const k8sProvider = new kubernetes.Provider('rancher-k8s', { kubeconfig: kubeconfig, }); // Define the Helm chart for Horovod const horovodChart = new kubernetes.helm.v3.Chart('horovod', { chart: 'horovod', // You might need to specify the repository opts if the chart is from a custom Helm repo repositoryOpts: { repo: 'http://helm-repository-url.com' }, // Define values for the Helm chart as required values: { // ... your Helm chart values ... }, // Ensure that this Helm chart is deployed using the Rancher Kubernetes provider }, { provider: k8sProvider }); // Export the URL to access the Horovod application export const horovodUrl = pulumi.interpolate`http://${horovodChart.getResourceProperty("v1/Service", "horovod", "status").apply( status => status.loadBalancer.ingress[0].ip || status.loadBalancer.ingress[0].hostname )}`;

    Explanation of the code:

    • We import the necessary modules from Pulumi (@pulumi/pulumi, @pulumi/kubernetes, and @pulumi/rancher2).
    • We obtain the Kubernetes configuration from an existing Rancher cluster using StackReference. A StackReference allows you to access the outputs of another stack, enabling you to share resources between stacks safely.
    • We create a Pulumi Kubernetes provider (k8sProvider) that will communicate with the Kubernetes cluster using the obtained kubeconfig.
    • We define a Helm chart resource (horovodChart) for deploying Horovod. The chart attribute specifies the name of the chart, and the repositoryOpts would contain information about the Helm repository where the Horovod chart is located.
    • We may need to supply a set of values to customize the Helm chart deployment, which are passed via the values attribute. This would include any necessary configurations specific to Horovod.
    • Lastly, we export a URL (horovodUrl) that you can use to access your Horovod application once it is deployed. The URL is constructed based on the ingress address allocated to the service created by the Helm chart.

    Do note that you have to replace placeholders like 'my-org/my-rancher-cluster-stack', http://helm-repository-url.com, and Helm chart values with actual data applicable to your setup.

    Ensure you have the correct permissions and credentials configured to access both the Rancher server and the Kubernetes cluster. The Helm repository hosting the Horovod chart should be added to your Helm CLI configuration for Pulumi to be able to deploy the chart.

    Once you run this Pulumi program, it will deploy the Horovod Helm chart to your Rancher-managed Kubernetes cluster. You can then use the horovodUrl exported by the program to access the Horovod application.