1. Deploy the plex-media-server helm chart on Digital Ocean Kubernetes Service


    To deploy the Plex Media Server Helm chart on DigitalOcean Kubernetes Service using Pulumi, you will go through several steps:

    1. Provision a DigitalOcean Kubernetes (DOKS) cluster: You will need a Kubernetes cluster to host your workloads. The digitalocean.KubernetesCluster resource is used to provision a cluster on DigitalOcean.

    2. Install Helm and Configure the Helm Chart: Pulumi allows you to manage Helm charts with its kubernetes.helm.v3.Chart resource. To install Plex Media Server, you need to point to the location of the chart and configure it according to your needs. It may involve setting various parameters through values which are customizations specific to the Helm chart for Plex Media Server.

    Here is a TypeScript program using Pulumi to achieve your goal:

    import * as digitalocean from "@pulumi/digitalocean"; import * as kubernetes from "@pulumi/kubernetes"; import * as pulumi from "@pulumi/pulumi"; // Step 1: Provision a DigitalOcean Kubernetes cluster. const cluster = new digitalocean.KubernetesCluster("do-cluster", { region: "nyc1", // Choose the region that is closest to you or your users version: "latest", // Use the latest available version of Kubernetes nodePool: { name: "worker-pool", size: "s-2vcpu-2gb", // This is a basic node size, upgrade if you expect a heavy load. nodeCount: 2, // Two nodes in the pool }, }); // Export the kubeconfig file from the cluster which will be used to configure kubectl export const kubeconfig = cluster.kubeConfigs.apply(kc => kc[0].rawConfig); // Step 2: Install the Plex Media Server Helm chart. // Create a provider resource to set up the Kubernetes provider that uses the kubeconfig from our cluster. const k8sProvider = new kubernetes.Provider("k8s-provider", { kubeconfig: kubeconfig, }); // Deploy Plex Media Server using the Helm chart. const plexChart = new kubernetes.helm.v3.Chart("plex-media-server", { chart: "plex", fetchOpts: { repo: "https://helm.chart.repository/here", // Specify the Helm chart repository URL }, values: { // Chart-specific values here. For example: claimToken: "<Your_Plex_Claim_Token>", // More configuration may be required depending on the Plex chart's requirements. }, }, { provider: k8sProvider }); // Export the external IP or the service endpoint to access Plex once it's deployed export const plexServiceEndpoint = plexChart.getResourceProperty("v1/Service", "plex-media-server", "status"). apply(status => status.loadBalancer.ingress[0].ip || status.loadBalancer.ingress[0].hostname);

    This program performs the following actions:

    • Provisions a new Kubernetes cluster on DigitalOcean with a specified region, Kubernetes version, and node configuration.
    • Uses the output kubeconfig from the newly created cluster which is then provided to the Kubernetes provider for Pulumi, ensuring Pulumi actions are performed against this particular cluster.
    • Installs the Plex Media Server on the Kubernetes cluster using Helm. The plexChart object installs the chart with the necessary configurations, such as claim token. You need to replace placeholder values like <Your_Plex_Claim_Token> with actual values from your Plex Media Server setup.
    • Exports the external IP address or hostname of the Plex Media Server service to easily access your Plex instance after deployment.

    To run this Pulumi program:

    1. Ensure you have the Pulumi CLI installed and DigitalOcean access configured.
    2. Save the code to a file with a .ts extension within a Pulumi project directory.
    3. Run pulumi up in the terminal from the project directory. Follow the prompts from Pulumi to preview and deploy your resources.

    Please note:

    • You would need to replace "https://helm.chart.repository/here" with the actual repository URL of the Plex Media Server Helm chart.
    • The values object inside the plexChart resource should be configured based on the Plex Helm chart's configuration parameters. The claimToken shown here is a placeholder for illustrative purposes; you will need to generate your own Plex claim token from Plex's official website and insert it there.
    • The example assumes you have Pulumi and kubectl set up to work with DigitalOcean and that you have the required permissions to create and manage Kubernetes clusters and Helm chart deployments within your DigitalOcean account.

    After successful deployment, take note of the exported plexServiceEndpoint URL provided by Pulumi, which you use to access your Plex Media Server.