Install Portworx on IBM Cloud Kubernetes Service using Terraform
This document provides instructions for installing Portworx on an IBM Cloud Kubernetes Service (IKS) cluster using the Terraform module. You can use the Terraform module to upgrade an active installation and to automate Portworx deployment across multiple IKS clusters.
Prerequisites
- Have an IKS cluster meeting the Portworx minimum requirements.
- Use Terraform version 0.13 or later.
- Ensure that the following utilities are installed and configured on your client:
- IBM Cloud Kubernetes Service CLI
- kubectl
- HashiCorp Terraform CLI
- Helm CLI
- The latest versions of the
jq
,curl
, andwget
libraries
Configure your Terraform on IBM Cloud setup
-
Clone the Terraform repository:
git clone https://github.com/portworx/terraform-ibm-portworx-enterprise.git
-
Depending on your cluster resources, navigate to the appropriate folder:
- IKS cluster using mounted volumes:
cd examples/iks-with-attached-drives
- IKS cluster using cloud drives:
cd examples/iks-with-cloud-drives
- IKS cluster where existing worker nodes are converted to Portworx nodes:
cd examples/iks-worker-node-replace
- IKS cluster using mounted volumes:
Declare the IBM Cloud resources
Create a variable file and name it terraform.tfvars
. In this file, declare the IBM Cloud resources that are required for your Portworx deployment.
-
For an IKS cluster using mounted volumes or cloud drives, declare the following:
iks_cluster_name="<your_iks-cluster_name>"
resource_group="<your_resource_group_name>"
ibmcloud_api_key="<secret_ibm_cloud_key>"resource_group
: Specify the resource group name where your IKS cluster exists, and the Portworx Enterprise service instance will be created in the same resource group.iks_cluster_name
: Name of your IKS clusteribmcloud_api_key
: IBM Cloud API key associated with your cluster
-
For an IKS cluster where existing worker nodes are converted to Portworx nodes, declare the following:
resource_group = "<your_resource_group_name>"
region = "<region_name>"
iks_cluster_name = "<your_iks_cluster_name>"
worker_ids = ["<worker_id_1>", "<worker_id_2>", "<worker_id_3>"]
replace_all_workers = falseresource_group
: Specify the resource group name where your IKS cluster exists, and the Portworx Enterprise service instance will be created in the same resource group.region
: Specify the IBM region where your cluster is provisionedworker_ids
: List of all worker nodes IDs to be replaced.iks_cluster_name
: Name of your IKS cluster
For the complete list of variables, refer to the examples/variables.tf
file in your setup directory.
Retrieve the kubeconfig file
To access the IKS cloud services and resources from your client machine, run the following command:
export IC_API_KEY="secret_ibm_cloud_key"
ibmcloud ks cluster config --admin --cluster <cluster_name | cluster_id>
Install Portworx
-
Initialize Terraform:
terraform init
-
Generate a Terraform execution plan:
terraform plan -out tf.plan
-
Apply the execution plan:
terraform apply tf.plan
-
Run the following command to deploy Portworx:
terraform output
associated_iks_cluster_id = "cdkasv9w0oi7m5g5i6qg"
associated_iks_cluster_name = "schakravorty-px-wdc-b3c.4x16"
portworx_enterprise_id = "crn:v1:bluemix:public:portworx:us-east:a/b5c47bfad9f99ace9c94c3986bd1fdc9:xxxxxxxx-xxxx-xxxx-xxxx-5192d195b094::"
portworx_enterprise_service_name = "portworx-enterprise-b0d0b748"
portworx_version_installed = "2.11.4"Wait for a few minutes for the Portworx pods to be created. You will see that the command outputs the details of the Portworx Enterprise service.
Verify your Portworx installation
Once you've installed Portworx, you can perform the following tasks to verify that Portworx has installed correctly.
Verify if all pods are running
Enter the following kubectl get pods
command to list and filter the results for Portworx pods:
kubectl get pods -n <px-namespace> -o wide | grep -e portworx -e px
portworx-api-774c2 1/1 Running 0 2m55s 192.168.121.196 username-k8s1-node0 <none> <none>
portworx-api-t4lf9 1/1 Running 0 2m55s 192.168.121.99 username-k8s1-node1 <none> <none>
portworx-api-dvw64 1/1 Running 0 2m55s 192.168.121.99 username-k8s1-node2 <none> <none>
portworx-kvdb-94bpk 1/1 Running 0 4s 192.168.121.196 username-k8s1-node0 <none> <none>
portworx-kvdb-8b67l 1/1 Running 0 10s 192.168.121.196 username-k8s1-node1 <none> <none>
portworx-kvdb-fj72p 1/1 Running 0 30s 192.168.121.196 username-k8s1-node2 <none> <none>
portworx-operator-58967ddd6d-kmz6c 1/1 Running 0 4m1s 10.244.1.99 username-k8s1-node0 <none> <none>
prometheus-px-prometheus-0 2/2 Running 0 2m41s 10.244.1.105 username-k8s1-node0 <none> <none>
px-cluster-xxxxxxxx-xxxx-xxxx-xxxx-3e9bf3cd834d-9gs79 2/2 Running 0 2m55s 192.168.121.196 username-k8s1-node0 <none> <none>
px-cluster-xxxxxxxx-xxxx-xxxx-xxxx-3e9bf3cd834d-vpptx 2/2 Running 0 2m55s 192.168.121.99 username-k8s1-node1 <none> <none>
px-cluster-xxxxxxxx-xxxx-xxxx-xxxx-3e9bf3cd834d-bxmpn 2/2 Running 0 2m55s 192.168.121.191 username-k8s1-node2 <none> <none>
px-csi-ext-868fcb9fc6-54bmc 4/4 Running 0 3m5s 10.244.1.103 username-k8s1-node0 <none> <none>
px-csi-ext-868fcb9fc6-8tk79 4/4 Running 0 3m5s 10.244.1.102 username-k8s1-node2 <none> <none>
px-csi-ext-868fcb9fc6-vbqzk 4/4 Running 0 3m5s 10.244.3.107 username-k8s1-node1 <none> <none>
px-prometheus-operator-59b98b5897-9nwfv 1/1 Running 0 3m3s 10.244.1.104 username-k8s1-node0 <none> <none>
Note the name of one of your px-cluster
pods. You'll run pxctl
commands from these pods in following steps.