Deploy the xos-core helm chart on Kubernetes
TypeScriptDeploying a Helm chart on Kubernetes using Pulumi involves creating a Pulumi project, writing the necessary code to declare the Kubernetes resources, and applying the changes with the Pulumi CLI. Below I'll guide you through the steps and provide you with a TypeScript program that deploys the
xos-core
Helm chart.Prerequisites:
To follow along, ensure you have:
- Pulumi CLI installed and configured with access to a Kubernetes cluster.
kubectl
installed and configured with access to your Kubernetes cluster.- Access to a Helm chart repository where
xos-core
chart is available or the chart files locally.
Step-by-Step Guide:
Step 1: Set Up Your Pulumi Project
First, create a new directory for your project:
mkdir pulumi-xos-core-deployment cd pulumi-xos-core-deployment
Then, create a new Pulumi project using TypeScript:
pulumi new typescript
You will be prompted for a project name and stack name, which you can set according to your preferences.
Step 2: Install the Pulumi Kubernetes Package
In the newly created Pulumi project directory, install the necessary Pulumi Kubernetes SDK:
npm install @pulumi/kubernetes
Step 3: Write the Deployment Code
We will use the
@pulumi/kubernetes
package to deploy thexos-core
Helm chart to your Kubernetes cluster. Below is a TypeScript program that performs the deployment:import * as k8s from "@pulumi/kubernetes"; // Name of the Helm chart, this should be changed if the chart name is different. const chartName = "xos-core"; // Create a Kubernetes namespace for the xos-core chart. const namespace = new k8s.core.v1.Namespace("xos-core-namespace", { metadata: { name: "xos-core" }, }); // Deploy xos-core using Helm chart. const xosCoreChart = new k8s.helm.v3.Chart(chartName, { chart: chartName, version: "version-number", // Specify the version of the chart you want to deploy namespace: namespace.metadata.name, // Use the created namespace's name fetchOpts: { // If your chart is from a custom repository, provide the details here. // For example: // repo: "https://charts.example.com/", }, // If the chart requires any custom values, define them here. // values: { // service: { // type: "LoadBalancer", // }, // }, }, { dependsOn: namespace }); // Export the Namespace name and Service's LoadBalancer external IP. export const xosCoreNamespace = namespace.metadata.apply(metadata => metadata.name); // If you have services exposed via LoadBalancer, you can capture and export the IPs like this: // export const serviceExternalIp = xosCoreChart.getResourceProperty('v1/Service', 'xos-core-service', 'status').apply(status => status.loadBalancer?.ingress[0].ip);
Make sure to replace
"version-number"
with the actual version number of thexos-core
chart. Also, if you're using a private repo or need to specify custom values for the Helm chart, uncomment and modify the appropriate sections.Step 4: Deploy the Helm Chart
After saving the above code in
index.ts
, deploy the Helm chart using the Pulumi CLI:pulumi up
This command will preview the changes and prompt you to proceed with the deployment. Confirm the action to deploy the
xos-core
Helm chart to your Kubernetes cluster.Step 5: Check the Deployment
Once the deployment is completed, you can verify that the Helm chart has been deployed:
kubectl get all -n xos-core
This will show you the resources that have been created in the
xos-core
namespace.Cleanup
When you're done and want to delete the deployed resources:
pulumi destroy
This will remove all resources created by the Pulumi program from your Kubernetes cluster. Confirm the action when prompted.
Final Notes
What we just walked through is a basic example of deploying a Helm chart on Kubernetes using Pulumi. Depending on the specifics of the
xos-core
chart, you may need to provide additional configuration through thevalues
property.Remember to always check the Helm chart documentation for any prerequisites or setup that needs to be done before deployment and adjust your Pulumi code accordingly.