From 58d6037d5c3d59df34c396c4debc9471fd1505a4 Mon Sep 17 00:00:00 2001 From: Ringo De Smet Date: Tue, 22 Aug 2023 10:19:43 +0200 Subject: [PATCH 1/8] Refreshed Pulumi website links --- .../deploy-in-code-with-pulumi/index.md | 32 +++++++++---------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/docs/guides/applications/configuration-management/pulumi/deploy-in-code-with-pulumi/index.md b/docs/guides/applications/configuration-management/pulumi/deploy-in-code-with-pulumi/index.md index 75f90630a8d..0d2dc9ce38b 100644 --- a/docs/guides/applications/configuration-management/pulumi/deploy-in-code-with-pulumi/index.md +++ b/docs/guides/applications/configuration-management/pulumi/deploy-in-code-with-pulumi/index.md @@ -9,8 +9,8 @@ modified_by: published: 2019-06-26 title: Getting Started with Pulumi external_resources: -- '[Pulumi Documentation](https://pulumi.io/reference/)' -- '[Pulumi API reference](https://pulumi.io/reference/pkg/)' +- '[Pulumi Documentation](https://www.pulumi.com/docs/)' +- '[Pulumi API reference](https://www.pulumi.com/docs/languages-sdks/)' - '[Why Pulumi](https://www.pulumi.com/why-pulumi/)' aliases: ['/applications/configuration-management/deploy-in-code-with-pulumi/','/applications/configuration-management/pulumi/deploy-in-code-with-pulumi/'] authors: ["Linode"] @@ -36,11 +36,11 @@ In this guide you will learn how to: 1. If you haven't yet, [create a Linode API token](/docs/products/tools/api/get-started/#create-an-api-token). -1. [Create a free Pulumi account](https://app.pulumi.com/signup). +1. [Create a free Pulumi Cloud account](https://app.pulumi.com/signup). 1. Create a new Debian 9 Linode. Follow our [Creating a Compute Instance](/docs/products/compute/compute-instances/guides/create/) guide to deploy the Linode, and then follow the [Setting Up and Securing a Compute Instance](/docs/products/compute/compute-instances/guides/set-up-and-secure/) guide. Be sure to create a [limited Linux user with sudo privileges](/docs/products/compute/compute-instances/guides/set-up-and-secure/#add-a-limited-user-account) on your server. All commands in this guide are to be run from a sudo user. -1. Install Pulumi on your Linode using their installation script: +1. [Install Pulumi](https://www.pulumi.com/docs/install/) on your Linode using their installation script: curl -fsSL https://get.pulumi.com | sh @@ -63,11 +63,11 @@ In this guide you will learn how to: Once you have a Pulumi account, you will need to create an *access token* to use later. {{< note type="secondary" title="Why do I need a Pulumi access token?" isCollapsible=true >}} -When Pulumi interprets the infrastructure programs that you write, it determines what cloud resources it needs to create in order to satisfy your program. Every time you run your program, [Pulumi stores the state](https://pulumi.io/reference/state/#state-and-backends) of these resources in a persistent backend. In subsequent updates to your infrastructure, Pulumi will compare your program with the recorded state so that it can determine which changes need to be made. +When Pulumi interprets the infrastructure programs that you write, it determines what cloud resources it needs to create in order to satisfy your program. Every time you run your program, [Pulumi stores the state](https://www.pulumi.com/docs/concepts/state/) of these resources in a persistent backend. In subsequent updates to your infrastructure, Pulumi will compare your program with the recorded state so that it can determine which changes need to be made. -By default, Pulumi securely stores this state information on a web backend hosted at [https://app.pulumi.com](https://app.pulumi.com). This service is free to start and offers paid tiers for teams and enterprises. +By default, Pulumi securely stores this state information on the Pulumi Cloud, a web backend hosted at [https://app.pulumi.com](https://app.pulumi.com). This service is free to start and offers paid tiers for teams and enterprises. -It is possible to opt-out of using the default web backend and use a filesystem-based backend instead. Review [Pulumi's documentation](https://pulumi.io/reference/state/#to-the-filesystem-backend) for instructions. +It is possible to opt-out of using the default web backend and use a self-managed backend instead. Review [Pulumi's documentation](https://www.pulumi.com/docs/concepts/state/#using-a-self-managed-backend) for instructions. {{< /note >}} 1. [Log into your Pulumi account](https://app.pulumi.com/signin). After you've logged in, click on the avatar graphic to the top right of the Pulumi dashboard, then click on the **Settings** option in the dropdown menu that appears: @@ -87,7 +87,7 @@ It is possible to opt-out of using the default web backend and use a filesystem- Now that you have everything you need to begin using Pulumi, you can create a new Pulumi *project*. {{< note >}} -A Pulumi [project](https://pulumi.io/reference/project/) is the folder structure which contains your Pulumi programs. Specifically, a project is any folder which contains a `Pulumi.yaml` metadata file. +A Pulumi [project](https://www.pulumi.com/docs/concepts/projects/) is the folder structure which contains your Pulumi programs. Specifically, a project is any folder which contains a `Pulumi.yaml` metadata file. {{< /note >}} 1. Pulumi requires an empty directory for each new project, so first you'll need to create one and make it your working directory: @@ -108,7 +108,7 @@ A Pulumi [project](https://pulumi.io/reference/project/) is the folder structure - Enter a *stack* name of your choice, or leave blank to use the default option. {{< note type="secondary" title="What's a stack?" isCollapsible=true >}} - Multiple instances of your Pulumi programs can be created. For example, you may want to have separate instances for the development, staging, and production environments of your service. Or, you may create multiple instances of your service if you're offering it to different business clients. In Pulumi, these instances are referred to as [stacks](https://pulumi.io/tour/programs-stacks/). + Multiple instances of your Pulumi programs can be created. For example, you may want to have separate instances for the development, staging, and production environments of your service. Or, you may create multiple instances of your service if you're offering it to different business clients. In Pulumi, these instances are referred to as [stacks](https://www.pulumi.com/docs/concepts/stack/). {{< /note >}} - Enter your Linode API token. @@ -147,13 +147,13 @@ const instance = new linode.Instance("my-instance", { exports.instanceLabel = instance.label; {{< /file >}} -The file requires two JavaScript modules unique to Pulumi: Pulumi's SDK, and Pulumi's Linode integration. [Pulumi's API Reference Documentation](https://pulumi.io/reference/pkg/nodejs/pulumi/linode/) serves as a reference for the JavaScript you'll see here. It also includes a library of several additional options that enable you to create configurations more specific to your use case. +The file requires two JavaScript modules unique to Pulumi: Pulumi's SDK, and Pulumi's Linode integration. [Pulumi's API Reference Documentation](https://www.pulumi.com/registry/packages/linode/) serves as a reference for the JavaScript you'll see here. It also includes a library of several additional options that enable you to create configurations more specific to your use case. In this case, your file is only creating a single 1GB Linode (Nanode) instance in the Newark data center running Ubuntu 18.04. ### Create and Destroy Resources -- Use [Pulumi's `preview` command](https://pulumi.io/reference/cli/pulumi_preview/) to test your code and make sure it's successfully able to create resources under your account. +- Use [Pulumi's `preview` command](https://www.pulumi.com/docs/cli/commands/pulumi_preview/) to test your code and make sure it's successfully able to create resources under your account. pulumi preview @@ -168,7 +168,7 @@ In this case, your file is only creating a single 1GB Linode (Nanode) instance i Resources: + 2 to create -- Use [Pulumi's `up` command](https://pulumi.io/reference/cli/pulumi_up/) to deploy your code to your Linode account: +- Use [Pulumi's `up` command](https://www.pulumi.com/docs/cli/commands/pulumi_up/) to deploy your code to your Linode account: pulumi up @@ -178,14 +178,14 @@ This will create a new billable resource on your account. From here, you will be prompted to confirm the resource creation. Use your arrow keys to choose the `yes` option, hit `enter`, and you will see your resources being created. Once the process is completed, the Linode Label of your new Linode will be displayed. If you check your account manually through the [Cloud Manager](https://cloud.linode.com/), you can confirm that this Linode has been successfully created. -- Since this Linode was only created as a test, you can safely delete it by entering [Pulumi's `destroy` command](https://pulumi.io/reference/cli/pulumi_destroy/): +- Since this Linode was only created as a test, you can safely delete it by entering [Pulumi's `destroy` command](https://www.pulumi.com/docs/cli/commands/pulumi_destroy/): pulumi destroy Follow the prompts, and you'll be able to see the resources being removed, similar to how we could see them being created. {{< note respectIndent=false >}} -Many Pulumi commands will be logged on your Pulumi account. You can see this under the **Activity** tab of your project's stack in [Pulumi's Application Page](https://app.pulumi.com/). +Many Pulumi commands will be logged on your Pulumi account. You can see this under the **Activity** tab of your project's stack in [Pulumi Cloud](https://app.pulumi.com/). {{< /note >}} ## Create and Configure a NodeBalancer @@ -272,7 +272,7 @@ exports.nodeBalancerPort = nodeBalancerConfig.port; {{< /file >}} {{< note >}} - In our `index.js` file we've created and configured two Linodes using an existing [StackScript](/docs/products/tools/stackscripts/) which installs NGINX. Pulumi's Linode integration allows for the creation of entirely [new StackScripts](https://pulumi.io/reference/pkg/nodejs/pulumi/linode/#StackScript) directly in code, which can help you to automate your deployments even further. + In our `index.js` file we've created and configured two Linodes using an existing [StackScript](/docs/products/tools/stackscripts/) which installs NGINX. Pulumi's Linode integration allows for the creation of entirely [new StackScripts](https://www.pulumi.com/registry/packages/linode/api-docs/stackscript/) directly in code, which can help you to automate your deployments even further. If you're interested in seeing how this StackScript works, you can view it [here](https://www.linode.com/stackscripts/view/526246). {{< /note >}} @@ -309,7 +309,7 @@ Pulumi is a powerful tool with a vast number of possible configurations that can * Look at Pulumi's [examples](https://github.com/pulumi/examples) for more ideas regarding the things you can do with Pulumi. -* Try using Pulumi with different languages like [Python](https://pulumi.io/reference/python/) or [TypeScript](https://pulumi.io/reference/javascript/#typescript) +* Try using Pulumi with different languages like [Python](https://www.pulumi.com/docs/languages-sdks/python/) or [TypeScript](https://www.pulumi.com/docs/languages-sdks/javascript/) * Import Node.js tools like [Express](https://expressjs.com/) for even more elasticity with your code. From e0fa2ab7011a4ba032ab20cb88efc9dd7378885e Mon Sep 17 00:00:00 2001 From: Ringo De Smet Date: Tue, 22 Aug 2023 15:29:47 +0200 Subject: [PATCH 2/8] Guide "Deploy a Linode Kubernetes Engine Cluster Using Pulumi" --- .../compute/kubernetes/guides/_index.md | 2 + .../deploy-cluster-using-pulumi/index.md | 382 ++++++++++++++++++ 2 files changed, 384 insertions(+) create mode 100644 docs/products/compute/kubernetes/guides/deploy-cluster-using-pulumi/index.md diff --git a/docs/products/compute/kubernetes/guides/_index.md b/docs/products/compute/kubernetes/guides/_index.md index d243dd7dfc3..da173ca5b03 100644 --- a/docs/products/compute/kubernetes/guides/_index.md +++ b/docs/products/compute/kubernetes/guides/_index.md @@ -28,6 +28,8 @@ modified: 2023-02-09 - [Deploy and Manage a Kubernetes Cluster with the Linode API](/docs/products/compute/kubernetes/guides/deploy-and-manage-cluster-with-the-linode-api/) +- [Deploy an LKE Cluster Using Pulumi](/docs/products/compute/kubernetes/guides/deploy-cluster-using-pulumi/) + - [Deploy an LKE Cluster Using Terraform](/docs/products/compute/kubernetes/guides/deploy-cluster-using-terraform/) - [Reset Kubeconfig](/docs/products/compute/kubernetes/guides/reset-kubeconfig/) diff --git a/docs/products/compute/kubernetes/guides/deploy-cluster-using-pulumi/index.md b/docs/products/compute/kubernetes/guides/deploy-cluster-using-pulumi/index.md new file mode 100644 index 00000000000..a994e2cf5c9 --- /dev/null +++ b/docs/products/compute/kubernetes/guides/deploy-cluster-using-pulumi/index.md @@ -0,0 +1,382 @@ +--- +description: "In this tutorial, you'll deploy a Kubernetes cluster using the Linode Kubernetes Engine (LKE) and Pulumi." +keywords: ['kubernetes','pulumi','infrastructure as code','container orchestration'] +tags: ["linode platform","kubernetes","automation","managed hosting"] +published: 2023-08-22 +authors: ["Pulumi"] +modified_by: + name: Linode +title: "Deploy a Linode Kubernetes Engine Cluster Using Pulumi" +license: "[CC BY-ND 4.0](https://creativecommons.org/licenses/by-nd/4.0)" +external_resources: +- '[Setting Up a Private Docker Registry with Linode Kubernetes Engine and Object Storage](/docs/guides/how-to-setup-a-private-docker-registry-with-lke-and-object-storage/)' +- '[Deploying a Static Site on Linode Kubernetes Engine](/docs/guides/how-to-deploy-a-static-site-on-linode-kubernetes-engine/)' +- '[Linode Provider Pulumi Documentation](https://www.pulumi.com/registry/packages/linode/)' +--- + +## In this Guide + +This guide will walk you through the steps needed to deploy a Kubernetes cluster using LKE and the popular *infrastructure as code (IaC)* tool, [Pulumi](https://www.pulumi.com/). Throughout the guide you will: + +- [Prepare your local environment by installing Pulumi](#prepare-your-local-environment) and [kubectl](https://kubernetes.io/docs/reference/kubectl/kubectl/). +- [Create reusable Pulumi infrastructure code to define your Kubernetes cluster's resources](#create-your-pulumi-infrastructure-code). +- [Optionally, you will destroy the cluster you create using Pulumi](#destroy-your-kubernetes-cluster-optional). + +## Before you Begin + +1. Create a personal access token for [Linode's API v4](https://developers.linode.com/api/v4). Follow the [Getting Started with the Linode API](/docs/products/tools/api/get-started/#get-an-access-token) to get a token. You will need a token to be able to create Linode resources using Pulumi. + + {{< note >}} + Ensure that your token has, at minimum, Read/Write permissions for Compute Instances, Kubernetes, NodeBalancers, and Volumes. + {{< /note >}} + +1. Review the [Getting Started With Pulumi](/docs/guides/deploy-in-code-with-pulumi/) guide to familiarize yourself with Pulumi concepts if you have not used the tool before. This guide assumes familiarity with Pulumi and one of the [supported programming languages](https://www.pulumi.com/docs/languages-sdks/). In this guide, we will use Typescript for the code examples. + +## Prepare your Local Environment + +### Install Pulumi + +Install Pulumi on your computer by following the [Before You Begin](/docs/guides/deploy-in-code-with-pulumi/#before-you-begin) section of our [Getting Started With Pulumi](https://www.linode.com/docs/guides/deploy-in-code-with-pulumi/) guide. + +### Install kubectl + +{{< content how-to-install-kubectl >}} + +## Create your Pulumi Infrastructure Code + +In this section, you will create Pulumi infrastructure code that define the resources needed to create a Kubernetes cluster. You will create a minimal Pulumi project containing your [resources](https://www.pulumi.com/docs/concepts/resources/), a [stack](https://www.pulumi.com/docs/concepts/stack/) which is an instance of your Pulumi program, and the [configuration values](https://www.pulumi.com/docs/concepts/config/) for your stack. Setting up your Pulumi project in this way will allow you to reuse your Pulumi program to deploy more Kubernetes clusters, if desired, by way of additional stacks. + +### Create your Pulumi project + +Pulumi defines the elements of your Linode infrastructure using a regular programming language. Pulumi refers to these infrastructure elements as *resources*. Once you declare your Pulumi infrastructure, you run `pulumi up`, which results in the creation of those resources on the Linode platform. The Linode Provider for Pulumi exposes the Linode resources you will need to deploy a Kubernetes cluster using LKE. + +1. Create a new directory for the Pulumi project containing your LKE cluster's setup. Replace `lke-cluster` with your preferred directory name. + + ```command + mkdir lke-cluster + ``` + +1. In this new folder, create a new Pulumi project using the `linode-typescript` template: + + ```command + pulumi new + Please choose a template (8/220 shown): + [Use arrows to move, type to filter] + kubernetes-yaml A minimal Kubernetes Pulumi YAML program + linode-go A minimal Linode Go Pulumi program + linode-javascript A minimal Linode JavaScript Pulumi program + linode-python A minimal Linode Python Pulumi program + > linode-typescript A minimal Linode TypeScript Pulumi program + linode-yaml A minimal Linode Pulumi YAML program + oci-go A minimal OCI Go Pulumi program + oci-java A minimal Java Pulumi program with Maven builds + ``` + + After selecting the template, the wizard will ask you for some more information: + + ```command + This command will walk you through creating a new Pulumi project. + + Enter a value or leave blank to accept the (default), and press . + Press ^C at any time to quit. + + project name: (lke-cluster) + project description: (A minimal Linode TypeScript Pulumi program) + Created project 'lke-cluster' + + Please enter your desired stack name. + To create a stack in an organization, use the format / (e.g. `acmecorp/dev`). + stack name: (dev) + Created stack 'dev' + + linode:token: The token that allows you access to your Linode account: + Saved config + + Installing dependencies... + + added 194 packages, and audited 195 packages in 14s + + found 0 vulnerabilities + Finished installing dependencies + + Your new project is ready to go! ✨ + + To perform an initial deployment, run `pulumi up` + ``` + + Wherever a default value is presented between brackets, you can press the `` key to accept this value. The wizard already asks you the name of the first stack to create, in this case called `dev`. + +1. Using the text editor of your choice, open the `index.ts` file and create your cluster’s main configuration. Replace the contents to the file with the following: + + ```file {title="lke-cluster/index.ts"} + import * as pulumi from "@pulumi/pulumi"; + import * as linode from "@pulumi/linode"; + + const config = new pulumi.Config() + + // Create a Linode Kubernets Engine cluster + const cluster = new linode.LkeCluster("foobar", { + k8sVersion: config.require('k8s_version'), + label: config.require('label'), + region: config.require('region'), + tags: config.getObject('tags'), + pools: config.requireObject('pools') + }); + + // Export some of the cluster's output properties + export const kubeconfig = cluster.kubeconfig; + export const apiEndpoints = cluster.apiEndpoints; + export const status = cluster.status; + export const id = cluster.id; + export const pool = cluster.pools; + ``` + + This file contains your cluster’s setup and [stack outputs](https://www.pulumi.com/docs/concepts/stack/#outputs). In this example, you make use of Pulumi's stack config so that your Pulumi program can be easily reused across different clusters. + + The cluster configuration will be set using [stack configuration](https://www.pulumi.com/docs/concepts/config/). Each stack can have a different infrastructure configuration. This strategy can help you reuse, share, and version control your Pulumi programs. + + The Pulumi program uses the Linode provider to create a Kubernetes cluster. All arguments within the `linode.LkeCluster` resource are required, except for `tags`. The `pools` argument accepts a list of pool objects. In order to read the configuration for all the pools at once, the Pulumi program makes use of Pulumi's [structured configuration](https://www.pulumi.com/docs/concepts/config/#structured-configuration). Structured configuration allows for list values, maps & objects. Finally, [stack outputs](https://www.pulumi.com/docs/concepts/stack/#outputs) are defined in order to capture your cluster's output properties that will be returned to Pulumi after creating your cluster. + + {{< note >}} + You do not have to mark any stack output as a secret when the resource output property is already marked as a secret. In the example configuration for the cluster though, the `kubeconfig` output property is a regular string value. By wrapping it in a `pulumi.secret(...)`, the value is marked as a secret and Pulumi will make sure it is not outputted in clear text. + + See [Pulumi's secrets documentation](https://www.pulumi.com/docs/concepts/secrets/) for more details on the behavior of secrets with [Inputs & Outputs](https://www.pulumi.com/docs/concepts/inputs-outputs/). + {{< /note >}} + + {{< note >}} + For a full list of `linode.LkeCluster` input properties, see the [Linode Provider Pulumi documentation](https://www.pulumi.com/registry/packages/linode/api-docs/lkecluster/). You can update the `index.ts` file to include any additional arguments you would like to use. + {{< /note >}} + +### Define your Stack Configuration + +You will now need to define the values you would like to use in order to create your Kubernetes cluster. These values are stored as configuration in the stack file. Stack configuration should be the only place that requires updating when reusing the program created in this guide to deploy a new Kubernetes cluster or to add a new node pool to the cluster. + +Stack configuration is usually set using the Pulumi CLI using the command [`pulumi config set`](https://www.pulumi.com/docs/cli/commands/pulumi_config_set/). + +1. The Pulumi program for our cluster uses the `Config` object to retrieve a few named configuration items. We can set values for the (current) `dev` stack with the following commands: + + ```command + pulumi config set label "example-lke-cluster" + pulumi config set k8s_version "1.26" + pulumi config set region "us-west" + ``` + + So far, we provided the values for stack configuration which are simple strings. As mentioned before, Pulumi also supports Structured Configuration, allowing list, map and object values. The commands to set such values are a bit more complex but still fully supported. + + ```command + pulumi config set --path 'pools[0].count' 3 + pulumi config set --path 'pools[0].type' 'g6-standard-2' + ``` + + With the `dev` stack active as the current stack, the values should be added to the `Pulumi.dev.yaml` stack configuration file. + + Pulumi will use the values in this file to create a new Kubernetes cluster with one node pool that contains three 4 GB nodes. The cluster will be located in the `us-west` data center (Dallas, Texas, USA). Each node in the cluster's node pool will use Kubernetes version `1.26` and the cluster will be named `example-lke-cluster`. You can replace any of the values in this file with your own preferred cluster configurations. + +## Deploy your Kubernetes Cluster + +Now that all your Pulumi configuration is ready, you can deploy your Kubernetes cluster. + +1. Ensure that you are in your `lke-cluster` project directory which should contain your Pulumi program and stack configuration file. + + ```command + cd lke-cluster + ``` + +1. If you are using the Pulumi Cloud as state backend, run the [login command](https://www.pulumi.com/docs/cli/commands/pulumi_login/). + + ```command + pulumi login + ``` + + Or export your Pulumi access token for the Pulumi Cloud to an [environment variable](https://www.pulumi.com/docs/cli/environment-variables/). + + ```command + export PULUMI_ACCESS_TOKEN=pul-70a141.....40eebd + ``` + + {{< note type="warning" >}} + This last method commits the environment variable to your shell’s history, so take care when using this method. + {{< /note >}} + +1. Preview the updates Pulumi will execute before deploying your infrastructure. This command won't take any actions or make any changes on your Linode account. It will provide a report displaying all the resources that will be created or modified when the plan is executed. + + ```command + pulumi preview + ``` + +1. Execute your Pulumi program to deploy your Kubernetes cluster. + + ```command + pulumi up + ``` + + Pulumi will begin to create the resources you’ve defined throughout this guide. This process will take several minutes to complete. Once the cluster has been successfully created the output will include a success message and the values that you exposed as stack outputs when creating your `index.ts` file. + + ```output + Updating (team-ce/dev) + + View in Browser (Ctrl+O): https://app.pulumi.com/team-ce/lke-cluster/dev/updates/2 + + Type Name Status + pulumi:pulumi:Stack lke-cluster-dev + + └─ linode:index:LkeCluster foobar created (108s) + + + Outputs: + + apiEndpoints: [ + + [0]: "https://a16255eb-d29e-4f1f-8224-ffa5ff6e4e52.us-west-1.linodelke.net:443" + + [1]: "https://a16255eb-d29e-4f1f-8224-ffa5ff6e4e52.us-west-1.linodelke.net:6443" + + [2]: "https://45.79.231.137:443" + + [3]: "https://45.79.231.137:6443" + ] + + id : "126299" + + kubeconfig : [secret] + + pool : [ + + [0]: { + + autoscaler: + + count : 3 + + id : 187151 + + nodes : [ + + [0]: { + + id : "187151-64e4b5432fab" + + instanceId: 48953345 + + status : "not_ready" + } + + [1]: { + + id : "187151-64e4b54353f5" + + instanceId: 48953348 + + status : "not_ready" + } + + [2]: { + + id : "187151-64e4b54376b5" + + instanceId: 48953350 + + status : "not_ready" + } + ] + + type : "g6-standard-2" + } + ] + + status : "ready" + + Resources: + + 1 created + 1 unchanged + + Duration: 1m53s + ``` + +### Connect to your LKE Cluster + +Now that your Kubernetes cluster is deployed, you can use kubectl to connect to it and begin defining your workload. In this section, you will access your cluster's kubeconfig and use it to connect to your cluster with kubectl. + +1. Use Pulumi to access your cluster's kubeconfig, decode its contents, and save them to a file. Pulumi returns a [base64](https://en.wikipedia.org/wiki/Base64) encoded string (a useful format for automated pipelines) representing your kubeconfig. Replace `lke-cluster-config.yaml` with your preferred file name. + + ```command + export KUBE_VAR=`pulumi stack output kubeconfig --show-secrets` && echo $KUBE_VAR | base64 -di > lke-cluster-config.yaml + ``` + + {{< note >}} + Depending on your local operating system, to decode the kubeconfig's base64 format, you may need to replace `base64 -di` with `base64 -D` or just `base64 -d`. To determine which `base64` option to use, issue the following command: + + ```command + base64 --help + ``` + {{< /note >}} + +1. Add the kubeconfig file to your `$KUBECONFIG` environment variable. This will give kubectl access to your cluster's kubeconfig file. + + ```command + export KUBECONFIG=lke-cluster-config.yaml + ``` + +1. Verify that your cluster is selected as kubectl’s current context: + + ```command + kubectl config get-contexts + ``` + +1. View all nodes in your Kubernetes cluster using kubectl: + + ```command + kubectl get nodes + ``` + + Your output will resemble the following example, but will vary depending on your own cluster’s configurations. + + ```output + NAME STATUS ROLES AGE VERSION + lke126299-187151-64e4b5432fab Ready 4m13s v1.26.3 + lke126299-187151-64e4b54353f5 Ready 3m44s v1.26.3 + lke126299-187151-64e4b54376b5 Ready 4m22s v1.26.3 + ``` + + Now that you are connected to your LKE cluster, you can begin using kubectl to deploy applications, [inspect and manage](/docs/guides/troubleshooting-kubernetes/#kubectl-get) cluster resources, and [view logs](/docs/guides/troubleshooting-kubernetes/#kubectl-logs). + +## Destroy your Kubernetes Cluster (optional) + +Pulumi includes a `destroy` command to remove resources managed by Pulumi. + +1. Run the `destroy` command. + + ```command + pulumi destroy + ``` + + Pulumi will first display the list of resources & stack outputs that will be deleted. + + ```output + Previewing destroy (team-ce/dev) + + View in Browser (Ctrl+O): https://app.pulumi.com/team-ce/lke-cluster/dev/previews/76104ab8-eaf1-4b09-b361-11693a5da0b2 + + Type Name Plan + - pulumi:pulumi:Stack lke-cluster-dev delete + - └─ linode:index:LkeCluster foobar delete + + + Outputs: + - apiEndpoints: [ + - [0]: "https://a16255eb-d29e-4f1f-8224-ffa5ff6e4e52.us-west-1.linodelke.net:443" + - [1]: "https://a16255eb-d29e-4f1f-8224-ffa5ff6e4e52.us-west-1.linodelke.net:6443" + - [2]: "https://45.79.231.137:443" + - [3]: "https://45.79.231.137:6443" + ] + - id : "126299" + - kubeconfig : [secret] + - pool : [ + - [0]: { + - autoscaler: + - count : 3 + - id : 187151 + - nodes : [ + - [0]: { + - id : "187151-64e4b5432fab" + - instanceId: 48953345 + - status : "not_ready" + } + - [1]: { + - id : "187151-64e4b54353f5" + - instanceId: 48953348 + - status : "not_ready" + } + - [2]: { + - id : "187151-64e4b54376b5" + - instanceId: 48953350 + - status : "not_ready" + } + ] + - type : "g6-standard-2" + } + ] + - status : "ready" + + Resources: + - 2 to delete + + Do you want to perform this destroy? [Use arrows to move, type to filter] + yes + > no + details + ``` + + If you want to continue deleted the cluster, select `yes` after the preview and press ``. Pulumi will now delete the cluster and the nodepool. From 699fa12ee52bf958d4b1d19a6e6d49b8dbc47bbf Mon Sep 17 00:00:00 2001 From: Scott Lowe Date: Fri, 8 Sep 2023 16:18:15 -0600 Subject: [PATCH 3/8] Fix Markdown linting error Remove incorrect inclusion of docs domain name in link Signed-off-by: Scott Lowe --- .../kubernetes/guides/deploy-cluster-using-pulumi/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/products/compute/kubernetes/guides/deploy-cluster-using-pulumi/index.md b/docs/products/compute/kubernetes/guides/deploy-cluster-using-pulumi/index.md index a994e2cf5c9..86e2563b457 100644 --- a/docs/products/compute/kubernetes/guides/deploy-cluster-using-pulumi/index.md +++ b/docs/products/compute/kubernetes/guides/deploy-cluster-using-pulumi/index.md @@ -36,7 +36,7 @@ This guide will walk you through the steps needed to deploy a Kubernetes cluster ### Install Pulumi -Install Pulumi on your computer by following the [Before You Begin](/docs/guides/deploy-in-code-with-pulumi/#before-you-begin) section of our [Getting Started With Pulumi](https://www.linode.com/docs/guides/deploy-in-code-with-pulumi/) guide. +Install Pulumi on your computer by following the [Before You Begin](/docs/guides/deploy-in-code-with-pulumi/#before-you-begin) section of our [Getting Started With Pulumi](/docs/guides/deploy-in-code-with-pulumi/) guide. ### Install kubectl From ab023a4be66b6f2f2e07e967ca08b6b89502dba0 Mon Sep 17 00:00:00 2001 From: Rajakavitha Kodhandapani Date: Wed, 11 Oct 2023 11:07:27 +0530 Subject: [PATCH 4/8] copy edit changes --- .../deploy-cluster-using-pulumi/index.md | 57 ++++++++----------- 1 file changed, 24 insertions(+), 33 deletions(-) diff --git a/docs/products/compute/kubernetes/guides/deploy-cluster-using-pulumi/index.md b/docs/products/compute/kubernetes/guides/deploy-cluster-using-pulumi/index.md index 86e2563b457..2a9d9bb1614 100644 --- a/docs/products/compute/kubernetes/guides/deploy-cluster-using-pulumi/index.md +++ b/docs/products/compute/kubernetes/guides/deploy-cluster-using-pulumi/index.md @@ -16,11 +16,9 @@ external_resources: ## In this Guide -This guide will walk you through the steps needed to deploy a Kubernetes cluster using LKE and the popular *infrastructure as code (IaC)* tool, [Pulumi](https://www.pulumi.com/). Throughout the guide you will: - -- [Prepare your local environment by installing Pulumi](#prepare-your-local-environment) and [kubectl](https://kubernetes.io/docs/reference/kubectl/kubectl/). +This guide walks you through the steps needed to deploy a Kubernetes cluster using LKE and the popular *infrastructure as code (IaC)* tool, [Pulumi](https://www.pulumi.com/). - [Create reusable Pulumi infrastructure code to define your Kubernetes cluster's resources](#create-your-pulumi-infrastructure-code). -- [Optionally, you will destroy the cluster you create using Pulumi](#destroy-your-kubernetes-cluster-optional). +- [Optionally, destroy the cluster you create using Pulumi](#destroy-your-kubernetes-cluster-optional). ## Before you Begin @@ -29,31 +27,24 @@ This guide will walk you through the steps needed to deploy a Kubernetes cluster {{< note >}} Ensure that your token has, at minimum, Read/Write permissions for Compute Instances, Kubernetes, NodeBalancers, and Volumes. {{< /note >}} - -1. Review the [Getting Started With Pulumi](/docs/guides/deploy-in-code-with-pulumi/) guide to familiarize yourself with Pulumi concepts if you have not used the tool before. This guide assumes familiarity with Pulumi and one of the [supported programming languages](https://www.pulumi.com/docs/languages-sdks/). In this guide, we will use Typescript for the code examples. - -## Prepare your Local Environment - -### Install Pulumi - -Install Pulumi on your computer by following the [Before You Begin](/docs/guides/deploy-in-code-with-pulumi/#before-you-begin) section of our [Getting Started With Pulumi](/docs/guides/deploy-in-code-with-pulumi/) guide. - +1. Download and [install Pulumi](https://www.pulumi.com/docs/install/) on your local machine. +1. Review the [Getting Started With Pulumi](/docs/guides/deploy-in-code-with-pulumi/) guide to familiarize yourself with Pulumi concepts if you have not used the tool before. You need to be familiar with Pulumi and one of the [supported programming languages](https://www.pulumi.com/docs/languages-sdks/). In this guide, Typescript is used for the code examples. ### Install kubectl {{< content how-to-install-kubectl >}} ## Create your Pulumi Infrastructure Code -In this section, you will create Pulumi infrastructure code that define the resources needed to create a Kubernetes cluster. You will create a minimal Pulumi project containing your [resources](https://www.pulumi.com/docs/concepts/resources/), a [stack](https://www.pulumi.com/docs/concepts/stack/) which is an instance of your Pulumi program, and the [configuration values](https://www.pulumi.com/docs/concepts/config/) for your stack. Setting up your Pulumi project in this way will allow you to reuse your Pulumi program to deploy more Kubernetes clusters, if desired, by way of additional stacks. +Create Pulumi infrastructure code that define the resources needed to create a Kubernetes cluster. You can create a minimal Pulumi project containing your [resources](https://www.pulumi.com/docs/concepts/resources/), a [stack](https://www.pulumi.com/docs/concepts/stack/) which is an instance of your Pulumi program, and the [configuration values](https://www.pulumi.com/docs/concepts/config/) for your stack. Setting up your Pulumi project in this way allows you to reuse your Pulumi program to deploy more Kubernetes clusters, if desired, by way of additional stacks. ### Create your Pulumi project -Pulumi defines the elements of your Linode infrastructure using a regular programming language. Pulumi refers to these infrastructure elements as *resources*. Once you declare your Pulumi infrastructure, you run `pulumi up`, which results in the creation of those resources on the Linode platform. The Linode Provider for Pulumi exposes the Linode resources you will need to deploy a Kubernetes cluster using LKE. +Pulumi defines the elements of your Linode infrastructure using a regular programming language. Pulumi refers to these infrastructure elements as *resources*. After you declare your Pulumi infrastructure, you run `pulumi up` to create resources on the Linode platform. The Linode Provider for Pulumi exposes the Linode resources you need to deploy a Kubernetes cluster using LKE. -1. Create a new directory for the Pulumi project containing your LKE cluster's setup. Replace `lke-cluster` with your preferred directory name. +1. Create a new directory for the Pulumi project containing your LKE cluster's setup. Replace `` with your preferred directory name. ```command - mkdir lke-cluster + mkdir ``` 1. In this new folder, create a new Pulumi project using the `linode-typescript` template: @@ -72,10 +63,10 @@ Pulumi defines the elements of your Linode infrastructure using a regular progra oci-java A minimal Java Pulumi program with Maven builds ``` - After selecting the template, the wizard will ask you for some more information: + After selecting the template, the wizard prompts you for some more information: ```command - This command will walk you through creating a new Pulumi project. + This command walks you through creating a new Pulumi project. Enter a value or leave blank to accept the (default), and press . Press ^C at any time to quit. @@ -104,7 +95,7 @@ Pulumi defines the elements of your Linode infrastructure using a regular progra To perform an initial deployment, run `pulumi up` ``` - Wherever a default value is presented between brackets, you can press the `` key to accept this value. The wizard already asks you the name of the first stack to create, in this case called `dev`. + Wherever a default value is presented between brackets, you can press the `` key to accept this value. The wizard prompts you to enter the name of the first stack to create, in this case called `dev`. 1. Using the text editor of your choice, open the `index.ts` file and create your cluster’s main configuration. Replace the contents to the file with the following: @@ -133,7 +124,7 @@ Pulumi defines the elements of your Linode infrastructure using a regular progra This file contains your cluster’s setup and [stack outputs](https://www.pulumi.com/docs/concepts/stack/#outputs). In this example, you make use of Pulumi's stack config so that your Pulumi program can be easily reused across different clusters. - The cluster configuration will be set using [stack configuration](https://www.pulumi.com/docs/concepts/config/). Each stack can have a different infrastructure configuration. This strategy can help you reuse, share, and version control your Pulumi programs. + The cluster configuration is set using [stack configuration](https://www.pulumi.com/docs/concepts/config/). Each stack can have a different infrastructure configuration. This strategy can help you reuse, share, and version control your Pulumi programs. The Pulumi program uses the Linode provider to create a Kubernetes cluster. All arguments within the `linode.LkeCluster` resource are required, except for `tags`. The `pools` argument accepts a list of pool objects. In order to read the configuration for all the pools at once, the Pulumi program makes use of Pulumi's [structured configuration](https://www.pulumi.com/docs/concepts/config/#structured-configuration). Structured configuration allows for list values, maps & objects. Finally, [stack outputs](https://www.pulumi.com/docs/concepts/stack/#outputs) are defined in order to capture your cluster's output properties that will be returned to Pulumi after creating your cluster. @@ -149,11 +140,11 @@ Pulumi defines the elements of your Linode infrastructure using a regular progra ### Define your Stack Configuration -You will now need to define the values you would like to use in order to create your Kubernetes cluster. These values are stored as configuration in the stack file. Stack configuration should be the only place that requires updating when reusing the program created in this guide to deploy a new Kubernetes cluster or to add a new node pool to the cluster. +You need to define the values you would like to use in order to create your Kubernetes cluster. These values are stored as configuration in the stack file. Stack configuration should be the only place that requires updating when reusing the program created in this guide to deploy a new Kubernetes cluster or to add a new node pool to the cluster. Stack configuration is usually set using the Pulumi CLI using the command [`pulumi config set`](https://www.pulumi.com/docs/cli/commands/pulumi_config_set/). -1. The Pulumi program for our cluster uses the `Config` object to retrieve a few named configuration items. We can set values for the (current) `dev` stack with the following commands: +1. The Pulumi program for our cluster uses the `Config` object to retrieve a few named configuration items. You can set values for the (current) `dev` stack with the following commands: ```command pulumi config set label "example-lke-cluster" @@ -161,7 +152,7 @@ Stack configuration is usually set using the Pulumi CLI using the command [`pulu pulumi config set region "us-west" ``` - So far, we provided the values for stack configuration which are simple strings. As mentioned before, Pulumi also supports Structured Configuration, allowing list, map and object values. The commands to set such values are a bit more complex but still fully supported. + So far, the values for stack configuration are simple strings. Pulumi also supports Structured Configuration, allowing list, map and object values. The commands to set such values are a bit more complex but still fully supported. ```command pulumi config set --path 'pools[0].count' 3 @@ -170,7 +161,7 @@ Stack configuration is usually set using the Pulumi CLI using the command [`pulu With the `dev` stack active as the current stack, the values should be added to the `Pulumi.dev.yaml` stack configuration file. - Pulumi will use the values in this file to create a new Kubernetes cluster with one node pool that contains three 4 GB nodes. The cluster will be located in the `us-west` data center (Dallas, Texas, USA). Each node in the cluster's node pool will use Kubernetes version `1.26` and the cluster will be named `example-lke-cluster`. You can replace any of the values in this file with your own preferred cluster configurations. + Pulumi uses the values in this file to create a new Kubernetes cluster with one node pool that contains three 4 GB nodes. The cluster is located in the `us-west` data center (Dallas, Texas, USA). Each node in the cluster's node pool uses Kubernetes version `1.26` and the cluster is named `example-lke-cluster`. You can replace any of the values in this file with your own preferred cluster configurations. ## Deploy your Kubernetes Cluster @@ -198,7 +189,7 @@ Now that all your Pulumi configuration is ready, you can deploy your Kubernetes This last method commits the environment variable to your shell’s history, so take care when using this method. {{< /note >}} -1. Preview the updates Pulumi will execute before deploying your infrastructure. This command won't take any actions or make any changes on your Linode account. It will provide a report displaying all the resources that will be created or modified when the plan is executed. +1. Preview the updates Pulumi executes before deploying your infrastructure. This command won't take any actions or make any changes on your Linode account. It provides a report displaying all the resources that is created or modified when the plan is executed. ```command pulumi preview @@ -210,7 +201,7 @@ Now that all your Pulumi configuration is ready, you can deploy your Kubernetes pulumi up ``` - Pulumi will begin to create the resources you’ve defined throughout this guide. This process will take several minutes to complete. Once the cluster has been successfully created the output will include a success message and the values that you exposed as stack outputs when creating your `index.ts` file. + Pulumi begins to create the resources you’ve defined. This process takes several minutes to complete. After the cluster has been successfully created the output includes a success message and the values that you exposed as stack outputs when creating your `index.ts` file. ```output Updating (team-ce/dev) @@ -267,7 +258,7 @@ Now that all your Pulumi configuration is ready, you can deploy your Kubernetes ### Connect to your LKE Cluster -Now that your Kubernetes cluster is deployed, you can use kubectl to connect to it and begin defining your workload. In this section, you will access your cluster's kubeconfig and use it to connect to your cluster with kubectl. +Now that your Kubernetes cluster is deployed, you can use kubectl to connect to it and begin defining your workload. Access your cluster's kubeconfig and use it to connect to your cluster with kubectl. 1. Use Pulumi to access your cluster's kubeconfig, decode its contents, and save them to a file. Pulumi returns a [base64](https://en.wikipedia.org/wiki/Base64) encoded string (a useful format for automated pipelines) representing your kubeconfig. Replace `lke-cluster-config.yaml` with your preferred file name. @@ -276,14 +267,14 @@ Now that your Kubernetes cluster is deployed, you can use kubectl to connect to ``` {{< note >}} - Depending on your local operating system, to decode the kubeconfig's base64 format, you may need to replace `base64 -di` with `base64 -D` or just `base64 -d`. To determine which `base64` option to use, issue the following command: + Depending on your local operating system, to decode the kubeconfig's base64 format, you may need to replace `base64 -di` with `base64 -D` or just `base64 -d`. To determine which `base64` option to use the following command: ```command base64 --help ``` {{< /note >}} -1. Add the kubeconfig file to your `$KUBECONFIG` environment variable. This will give kubectl access to your cluster's kubeconfig file. +1. Add the kubeconfig file to your `$KUBECONFIG` environment variable. This gives kubectl access to your cluster's kubeconfig file. ```command export KUBECONFIG=lke-cluster-config.yaml @@ -301,7 +292,7 @@ Now that your Kubernetes cluster is deployed, you can use kubectl to connect to kubectl get nodes ``` - Your output will resemble the following example, but will vary depending on your own cluster’s configurations. + Your output resembles the following example, but will vary depending on your own cluster’s configurations. ```output NAME STATUS ROLES AGE VERSION @@ -322,7 +313,7 @@ Pulumi includes a `destroy` command to remove resources managed by Pulumi. pulumi destroy ``` - Pulumi will first display the list of resources & stack outputs that will be deleted. + Pulumi first displays the list of resources & stack outputs that need to be deleted. ```output Previewing destroy (team-ce/dev) @@ -379,4 +370,4 @@ Pulumi includes a `destroy` command to remove resources managed by Pulumi. details ``` - If you want to continue deleted the cluster, select `yes` after the preview and press ``. Pulumi will now delete the cluster and the nodepool. + If you want to continue deleted the cluster, select `yes` after the preview and press ``. Pulumi now deletes the cluster and the nodepool. From 2b873d3b15d2eb472aa4e623b6e467d16dc08fcc Mon Sep 17 00:00:00 2001 From: Rajakavitha Kodhandapani Date: Wed, 11 Oct 2023 11:26:35 +0530 Subject: [PATCH 5/8] reduce the length of the guide --- .../kubernetes/guides/deploy-cluster-using-pulumi/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/products/compute/kubernetes/guides/deploy-cluster-using-pulumi/index.md b/docs/products/compute/kubernetes/guides/deploy-cluster-using-pulumi/index.md index 2a9d9bb1614..483b9d2b50d 100644 --- a/docs/products/compute/kubernetes/guides/deploy-cluster-using-pulumi/index.md +++ b/docs/products/compute/kubernetes/guides/deploy-cluster-using-pulumi/index.md @@ -29,7 +29,7 @@ This guide walks you through the steps needed to deploy a Kubernetes cluster usi {{< /note >}} 1. Download and [install Pulumi](https://www.pulumi.com/docs/install/) on your local machine. 1. Review the [Getting Started With Pulumi](/docs/guides/deploy-in-code-with-pulumi/) guide to familiarize yourself with Pulumi concepts if you have not used the tool before. You need to be familiar with Pulumi and one of the [supported programming languages](https://www.pulumi.com/docs/languages-sdks/). In this guide, Typescript is used for the code examples. -### Install kubectl +1. [Install kubectl](docs/products/compute/kubernetes/guides/deploy-and-manage-cluster-with-the-linode-api/#install-kubectl) on your local machine. {{< content how-to-install-kubectl >}} From 3406dbd809ed1071067218fc30d9519fd78534df Mon Sep 17 00:00:00 2001 From: Rajakavitha Kodhandapani Date: Wed, 11 Oct 2023 11:27:08 +0530 Subject: [PATCH 6/8] remove the short guide --- .../kubernetes/guides/deploy-cluster-using-pulumi/index.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/docs/products/compute/kubernetes/guides/deploy-cluster-using-pulumi/index.md b/docs/products/compute/kubernetes/guides/deploy-cluster-using-pulumi/index.md index 483b9d2b50d..77810afcb99 100644 --- a/docs/products/compute/kubernetes/guides/deploy-cluster-using-pulumi/index.md +++ b/docs/products/compute/kubernetes/guides/deploy-cluster-using-pulumi/index.md @@ -31,8 +31,6 @@ This guide walks you through the steps needed to deploy a Kubernetes cluster usi 1. Review the [Getting Started With Pulumi](/docs/guides/deploy-in-code-with-pulumi/) guide to familiarize yourself with Pulumi concepts if you have not used the tool before. You need to be familiar with Pulumi and one of the [supported programming languages](https://www.pulumi.com/docs/languages-sdks/). In this guide, Typescript is used for the code examples. 1. [Install kubectl](docs/products/compute/kubernetes/guides/deploy-and-manage-cluster-with-the-linode-api/#install-kubectl) on your local machine. -{{< content how-to-install-kubectl >}} - ## Create your Pulumi Infrastructure Code Create Pulumi infrastructure code that define the resources needed to create a Kubernetes cluster. You can create a minimal Pulumi project containing your [resources](https://www.pulumi.com/docs/concepts/resources/), a [stack](https://www.pulumi.com/docs/concepts/stack/) which is an instance of your Pulumi program, and the [configuration values](https://www.pulumi.com/docs/concepts/config/) for your stack. Setting up your Pulumi project in this way allows you to reuse your Pulumi program to deploy more Kubernetes clusters, if desired, by way of additional stacks. From af571c99fd2cbc42fd0e3170234a873f5ca17b5b Mon Sep 17 00:00:00 2001 From: Rajakavitha Kodhandapani Date: Wed, 11 Oct 2023 13:09:53 +0530 Subject: [PATCH 7/8] we need the cloud account to start the project --- .../kubernetes/guides/deploy-cluster-using-pulumi/index.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/products/compute/kubernetes/guides/deploy-cluster-using-pulumi/index.md b/docs/products/compute/kubernetes/guides/deploy-cluster-using-pulumi/index.md index 77810afcb99..238b6844045 100644 --- a/docs/products/compute/kubernetes/guides/deploy-cluster-using-pulumi/index.md +++ b/docs/products/compute/kubernetes/guides/deploy-cluster-using-pulumi/index.md @@ -28,6 +28,7 @@ This guide walks you through the steps needed to deploy a Kubernetes cluster usi Ensure that your token has, at minimum, Read/Write permissions for Compute Instances, Kubernetes, NodeBalancers, and Volumes. {{< /note >}} 1. Download and [install Pulumi](https://www.pulumi.com/docs/install/) on your local machine. +1. Create a free [Pulumi Cloud account](https://app.pulumi.com/signup). 1. Review the [Getting Started With Pulumi](/docs/guides/deploy-in-code-with-pulumi/) guide to familiarize yourself with Pulumi concepts if you have not used the tool before. You need to be familiar with Pulumi and one of the [supported programming languages](https://www.pulumi.com/docs/languages-sdks/). In this guide, Typescript is used for the code examples. 1. [Install kubectl](docs/products/compute/kubernetes/guides/deploy-and-manage-cluster-with-the-linode-api/#install-kubectl) on your local machine. From 8f7859b231a5a44175d64f892d44bd8efbdad418 Mon Sep 17 00:00:00 2001 From: Scott Lowe Date: Wed, 25 Oct 2023 21:44:51 -0600 Subject: [PATCH 8/8] Fix Markdown linting error Fix relative path to pass Markdown linting tests Signed-off-by: Scott Lowe --- .../kubernetes/guides/deploy-cluster-using-pulumi/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/products/compute/kubernetes/guides/deploy-cluster-using-pulumi/index.md b/docs/products/compute/kubernetes/guides/deploy-cluster-using-pulumi/index.md index 238b6844045..6b675a037db 100644 --- a/docs/products/compute/kubernetes/guides/deploy-cluster-using-pulumi/index.md +++ b/docs/products/compute/kubernetes/guides/deploy-cluster-using-pulumi/index.md @@ -30,7 +30,7 @@ This guide walks you through the steps needed to deploy a Kubernetes cluster usi 1. Download and [install Pulumi](https://www.pulumi.com/docs/install/) on your local machine. 1. Create a free [Pulumi Cloud account](https://app.pulumi.com/signup). 1. Review the [Getting Started With Pulumi](/docs/guides/deploy-in-code-with-pulumi/) guide to familiarize yourself with Pulumi concepts if you have not used the tool before. You need to be familiar with Pulumi and one of the [supported programming languages](https://www.pulumi.com/docs/languages-sdks/). In this guide, Typescript is used for the code examples. -1. [Install kubectl](docs/products/compute/kubernetes/guides/deploy-and-manage-cluster-with-the-linode-api/#install-kubectl) on your local machine. +1. [Install kubectl](/docs/products/compute/kubernetes/guides/deploy-and-manage-cluster-with-the-linode-api/#install-kubectl) on your local machine. ## Create your Pulumi Infrastructure Code