IBM Storage The online community where IBM Storage users meet, share, discuss, and learn. Join the Community
1. Improve application performance -- Help ensure your applications get the resources they need to perform. With a complete understanding of the application and infrastructure stack, you can automate actions and prevent resource congestion across a hybrid cloud environment.2. Increase IT productivity --Automatically manage resources based on real-time demand to drive continuous performance and enable your application and infrastructure teams to shift their priorities to deliver better experiences for your end users. 3. Unite application and infrastructure teams --Gain a common understanding of how infrastructure impacts performance and bridge the gap between application and infrastructure teams. With your applications running on auto-pilot, you can shift your energy to innovation and reclaim time to drive better customer experiences. Let's try to deploy and validate Turbonomic Platform and Kube Turbo operator on Fusion platform with the next few simple steps.High Level Overview --Make sure Fusion is up and running and is ready for workload deployment 1. Prepare for the environment Create `turbonomic` namespace Switch to turbonomic namespace2. Prerequisites for Deploying on Openshift Use the assigned uid range for restricted SCC Using a custom StorageClass instead of the default one3. Start to Deploy Turbonomic Platform Get Turbonomic UI route after the deployment completed Import license4. Install Kubeturbo Create `turbo` namespace and kubeturbo operatorDetail Steps1. Prepare for the environment a. Create `turbonomic` namespace export NS=turbonomic oc new-project ${NS} b. Switch to turbonomic namespace oc project ${NS}2. Prerequisites for Deploying on Openshift a. Use the assigned uid range for restricted SCC We need to use the group id from the uid-range assigned to the project: oc get ns ${NS} -o yaml|grep uid-range openshift.io/sa.scc.uid-range: 1000630000/10000 b. Using a custom StorageClass instead of the default one We need to define a custom StorageClass for deploying Turbonomics Platform echo "Creating storage class for Turbo deployment" cat << EOF | oc apply -f - kind: StorageClass apiVersion: storage.k8s.io/v1 metadata: name: ibm-spectrum-scale-turbonomic provisioner: spectrumscale.csi.ibm.com parameters: clusterId: '<scale clusterid>' gid: '<project gid obtained in Step a e.g 1000630000>' volBackendFs: <filesystemname> reclaimPolicy: Delete volumeBindingMode: Immediate3. Start to Deploy Turbonomic Platforma. Deploy Turbo Operator echo "Installing Turbonomic Platform Operator" cat << EOF | oc -n ${NS} apply -f - apiVersion: operators.coreos.com/v1 kind: OperatorGroup metadata: annotations: olm.providedAPIs: Xl.v1.charts.helm.k8s.io name: turbonomic-mkk5d namespace: ${NS} spec: targetNamespaces: - ${NS} EOF b. Create the subscription cat << EOF | oc -n ${NS} apply -f - apiVersion: operators.coreos.com/v1alpha1 kind: Subscription metadata: labels: operators.coreos.com/t8c-certified.turbonomic: "" name: t8c-certified namespace: ${NS} spec: name: t8c-certified source: certified-operators sourceNamespace: openshift-marketplace EOF until oc get crd xls.charts.helm.k8s.io >> /dev/null 2>&1; do sleep 5; done c. Create Turbonomic CR echo "Creating Turbonomic Platform CR" cat << EOF | oc -n ${NS} apply -f - apiVersion: charts.helm.k8s.io/v1 kind: Xl metadata: name: xl-release spec: global: securityContext: fsGroup: <id for gid as Obtained in 2.a> customImageNames: false repository: registry.connect.redhat.com/turbonomic tag: 8.4.6 nginxingress: enabled: false openshiftingress: enabled: true ui: enabled: false EOF d. Get Turbonomic UI route after the deployment completed check for the route oc get route -n ${NS}4. Import license After login the Turbonomic console, it will ask for license. You can obtain the licenses from your software download or contacting your IBM Sales Rep Now you've completed the Turbonomic install5. Install Kubeturbo Create `turbo` namespace and kubeturbo operator a. Create namespace export NS=turbo kubectl create ns ${NS} b. Create Kubeturbo Operator Group cat << EOF | oc -n ${NS} apply -f - apiVersion: operators.coreos.com/v1 kind: OperatorGroup metadata: annotations: olm.providedAPIs: Kubeturbo.v1.charts.helm.k8s.io name: turbo-mkk5d namespace: ${NS} spec: targetNamespaces: - ${NS} EOF b. Create Kubeturbo Subscription cat << EOF | oc -n ${NS} apply -f - apiVersion: operators.coreos.com/v1alpha1 kind: Subscription metadata: labels: operators.coreos.com/kubeturbo-certified.turbo: "" name: kubeturbo-certified namespace: ${NS} spec: name: kubeturbo-certified source: certified-operators sourceNamespace: openshift-marketplace EOF until oc get crd kubeturbos.charts.helm.k8s.io >> /dev/null 2>&1; do sleep 5; done c. Create KubeTurbo CR echo "Creating Kubeturbo CR" cat << EOF | oc -n ${NS} apply -f - apiVersion: charts.helm.k8s.io/v1 kind: Kubeturbo metadata: name: kubeturbo-release spec: serverMeta: turboServer: https://topology-processor-turbonomic.apps.xxx.cp.fyre.ibm.com targetConfig: targetName: replace-with-your-cluster-nameValidating Turbo UI