Deploy the plex-media-server helm chart on AWS EKS
TypeScriptTo deploy the Plex Media Server on an AWS EKS cluster using Pulumi, you'll go through a few high-level steps:
- Create an EKS cluster using the
@pulumi/eks
module. - Deploy the Plex Media Server using the
@pulumi/kubernetes
module and thehelm.v3.Chart
resource.
Creating an EKS Cluster
Firstly, you need to create an Amazon EKS cluster. You can do this using Pulumi's EKS package, which provides a high-level abstraction over AWS infrastructure needed to run an EKS cluster. This abstraction simplifies the process significantly.
Here's how you can create an EKS cluster with Pulumi's EKS package:
- Import the necessary Pulumi packages.
- Define the EKS cluster by creating a new instance of
Cluster
.
Deploying the Plex Media Server Helm Chart
After setting up your EKS cluster, you'll use Pulumi's Kubernetes package to deploy the Plex Media Server using Helm Charts. The
helm.v3.Chart
resource from the@pulumi/kubernetes
package allows you to deploy Helm charts in a Kubernetes cluster.Complete Program
Below you'll find a complete TypeScript program that sets up an EKS cluster and deploys the Plex Media Server Helm chart. You need to have AWS access configured for Pulumi and Helm chart details for the Plex Media Server ready to use this code.
import * as eks from "@pulumi/eks"; import * as k8s from "@pulumi/kubernetes"; import * as pulumi from "@pulumi/pulumi"; // Create an EKS cluster with default settings. const cluster = new eks.Cluster("plex-media-server-cluster", {}); // Once the cluster is created, it provides a kubeconfig that we can use to configure a k8s provider instance. const k8sProvider = new k8s.Provider("plex-k8s-provider", { kubeconfig: cluster.kubeconfig.apply(JSON.stringify), }); // Now deploy the Plex Media Server Helm chart into the cluster using the Helm Chart resource. const plexChart = new k8s.helm.v3.Chart("plex-media-server", { chart: "plex-media-server", // Replace `<REPO>` with the repository that contains the plex-media-server chart. // This might require adding that repo to Helm with `helm repo add` if it's not a standard one. repo: "<REPO>", version: "<CHART_VERSION>", // Specify the version of the chart you'd like to deploy namespace: "default", // The Kubernetes namespace to deploy the chart. Use "default" or create a new one if required. }, { provider: k8sProvider }); // Export the kubeconfig and the EKS cluster's name to access them easily later on. export const kubeconfig = cluster.kubeconfig; export const clusterName = cluster.core.cluster.name;
In the program above:
- The
eks.Cluster
class creates an Amazon EKS cluster. This includes the required compute infrastructure to run the Kubernetes control plane and worker nodes. - The
k8s.Provider
class utilizes the generated kubeconfig from our EKS cluster to interact with it using Pulumi's Kubernetes provider. - The
k8s.helm.v3.Chart
class is used to deploy the Plex Media Server on EKS using its Helm chart. - We've exported the
kubeconfig
andclusterName
to make it easy to connect to the cluster after the program has finished running.
Make sure you replace
<REPO>
and<CHART_VERSION>
with the appropriate Helm repository and chart version for Plex Media Server.After writing this code in a TypeScript file (for example,
index.ts
), you can deploy it using Pulumi CLI commands:- Install Pulumi CLI and set up your AWS credentials.
- Navigate to the directory containing your index.ts file and run
pulumi up
. This will start the deployment process.
Pulumi will print out the planned changes before prompting you to confirm if you want to proceed with the deployment. Once you confirm, it will provision your EKS cluster and deploy the Plex Media Server Helm chart.
- Create an EKS cluster using the