Deploy the xos-gui helm chart on Azure Kubernetes Service (AKS)
TypeScriptTo deploy the
xos-gui
Helm chart on an Azure Kubernetes Service (AKS) cluster using Pulumi, we will follow these steps:-
Create an AKS cluster: We’ll use Pulumi’s
azure-native
package to provision an AKS cluster. We need to define some properties such as the resource group, the AKS cluster settings (like the node pool profile and Kubernetes version), and ensure that AKS has an associated service principal for Kubernetes role-based access control (RBAC). -
Install the Helm Chart: Once we have our AKS cluster, we will install the
xos-gui
Helm chart onto it using Pulumi’skubernetes
provider. We'll need to configure this provider with the credentials to connect to the AKS cluster. Then, we'll use thehelm.sh/v3.Chart
resource to deploy the Helm chart.
Before proceeding with the Pulumi code, you would typically have the Pulumi CLI set up and logged in, and Azure CLI authenticated with Azure.
Below is a Pulumi TypeScript program to deploy the
xos-gui
Helm chart on AKS.import * as pulumi from "@pulumi/pulumi"; import * as azure from "@pulumi/azure-native"; import * as k8s from "@pulumi/kubernetes"; // Define an Azure resource group const resourceGroup = new azure.resources.ResourceGroup("resourceGroup"); // Define the AKS cluster settings const aksCluster = new azure.containerservice.ManagedCluster("aksCluster", { resourceGroupName: resourceGroup.name, agentPoolProfiles: [{ count: 1, // single node cluster for simplicity vmSize: azure.containerservice.VMSizeTypes.Standard_DS2_v2, mode: "System", // required when creating a new cluster }], dnsPrefix: "aksk8s", // unique dns prefix for the k8s API server kubernetesVersion: "1.18.14", // specify your desired k8s version, e.g. "1.18.14" servicePrincipalProfile: { clientId: pulumi.config.requireSecret("clientId"), // Azure AD application ID secret: pulumi.config.requireSecret("clientSecret"), // Azure AD application secret }, enableRBAC: true, // enable RBAC for cluster }); // Export the kubeconfig to connect to the cluster export const kubeconfig = pulumi. all([aksCluster.name, resourceGroup.name]). apply(([clusterName, rgName]) => { return azure.containerservice.listManagedClusterUserCredentials({ resourceGroupName: rgName, resourceName: clusterName, }).then(creds => Buffer.from(creds.kubeconfigs[0].value, 'base64').toString()); }); // Create a k8s provider using the AKS kubeconfig const k8sProvider = new k8s.Provider("k8sProvider", { kubeconfig: kubeconfig }); // Deploy the xos-gui Helm chart const chart = new k8s.helm.v3.Chart("xos-gui", { chart: "xos-gui", version: "1.0.0", // replace with the actual chart version fetchOpts: {repo: "http://helm-repo-url"}, // replace with the Helm repo URL where xos-gui is located }, { provider: k8sProvider }); // Export the chart name and version export const chartName = chart.chart; export const chartVersion = chart.version;
Let's break down what each part of this code does:
- We first create a
ResourceGroup
which is a logical container for Azure resources. - We then define an AKS cluster with a single node using
ManagedCluster
. We specify the size of the node, the version of Kubernetes, and a service principal that the Kubernetes uses to interact with other Azure services. - After provisioning the AKS cluster, we extract the
kubeconfig
which is a configuration file that contains the connection information for the Kubernetes cluster. - We create a
Provider
resource for Kubernetes. This tells Pulumi where to deploy Kubernetes resources, in this case, the newly created AKS cluster. - Finally, we deploy the
xos-gui
Helm chart using theChart
resource. We specify the chart name, version, and the repository URL. - We export the chart name and version as stack outputs.
Remember to replace the placeholders such as the application
clientId
andclientSecret
with your actual service principal credentials, theversion
with the version you wish to deploy, and therepo
with the URL of the Helm repo that hosts thexos-gui
Helm chart.Run this code using the Pulumi CLI with the usual
pulumi up
once you have filled in all necessary credentials and configurations. If you do not have direct access to the service principal credentials, you may consider using Azure's managed identity or other secure ways to supply these values. Theexport
statements will provide you with the outputs once the deployment is complete which you can use to interact with your deployed Helm chart.Please note that the
xos-gui
Helm chart must exist in the repository specified, and this Helm chart should be properly configured to deploy on an AKS cluster. If it requires specific configurations, you would pass these using thevalues
field within theChart
arguments.-