1. Deploy the websample helm chart on Rancher


    To deploy a Helm chart on a Rancher-managed Kubernetes cluster, we'll first need to establish a connection to the Rancher server, and then use the Helm chart resource provided by Rancher. Pulumi's Rancher 2 provider allows us to manage resources in a Rancher server instance, including Kubernetes clusters, Helm charts, and other resources.

    Here's a step-by-step guide to deploying a Helm chart called websample on a Rancher cluster using Pulumi and TypeScript:

    1. Configuration: We'll assume that you have Rancher 2 installed and have access to a Kubernetes cluster managed by Rancher.

    2. Setup: Make sure you have Pulumi installed and configured with the appropriate credentials for your cloud provider.

    3. Pulumi Stack Initialization: Start by creating a new Pulumi project and stack, selecting the appropriate template for Kubernetes.

    4. Implement Deployment: Write code using Rancher 2 provider to deploy the websample Helm chart.

    5. Running the Deployment: Use the Pulumi CLI to deploy your code to Rancher and watch as it provisions the Helm chart on your cluster.

    Here's what the Pulumi TypeScript program might look like:

    import * as rancher2 from '@pulumi/rancher2'; import * as pulumi from '@pulumi/pulumi'; // Create a rancher2 provider instance to communicate with your Rancher server. // Make sure to provide the correct `apiUrl` and `tokenKey` which can be obtained from your Rancher server. const rancherProvider = new rancher2.Provider('rancherProvider', { apiUrl: 'https://<RANCHER_API_URL>', // Replace <RANCHER_API_URL> with your Rancher API URL. tokenKey: '<RANCHER_BEARER_TOKEN>', // Replace <RANCHER_BEARER_TOKEN> with your Rancher Bearer Token. }); // Assuming `project`, `chart` and `namespace` are already configured in Rancher, // and `catalogName` is associated with the Helm repository containing `websample`. const catalog = new rancher2.CatalogV2('catalog', { name: 'catalogName', // Replace this with the URL of the Helm chart repository you want to use url: 'https://charts.example.com/', clusterId: '<CLUSTER_ID>', // Replace <CLUSTER_ID> with the ID of your Rancher cluster. }, { provider: rancherProvider }); // Deploy the `websample` Helm chart using `rancher2.AppV2` resource. const websampleApp = new rancher2.AppV2('websample-app', { chartName: 'websample', clusterId: '<CLUSTER_ID>', // Replace <CLUSTER_ID> with the ID of your Rancher cluster. projectName: '<PROJECT_ID>', // Replace <PROJECT_ID> with Rancher Project ID where the app should be deployed. repoName: catalog.name, namespace: 'default', // Specify the namespace where you want the Helm chart to be deployed. values: ` service: type: ClusterIP `, // Customize the Helm chart values as needed. }, { provider: rancherProvider }); // Export the app name and status for easy access. export const appName = websampleApp.metadata.apply(m => m.name); export const appStatus = websampleApp.status.apply(s => s.conditions[0].status);

    Make sure to replace placeholders with the actual values from your Rancher and Helm setup.

    This code does the following:

    • It initializes the Rancher provider which Pulumi uses to communicate with your Rancher server.
    • Defines a catalog resource representing the Helm chart repository where the websample chart can be found.
    • Deploys the websample Helm chart as an application within the specified project and namespace in your Rancher cluster. The values field can be used to customize the Helm chart's configuration.

    After writing the program, you can deploy it with the Pulumi CLI:

    1. Navigate to your project directory.
    2. Run pulumi up to preview and deploy the changes.

    Pulumi will show you a preview of the resources that will be created and, upon confirmation, proceed with the deployment. When it's done, it will print the name and status of the deployed application as defined in the export statements.

    You can further manage the lifecycle of these resources using Pulumi's command-line tool (e.g., updating, deleting, or viewing the outputs of the resources).