Deploy the ecr-cleaner helm chart on Opensshift
TypeScriptTo deploy the
ecr-cleaner
Helm chart on OpenShift, we will use Pulumi with thekubernetes
package, which allows us to interact with Kubernetes resources including deploying Helm charts. Pulumi's Kubernetes provider can manage the lifecycle of Kubernetes resources using the same Kubernetes API you would use manually but with the added benefits of Pulumi's programming model.Here's a step-by-step guide on how this can be achieved using TypeScript:
-
Set up OpenShift: Ensure you have access to an OpenShift cluster. In Pulumi, you do not need to specify details about the cluster if your
kubectl
is already configured to connect to it, since Pulumi utilizes the existingkubeconfig
file. -
Specify the Helm Chart: You should know the repository where the
ecr-cleaner
Helm chart is located or have the chart available locally. -
Write the Pulumi Program: You will create a Pulumi program that declares the necessary resources to deploy the
ecr-cleaner
Helm chart.
Below is a TypeScript program that performs the deployment of the
ecr-cleaner
Helm chart on an OpenShift cluster:// Import necessary Pulumi libraries. import * as k8s from "@pulumi/kubernetes"; // Describes the deployment of a Helm chart for the 'ecr-cleaner'. // The 'ecr-cleaner' is useful for pruning unused images in AWS ECR. function deployEcrCleanerChart(namespace: string, releaseName: string, chartVersion: string) { // Create a new Helm Chart resource that represents the deployment of 'ecr-cleaner'. const ecrCleanerChart = new k8s.helm.v3.Chart(releaseName, { namespace: namespace, chart: "ecr-cleaner", version: chartVersion, // Assuming the 'ecr-cleaner' chart is hosted in a Helm repository, specify the repository details. // If the chart is locally available, you would use the 'path' property instead. fetchOpts: { repo: "http://path.to.your/helm/repository", }, // Specify any custom values you want to override in the Helm chart. // These would typically be in the form of an object containing your customized values. values: { // ... provide any chart-specific configuration here }, // You can specify other options like 'transformations' if you need to modify the YAML before applying }, { // Inform Pulumi that this Helm chart is to be deployed on an OpenShift cluster. // This can involve annotating resources so that OpenShift can manage them correctly. provider: new k8s.Provider("openshift-provider", { // Your specific OpenShift kubeconfig context could be specified here, // however, it is not required if your Pulumi CLI has been configured to point to the OpenShift cluster. // context: "my-openshift-cluster-context", }), }); return ecrCleanerChart; } // Call the function to deploy the 'ecr-cleaner' Helm chart. const chart = deployEcrCleanerChart("default", "ecr-cleaner", "1.0.0"); // Export the status URL if available from the Helm chart so that it can be easily accessed after deployment. // This is dependent on the Helm chart exposing such a URL. export const statusUrl = chart.getResourceProperty("v1/Service", "ecr-cleaner", "status.loadBalancer.ingress[0].hostname");
Explanation:
-
First, we import the Kubernetes Pulumi SDK, which will allow us to interact with the Kubernetes resources.
-
We define a function called
deployEcrCleanerChart
that takes in three parameters: the namespace where the chart should be deployed, the release name of the Helm chart, and the version of the chart. This function encapsulates the deployment logic which can be reused. -
Inside the function, we create an instance of
k8s.helm.v3.Chart
. This is the Pulumi resource that represents the deployment of a Helm chart. We pass the namespace, chart repository, any custom values, and the version to this resource. -
If the Helm chart requires specific OpenShift configurations, we specify that using the
provider
option of theChart
resource. We instantiate an OpenShift-specific provider if needed. In most cases, Pulumi uses the active context from thekubeconfig
file, so you might not need to set anything here unless you have a specific use case. -
Finally, we attempt to export a
statusUrl
assuming the deployed Helm chart provides a service with an external endpoint.
Remember to replace
"http://path.to.your/helm/repository"
with the actual repository URL where theecr-cleaner
Helm chart is hosted. Also, replace"default"
with the correct OpenShift project (namespace) where you want the chart to be deployed, update"ecr-cleaner"
with the release name you desire, and"1.0.0"
with the chart version you are deploying.Running Your Pulumi Program:
After creating your TypeScript program file (e.g.,
index.ts
), you'll need to run the following commands with Pulumi CLI to deploy your Helm chart on OpenShift:pulumi stack init my-stack
to create a new stack.pulumi up
to preview and deploy the changes.
This will start the deployment process, and you will see logs for the resources that Pulumi is creating or updating. Once completed, you will have the
ecr-cleaner
Helm chart running in your OpenShift cluster. If thestatusUrl
is provided by the chart, you will be able to see it in the output from thepulumi up
command.-