1. Deploy the imagestream helm chart on Kubernetes


    Deploying a Helm chart onto a Kubernetes cluster with Pulumi is a straightforward task that involves using Pulumi's Kubernetes provider to manage the deployment as a Chart resource within your Pulumi program. Below is a detailed explanation followed by a TypeScript program illustrating how to deploy an ImageStream Helm chart.

    First, you need to set up a Pulumi project and install the necessary dependencies. For Kubernetes, Pulumi provides a dedicated package that includes the capabilities to install Helm charts.

    Here is a high-level description of the steps our TypeScript program will perform:

    1. Import the necessary Pulumi and Kubernetes packages.
    2. Define the Kubernetes Chart resource for the Helm chart.
    3. Specify the chart details such as name, version, and any custom values you wish to provide to the chart.

    Let's look at the actual Pulumi program. Ensure you have the Kubernetes context configured correctly, pointing to the desired cluster where you want to deploy the Helm chart.

    import * as k8s from '@pulumi/kubernetes'; // Define the ImageStream Helm chart from a public or private repository. const imageStreamChart = new k8s.helm.v3.Chart('imagestream', { // Replace with the actual repo URL or name if the chart is from a repository like Bitnami, stable, etc. repo: 'my-helm-chart-repo', // Specify the name of the chart. Replace 'imagestream' with the actual chart name. chart: 'imagestream', // You can specify the chart version, if needed. version: '1.2.3', // Optionally, you can provide a set of values to configure the chart. // This is equivalent to the `values.yaml` file or using `--set` in `helm install`. values: { // Provide the necessary value overrides for your ImageStream chart. // key: value pairs based on the chart's values schema. }, // Specify the namespace where the chart should be deployed, if needed. namespace: 'default', // You may also specify further chart options via `fetchOpts`, // which allows you to provide more detailed configuration such as certificates, username/password, etc. }); // Export the base URL of the ImageStream service, if it is exposed via an Ingress or LoadBalancer. // This would largely depend on how the ImageStream chart exposes it's service. export const imageUrl = imageStreamChart.getResourceProperty('v1/Service', 'imagestream-service', 'status').apply(status => { // Modify 'imagestream-service' to the actual name of the Service created by the Helm chart. return status.loadBalancer.ingress[0].hostname; });

    In the code above, we define a Chart resource from the @pulumi/kubernetes package. This resource is a representation of a Helm chart that can be deployed to a Kubernetes cluster.

    • repo: Refers to the repository where your Helm chart is stored. Replace 'my-helm-chart-repo' with the correct repository name.
    • chart: The name of the chart you want to deploy. Replace 'imagestream' with your chart's name.
    • version: The version number of the chart you wish to deploy. You can modify '1.2.3' to the version you require.
    • values: A set of configuration options for the chart, which replaces the use of a values.yaml file or the --set command in Helm.

    Lastly, we attempt to export the service URL. Note that the actual property might change depending on the service type that your chart exposes (LoadBalancer, Ingress, etc.), and you should edit the resource names and properties accordingly.

    Once you have this program written in a .ts file, run it using the Pulumi CLI:

    1. Initialize a new Pulumi project using pulumi new and select the appropriate template.
    2. Place the TypeScript code in the index.ts file in your Pulumi project directory.
    3. Run pulumi up to preview and deploy your resources.

    The Pulumi CLI will show you a preview of the resources that will be created based on the program. If you confirm, it will proceed to deploy the ImageStream Helm chart to your Kubernetes cluster.