Deploy the ambassador-operator helm chart on Kubernetes
TypeScriptTo deploy the Ambassador Operator Helm Chart on a Kubernetes cluster using Pulumi, we'll use the
kubernetes.helm.v3.Chart
resource from the Pulumi Kubernetes provider. This resource allows us to deploy Helm charts in a manner similar to using thehelm
CLI tool.The Ambassador Operator is a Kubernetes Operator that automates the deployment and operation of Ambassador, which is an open-source API Gateway often used for routing traffic to services within a Kubernetes cluster. By using the operator, you can more easily manage the lifecycle of Ambassador and rely on the operator to handle updates and configuration changes according to best practices.
Let's go through the steps you'll need to deploy it:
- Installing Pulumi and Kubernetes CLI: Ensure you have Pulumi and
kubectl
installed on your local machine and that you're logged into your Kubernetes cluster. You will need to havekubectl
configured to communicate with your cluster. - Setting up Pulumi Project: Initialize a new Pulumi project or use an existing one by running
pulumi new
or navigating to your project directory. - Adding Necessary Package: You have to add the Kubernetes package to your project dependencies which you can do by running
npm install @pulumi/kubernetes
.
Below is a Pulumi TypeScript program that will deploy the Ambassador Operator helm chart to your active Kubernetes cluster:
import * as k8s from '@pulumi/kubernetes'; // Create a new instance of the Helm Chart for the Ambassador Operator. const ambassadorOperatorChart = new k8s.helm.v3.Chart("ambassador-operator", { // The chart property specifies which Helm chart to deploy. // Here we use the Ambassador Operator chart from the official Helm repository. chart: "ambassador-operator", // Specify the Helm repository where the chart is found. fetchOpts: { repo: "https://www.getambassador.io", }, // Use the appropriate namespace; if it doesn't exist, it will be created. namespace: "ambassador", // Values allows specifying custom configuration for the chart. // This is where you can provide non-default values you would typically // set using 'helm upgrade --set' or by modifying a 'values.yaml' file. values: { // For example, you can choose the scope of the installation by setting 'singleNamespace'. // If 'true', the Ambassador Operator only watches over the namespace it is installed in. singleNamespace: false, }, }); // Export the Ambassador Operator URL so that we can easily access it. export const ambassadorUrl = ambassadorOperatorChart.getResourceProperty("v1/Service", "ambassador/ambassador-operator", "status");
Here's what this program does:
- It imports the Pulumi Kubernetes package, which provides the APIs needed to interact with Kubernetes.
- It then creates an instance of the
Chart
class, which represents a Helm chart for deployment. - The
Chart
constructor is called with two arguments: a name for the Helm deployment within Pulumi, and an object with settings for the Helm chart. - We specified the chart we wish to deploy,
ambassador-operator
, and its repository URL. - We provide a
namespace
where the Ambassador Operator will be deployed; in this case, we're using theambassador
namespace. - The
values
property is an object that matches the structure of a Helmvalues.yaml
file and is used to override the default chart values. In our example, settingsingleNamespace
tofalse
means the operator will manage Ambassador instances across all namespaces.
After running
pulumi up
, Pulumi will perform the deployment, and you'll have Ambassador Operator running in your cluster.Remember, you should customize the
values
property according to your requirements. You can inspect the chart's official documentation or itsvalues.yaml
file for all available customization options.In conclusion, once the program runs successfully, the Ambassador Operator will be deployed, and it will take care of managing the Ambassador installations in your Kubernetes cluster. You can further interact with the resources via
kubectl
or Pulumi as needed.- Installing Pulumi and Kubernetes CLI: Ensure you have Pulumi and