Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
71 changes: 66 additions & 5 deletions docs/guides/kubernetes/deploy-lke-cluster-using-terraform/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,16 +3,17 @@ slug: deploy-lke-cluster-using-terraform
title: "Deploy a Linode Kubernetes Engine Cluster Using Terraform"
description: "In this tutorial, you'll deploy a Kubernetes cluster using the Linode Kubernetes Engine (LKE) and Terraform."
published: 2020-05-05
modified: 2023-02-09
modified: 2025-05-30
authors: ['Linode']
contributors: ['Linode']
license: "[CC BY-ND 4.0](https://creativecommons.org/licenses/by-nd/4.0)"
keywords: ['kubernetes','terraform','infrastructure as code','container orchestration']
tags: ["linode platform","kubernetes","automation","managed hosting"]
image: deploy-lke-cluster-with-terraform.png
external_resources:
- '[LKE Product Documentation](https://techdocs.akamai.com/cloud-computing/docs/linode-kubernetes-engine)'
- '[LKE Enterprise Product Documentation](https://techdocs.akamai.com/cloud-computing/docs/lke-enterprise)'
- '[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 Terraform Documentation](https://www.terraform.io/docs/providers/linode/index.html)'
aliases: ['/kubernetes/how-to-deploy-an-lke-cluster-using-terraform/','/guides/how-to-deploy-an-lke-cluster-using-terraform/','/products/compute/kubernetes/guides/deploy-cluster-using-terraform/']
---
Expand Down Expand Up @@ -202,8 +203,8 @@ You will now need to define the values you would like to use in order to create

```file {title="~/terraform/lke-cluster/terraform.tfvars"}
label = "example-lke-cluster"
k8s_version = "1.26"
region = "us-west"
k8s_version = "1.32"
region = "us-central"
pools = [
{
type : "g6-standard-2"
Expand All @@ -212,7 +213,67 @@ You will now need to define the values you would like to use in order to create
]
```

Terraform 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.25` 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.
Terraform 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-central` data center (Dallas, Texas, USA). Each node in the cluster's node pool will use Kubernetes version `1.32` 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.

### LKE Enterprise Clusters

[LKE Enterprise](https://techdocs.akamai.com/cloud-computing/docs/lke-enterprise) is Akamai's enterprise-grade managed Kubernetes offering and has a specific set of requirements and recommendations for successful deployment:

- **Plan type**: [Premium CPU](https://www.linode.com/pricing/#compute-premium) plans are highly recommended for LKE Enterprise clusters to accommodate production-level enterprise workloads that require high network performance.

- **Enterprise tier values**: To deploy an LKE Enterprise cluster using Terraform, you must use the `linode_lke_cluster` resource, a valid enterprise Kubernetes version (`k8s_version`), and the [`tier`](https://registry.terraform.io/providers/linode/linode/latest/docs/resources/lke_cluster) argument must be [assigned the value](#assign-values-to-your-input-variables) `"enterprise"`. For example:

```file
resource "linode_lke_cluster" "{{< placeholder "test" >}}" {
label = "lke-e-cluster"
region = "us-lax"
k8s_version = "v1.31.8+lke1"
tags = ["{{< placeholder "test" >}}"]
tier = "enterprise"

pool {
type = "g7-premium-2"
count = 3
tags = ["{{< placeholder "test" >}}"]
}
}
```
Make sure to replace all {{< placeholder "test" >}} label values with your own.

To get a list of valid enterprise `k8s_version` values, specify the `enterprise` tier using the `linode_lke_versions` [data source](https://registry.terraform.io/providers/linode/linode/latest/docs/data-sources/lke_versions):

```command
data "linode_lke_versions" "example_enterprise" {tier = "enterprise"}

output "example_enterprise_output" {
value = data.linode_lke_versions.example_enterprise
}

output "example_enterprise_output_first_version" {
value = data.linode_lke_versions.example_enterprise.versions[0]
}
```

- **Availability**: As of this writing, LKE Enterprise is in limited availability and only deployable in the below regions:

| Region | Region ID |
| -- | -- |
| **Amsterdam, NL** | nl-ams |
| **Chennai, IN** | in-maa |
| **Chicago, IL** | us-ord |
| **London, UK** | eu-west |
| **Los Angeles, CA** | us-lax |
| **Miami, FL** | us-mia |
| **Milan, IT** | it-mil |
| **Osaka, JP** | jp-osa |
| **Paris, FR** | fr-par |
| **São Paulo, BR** | br-gru |
| **Seattle, WA** | us-sea |
| **Singapore Expansion, SP** | sg-sin-2 |
| **Stockholm, SE** | se-sto |
| **Washington, DC** | us-iad |

A full list of regions and region IDs can be found on our [Availability](https://www.linode.com/global-infrastructure/availability/) page.

## Deploy your Kubernetes Cluster

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,12 @@ description: "This guide includes steps and guidance for deploying a large langu
authors: ["Akamai"]
contributors: ["Akamai"]
published: 2025-03-25
modified: 2025-04-25
modified: 2025-06-04
keywords: ['ai','ai inference','ai inferencing','llm','large language model','app platform','lke','linode kubernetes engine','llama 3','kserve','istio','knative']
license: '[CC BY-ND 4.0](https://creativecommons.org/licenses/by-nd/4.0)'
external_resources:
- '[Akamai App Platform for LKE](https://techdocs.akamai.com/cloud-computing/docs/application-platform)'
- '[Akamai App Platform Documentation](https://apl-docs.net/docs/akamai-app-platform/introduction)'
- '[Akamai App Platform Documentation](https://techdocs.akamai.com/app-platform/docs/welcome)'
---

{{< note title="Beta Notice" type="warning" >}}
Expand Down Expand Up @@ -94,7 +94,7 @@ Sign into the App Platform web UI using the `platform-admin` account, or another

### Create a New Team

[Teams](https://apl-docs.net/docs/for-ops/console/teams) are isolated tenants on the platform to support Development/DevOps teams, projects or even DTAP. A Team gets access to the Console, including access to self-service features and all shared apps available on the platform.
[Teams](https://techdocs.akamai.com/app-platform/docs/platform-teams) are isolated tenants on the platform to support Development/DevOps teams, projects or even DTAP. A Team gets access to the Console, including access to self-service features and all shared apps available on the platform.

1. Select **view** > **platform**.

Expand Down Expand Up @@ -150,7 +150,7 @@ The [NVIDIA GPU Operator](https://docs.nvidia.com/datacenter/cloud-native/gpu-op

### Create a Workload for the kserve-crd Helm Chart

A [Workload](https://apl-docs.net/docs/for-devs/console/workloads) is a self-service feature for creating Kubernetes resources using Helm charts from the Catalog.
A [Workload](https://techdocs.akamai.com/app-platform/docs/team-workloads) is a self-service feature for creating Kubernetes resources using Helm charts from the Catalog.

1. Select **view** > **team** and **team** > **admin** in the top bar.

Expand Down Expand Up @@ -274,7 +274,7 @@ If you haven't done it already, request access to the Llama 3 LLM model. To do t

### Create a Sealed Secret

[Sealed Secrets](https://apl-docs.net/docs/for-devs/console/secrets) are encrypted Kubernetes Secrets stored in the Values Git repository. When a Sealed Secret is created in the Console, the Kubernetes Secret will appear in the Team's namespace.
[Sealed Secrets](https://techdocs.akamai.com/app-platform/docs/team-secrets) are encrypted Kubernetes Secrets stored in the Values Git repository. When a Sealed Secret is created in the Console, the Kubernetes Secret will appear in the Team's namespace.

1. Select **view** > **team** and **team** > **demo** in the top bar.

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,12 @@ description: "This guide expands on a previously built LLM and AI inferencing ar
authors: ["Akamai"]
contributors: ["Akamai"]
published: 2025-03-25
modified: 2025-04-25
modified: 2025-06-04
keywords: ['ai','ai inference','ai inferencing','llm','large language model','app platform','lke','linode kubernetes engine','rag pipeline','retrieval augmented generation','open webui','kubeflow']
license: '[CC BY-ND 4.0](https://creativecommons.org/licenses/by-nd/4.0)'
external_resources:
- '[Akamai App Platform for LKE](https://techdocs.akamai.com/cloud-computing/docs/application-platform)'
- '[Akamai App Platform Documentation](https://apl-docs.net/docs/akamai-app-platform/introduction)'
- '[Akamai App Platform Documentation](https://techdocs.akamai.com/app-platform/docs/welcome)'
---

{{< note title="Beta Notice" type="warning" >}}
Expand Down Expand Up @@ -214,7 +214,7 @@ Make another Sealed Secret named `mysql-credentials` to establish root user cred

### Create a Network Policy

Create a [**Network Policy**](https://apl-docs.net/docs/for-ops/console/netpols) in the Team where the `kubeflow-pipelines` Helm chart will be installed (Team name **demo** in this guide). This allows communication between all Kubeflow Pipelines Pods.
Create a [**Network Policy**](https://techdocs.akamai.com/app-platform/docs/team-network-policies) in the Team where the `kubeflow-pipelines` Helm chart will be installed (Team name **demo** in this guide). This allows communication between all Kubeflow Pipelines Pods.

1. Select **view** > **team** and **team** > **demo** in the top bar.

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,12 @@ description: "This guide shows how to deploy a RabbitMQ message broker architect
authors: ["Akamai"]
contributors: ["Akamai"]
published: 2025-03-20
modified: 2025-04-25
modified: 2025-06-04
keywords: ['app platform','lke','linode kubernetes engine','rabbitmq','microservice','message broker']
license: '[CC BY-ND 4.0](https://creativecommons.org/licenses/by-nd/4.0)'
external_resources:
- '[Akamai App Platform for LKE](https://techdocs.akamai.com/cloud-computing/docs/application-platform)'
- '[Akamai App Platform Docs](https://apl-docs.net/docs/akamai-app-platform/introduction)'
- '[Akamai App Platform Documentation](https://techdocs.akamai.com/app-platform/docs/welcome)'
---

{{< note title="Beta Notice" type="warning" >}}
Expand Down Expand Up @@ -99,7 +99,7 @@ Once your LKE cluster with App Platform has been fully deployed, [sign in](https

### Create a New Team

[Teams](https://apl-docs.net/docs/for-ops/console/teams) are isolated tenants on the platform to support Development and DevOps teams, projects, or even DTAP (Development, Testing, Acceptance, Production). A Team gets access to the Console, including access to self-service features and all shared apps available on the platform.
[Teams](https://techdocs.akamai.com/app-platform/docs/platform-teams) are isolated tenants on the platform to support Development and DevOps teams, projects, or even DTAP (Development, Testing, Acceptance, Production). A Team gets access to the Console, including access to self-service features and all shared apps available on the platform.

When working in the context of an admin-level Team, users can create and access resources in any namespace. When working in the context of a non-admin Team, users can only create and access resources used in that Team's namespace.

Expand All @@ -113,7 +113,7 @@ When working in the context of an admin-level Team, users can create and access

### Create a RabbitMQ Cluster with Workloads

A [Workload](https://apl-docs.net/docs/for-devs/console/workloads) is a self-service feature for creating Kubernetes resources using Helm charts from the Catalog.
A [Workload](https://techdocs.akamai.com/app-platform/docs/team-workloads) is a self-service feature for creating Kubernetes resources using Helm charts from the Catalog.

1. Switch to your newly created team view by selecting **view** > **team** and **team** > **demo** in the top bar. You can switch back to team `admin` as needed by selecting **view** > **team** and **team** > **admin**.

Expand Down Expand Up @@ -240,7 +240,7 @@ Once successfully built, copy the image repository link so that you can create a

In order for the RabbitMQ Cluster to be accessible, a Network Policy must be created.

A [Network Policy](https://apl-docs.net/docs/for-devs/console/netpols) in App Platform is a self-service method of controlling traffic to and from your deployment. Ingress (inbound) policies control access to internal Team pods, and egress (outbound) policies control traffic to external endpoints.
A [Network Policy](https://techdocs.akamai.com/app-platform/docs/team-network-policies) in App Platform is a self-service method of controlling traffic to and from your deployment. Ingress (inbound) policies control access to internal Team pods, and egress (outbound) policies control traffic to external endpoints.

1. Select **Network Policies** from the left menu, and click **Create NetPol**.

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,12 @@ description: "Two to three sentences describing your guide."
authors: ["Akamai"]
contributors: ["Akamai"]
published: 2025-05-06
modified: 2025-06-04
keywords: ['app platform','app platform for lke','lke','linode kubernetes engine','kubernetes','persistent volumes','mysql']
license: '[CC BY-ND 4.0](https://creativecommons.org/licenses/by-nd/4.0)'
external_resources:
- '[Akamai App Platform for LKE](https://techdocs.akamai.com/cloud-computing/docs/application-platform)'
- '[Akamai App Platform Documentation](https://apl-docs.net/docs/akamai-app-platform/introduction)'
- '[Akamai App Platform Documentation](https://techdocs.akamai.com/app-platform/docs/welcome)'
---

{{< note title="Beta Notice" type="warning" >}}
Expand Down Expand Up @@ -56,7 +57,7 @@ Sign into the App Platform web UI using the `platform-admin` account, or another

### Create a New Team

[Teams](https://apl-docs.net/docs/for-ops/console/teams) are isolated tenants on the platform to support Development/DevOps teams, projects, and methodologies, like [DTAP](https://en.wikipedia.org/wiki/Development,_testing,_acceptance_and_production). A Team gets access to the Console, which provides access to self-service features and the shared apps available on the platform.
[Teams](https://techdocs.akamai.com/app-platform/docs/platform-teams) are isolated tenants on the platform to support Development/DevOps teams, projects, and methodologies, like [DTAP](https://en.wikipedia.org/wiki/Development,_testing,_acceptance_and_production). A Team gets access to the Console, which provides access to self-service features and the shared apps available on the platform.

When working in the context of an admin-level Team, users can create and access resources in any namespace. When working in the context of a non-admin Team, users can only create and access resources used in that Team’s namespace.

Expand Down Expand Up @@ -116,7 +117,7 @@ Repeat the same steps for installing the MySQL service on your cluster.

Separate Workloads are created for MySQL and WordPress in order to deploy a persistent database and site, respectively. Both Workloads require passwords, so to prevent the passwords from being stored unencrypted, Sealed Secrets are created for each first.

[Sealed Secrets](https://apl-docs.net/docs/for-devs/console/secrets) are encrypted Kubernetes Secrets stored in the Values Git repository. When a Sealed Secret is created in the Console, the Kubernetes Secret will appear in the Team's namespace.
[Sealed Secrets](https://techdocs.akamai.com/app-platform/docs/team-secrets) are encrypted Kubernetes Secrets stored in the Values Git repository. When a Sealed Secret is created in the Console, the Kubernetes Secret will appear in the Team's namespace.

### Create a Sealed Secret to Store MySQL Passwords

Expand Down Expand Up @@ -184,7 +185,7 @@ Separate Workloads are created for MySQL and WordPress in order to deploy a pers
```

{{< note title="Managing Network Policies" >}}
The `networkPolicy` is disabled since all traffic is allowed by default. Rather than configuring `networkPolicy` values directly in the Workload config, this guide centrally manages all network policies using App Platform's [**Network Policies**](https://apl-docs.net/docs/for-ops/console/netpols) function.
The `networkPolicy` is disabled since all traffic is allowed by default. Rather than configuring `networkPolicy` values directly in the Workload config, this guide centrally manages all network policies using App Platform's [**Network Policies**](https://techdocs.akamai.com/app-platform/docs/team-network-policies) function.
{{< /note >}}

1. Click **Submit**. The Workload may take a few minutes to become ready.
Expand Down Expand Up @@ -275,7 +276,7 @@ Using the App Platform **Shell** feature, you can check to see if the WordPress

## Create a Service to Expose the WordPress Site

Creating a [Service](https://apl-docs.net/docs/for-devs/console/services) in App Platform configures NGINX’s Ingress Controller. This allows you to enable public access to services running internally on your cluster.
Creating a [Service](https://techdocs.akamai.com/app-platform/docs/team-services) in App Platform configures NGINX’s Ingress Controller. This allows you to enable public access to services running internally on your cluster.

1. Select **view** > **team** and **team** > **demo** in the top bar.

Expand All @@ -295,7 +296,7 @@ Creating a [Service](https://apl-docs.net/docs/for-devs/console/services) in App

### Setting Up DNS

When creating a Service, DNS for your site can be configure using a CNAME rather than using an external IP address. To do this, configure a CNAME entry with your domain name provider, and follow the steps in our [Using a CNAME](https://apl-docs.net/docs/for-devs/console/services#using-a-cname) App Platform documentation.
When creating a Service, DNS for your site can be configure using a CNAME rather than using an external IP address. To do this, configure a CNAME entry with your domain name provider, and follow the steps in our [Using a CNAME](https://techdocs.akamai.com/app-platform/docs/configure-cname) App Platform documentation.

See our guide on [CNAME records](https://techdocs.akamai.com/cloud-computing/docs/cname-records) for more information on how CNAME records work.

Expand Down
Loading
Loading