Deploy the twampy helm chart on Azure Managed Openshift Service
TypeScriptTo deploy the Twampy Helm chart on an Azure Managed OpenShift Service, we will perform the following steps:
-
Set up an Azure Managed OpenShift Cluster: We'll use Pulumi's
azure-native
package to create an Azure Red Hat OpenShift cluster. This managed service provides a platform to support Kubernetes workloads. -
Install the Helm chart: After setting up the Azure OpenShift cluster, we'll use Pulumi's
kubernetes
package to install the Twampy Helm chart onto the cluster.
Before starting with the Pulumi code, ensure you have the following prerequisites in place:
- Azure account and subscription
- Pulumi CLI installed and logged in
- Kubectl installed and configured to interact with the cluster (Pulumi will use
kubectl
under the hood when you're deploying the Helm chart)
Below is the TypeScript program that creates an Azure OpenShift cluster and deploys the Twampy Helm chart.
import * as pulumi from "@pulumi/pulumi"; import * as azure_native from "@pulumi/azure-native"; import * as k8s from "@pulumi/kubernetes"; // Create a resource group for the OpenShift cluster const resourceGroup = new azure_native.resources.ResourceGroup("myResourceGroup", { location: "East US", // Change to your preferred Azure location }); // Create the OpenShift Managed Cluster const openshiftCluster = new azure_native.redhatopenshift.OpenShiftCluster("myOpenshiftCluster", { resourceGroupName: resourceGroup.name, location: resourceGroup.location, openShiftVersion: "4.3", // Specify your desired OpenShift version // Define the cluster profile, master and worker node configurations according to your requirements // The following is an example configuration clusterProfile: { domain: "example.com", version: "4.3", resourceGroupId: resourceGroup.id, }, masterProfile: { vmSize: "Standard_D2s_v3", }, networkProfile: { podCidr: "10.0.0.0/16", serviceCidr: "10.1.0.0/16", }, workerProfiles: [{ name: "worker", // Change the name as desired vmSize: "Standard_D2s_v3", count: 3, // Specify the number of worker nodes }], tags: { project: "twampy-deployment", }, }, { dependsOn: [resourceGroup] }); // Create an instance of the Pulumi Kubernetes Provider pointing to the created OpenShift cluster const k8sProvider = new k8s.Provider("k8sProvider", { kubeconfig: openshiftCluster.kubeconfig, // Kubeconfig is provided dynamically from the created OpenShift cluster }); // Deploy the Twampy Helm chart using the pulumi/kubernetes package and the provider instance const twampyChart = new k8s.helm.v3.Chart("twampy-chart", { chart: "twampy", // The name of the chart in the Helm repository version: "1.0.0", // Specify the exact chart version you want to deploy fetchOpts: { repo: "http://helm-repository-url.example.com/", // Replace with the actual Helm repository URL where the Twampy chart is hosted }, }, { provider: k8sProvider }); // Export the kubeconfig to access the cluster with `kubectl` export const kubeconfig = openshiftCluster.kubeconfig;
Explanation
-
We started by importing the required Pulumi packages. We need
@pulumi/pulumi
for general Pulumi functions,@pulumi/azure-native
for Azure resources including Azure OpenShift, and@pulumi/kubernetes
for Kubernetes-related operations such as deploying Helm charts. -
We defined a new resource group for our Azure resources. This is a logical container in which the Azure resources live.
-
We created a new instance of the
OpenShiftCluster
class, which represents the Azure Red Hat OpenShift managed cluster service. Note that the parameters for the worker profile and other configurations should be adjusted according to your specific requirements. -
We defined a Kubernetes provider for Pulumi. This provider uses the kubeconfig information from the newly created Azure OpenShift cluster to interact with the cluster.
-
We declared a new Helm chart resource using Pulumi's Kubernetes package. This Helm chart represents the Twampy application that we aim to deploy. Replace the
chart
andversion
property values with the correct information for the Twampy Helm chart. Additionally, provide the correct Helm repository URL by changing therepo
property withinfetchOpts
. -
Lastly, we exported
kubeconfig
, which can be used to interact with the cluster directly usingkubectl
.
Once you have the above code in a Pulumi TypeScript application, run
pulumi up
to create the infrastructure and deploy the Helm Chart.Remember that you might need to register your application within the Helm repository, and any necessary Helm values should be provided as part of the
values
property in theChart
class (not shown above).-