Deploy the technitium-dnsserver helm chart on Kubernetes
TypeScriptTo deploy the technitium-dnsserver Helm chart on your Kubernetes cluster, you'll be using the Pulumi Kubernetes provider, which enables you to manage Kubernetes resources including Helm charts.
For the task at hand, you will use the
kubernetes.helm.v3.Chart
resource, which represents a Helm chart in Pulumi's programming model. This resource can be used to deploy a Helm chart from a repository or a local path; in this case, we will use a chart available in a repository.Let's start with the program block:
import * as k8s from "@pulumi/kubernetes"; // Name of the Helm chart const chartName = "technitium-dnsserver"; // Instantiate a Helm chart from an existing repository const dnsServerChart = new k8s.helm.v3.Chart(chartName, { // The name of the chart in the repository chart: chartName, // The repository where the chart is located fetchOpts: { repo: "https://technitium.com/dns/download", }, // The namespace where you want to deploy the chart namespace: "default", // Optional: specify the version of the chart // version: "0.1.2", // Uncomment and replace with the desired chart version // Optional: Customize the installation by specifying values // values: { key: "value" }, // Uncomment to provide any custom values }); // Export the DNS server service IP export const dnsServiceIp = dnsServerChart.getResourceProperty("v1/Service","default",`${chartName}-technitium-dnsserver`, "status").apply(status => status.loadBalancer.ingress[0].ip);
Here's an explanation of what is happening in the above TypeScript program:
- We're importing the Kubernetes package from Pulumi to use within our code.
- The
kubernetes.helm.v3.Chart
resource creates a Helm chart resource within the cluster. This abstraction allows you to deploy Helm charts in a declarative way. - We're deploying the
technitium-dnsserver
Helm chart by specifying its name and the repository URL where the Helm chart is located. - We set the
namespace
property to deploy the chart to a specific Kubernetes namespace. We use the default namespace for ease of use, but you may choose to create or specify a different namespace. - Optional
version
andvalues
fields can be provided. Theversion
field is used to specify a specific chart version to deploy if you don't want to use the latest version. Thevalues
field can be used to provide custom values to the Helm chart, similar to using avalues.yaml
file with Helm.
Finally, we've defined an export named
dnsServiceIp
that uses a call todnsServerChart.getResourceProperty
to fetch the service IP after the deployment. Note that this line assumes that aService
resource with a specific name was created by the Helm chart, and that the service is exposed via a LoadBalancer.If the
Service
is not of typeLoadBalancer
or if you need a different way to fetch the external access point for the DNS server, you'll need to adjust the export accordingly.To run this program, you need to have Pulumi installed and configured with access to a Kubernetes cluster.
- Save the code to a file named
index.ts
. - Run
pulumi up
in the command line from the directory containing your newindex.ts
file to deploy the Helm chart.
Remember to replace the placeholder repository URL and other optional configuration values to match the actual details from the Technitium DNS server Helm chart. If the chart is hosted in a private repository, you will need to provide authentication details in the
fetchOpts
.