I have recently been pretty occupied with learning TKG and oh yeah also Portworx. I wanted to share what I have learned so far when it comes to getting Portworx up and running in a TKG Cluster. So without too much introduction lets dive right in.
Create a new cluster
You need 3 worker nodes for Portworx.
tkg create cluster px1 --plan=dev -w 3
Install Portworx
Get IP’s for Ansible inventory
TKG uses DHCP for all of the deployed Kubernetes VM’s which is fine. This command will create an inventory.ini in order to run ansible playbooks against the cluster. Remember if you add nodes to update the inventory.ini.
kubectl get nodes -o jsonpath='{.items[*].status.addresses[?(@.type=="ExternalIP")].address}' | awk -v ORS='\n' '{ for (i = 1; i <= NF; i++) print $i }' >inventory.ini
Run the Ansible Playbook
This playbook is install the linux headers the TKG Photon template does not include. Copy this playbook and save it to playbook.yaml for example.
---
- hosts: all
become: yes
tasks:
- name: upgrade photon
raw: tdnf install -y linux-devel-$(uname -r)
ansible-playbook -i inventory.ini -b -v playbook.yaml -u capv
Notice that the username for the TKG nodes is capv.
# Follow this link from portworx for more details.
https://docs.portworx.com/cloud-references/auto-disk-provisioning/vsphere/
Create the vsphere credentials in a secret
Create a vsphere-secret.yaml file and paste the yaml below making sure replace the credentials with your own generated with the base64 example below.
#VSPHERE_USER: Use output of printf <vcenter-server-user> | base64
#VSPHERE_PASSWORD: Use output of printf <vcenter-server-password> | base64
apiVersion: v1
kind: Secret
metadata:
name: px-vsphere-secret
namespace: kube-system
type: Opaque
data:
VSPHERE_USER: YWRtaW5pc3RyYXRvckB2c3BoZXJlLmxvY2Fs
VSPHERE_PASSWORD: cHgxLjMuMEZUVw==
Then apply the secret
kubectl apply -f vsphere-secret.yaml
# Hostname or IP of your vCenter server
export VSPHERE_VCENTER=vc01.fsa.lab
# Prefix of your shared ESXi datastore(s) names. Portworx will use datastores who names match this prefix to create disks.
export VSPHERE_DATASTORE_PREFIX=px1
# Change this to the port number vSphere services are running on if you have changed the default port 443
export VSPHERE_VCENTER_PORT=443
export VSPHERE_DISK_TEMPLATE=type=thin,size=200
export VER=$(kubectl version --short | awk -Fv '/Server Version: /{print $3}')
curl -fsL -o px-spec.yaml "https://install.portworx.com/2.6?kbver=$VER&c=portworx-demo-cluster&b=true&st=k8s&csi=true&vsp=true&ds=$VSPHERE_DATASTORE_PREFIX&vc=$VSPHERE_VCENTER&s=%22$VSPHERE_DISK_TEMPLATE%22"
kubectl apply -f px-spec.yaml
So the curl command at the end of this code block will create the px-spec.yaml file that will install Portworx in your cluster. Notice all the variables that have to be set for this to work. If you skip any of these above or below you will have problems.
Create a repl = 3 storage class or whatever you want to test.
Copy the text below to a new file called px-repl3-sc.yaml
kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
name: px-repl3-sc
provisioner: kubernetes.io/portworx-volume
parameters:
repl: "3"
Then apply the new StorageClass
kubectl apply -f px-repl3-sc.yaml
PX Backup also will get you the PX-Central UI
helm install px-backup portworx/px-backup --namespace px-backup --create-namespace --set persistentStorage.enabled=true,persistentStorage.storageClassName="px-repl3-s"
This will get you up and running on a trial license and enough to experiment and learn Portworx. If you are new to helm make sure to learn more here.