Customization overview
Explore how to customize your Kubernetes optimization journey
PerfectScale allows easy cluster management through profiles, increasing productivity with minimal effort. PerfectScale provides various customizations to help you create your own K8s optimization ecosystem, enhancing observability across your environment and simplifying alerting, ticketing, pricing management, etc., to ensure you achieve the best possible results.
To make your optimization process seamless and personalized, PerfectScale provides various out-of-the-box integrations, helping you to build your optimization ecosystem tailored to your business needs.
You can configure integrations using either UI profiles or CRD-based inline profiles. However, we strongly recommend you configure the integrations via PerfectScale UI.
Profiles referenced via CRD take precedence over profiles assigned in UI.
You can quickly configure integrations using Customization Profiles (YAML files) via UI, or customize your environment by configuring profiles with CRDs.
You can apply multiple profiles to a single cluster, but only one profile of each type (Slack, Jira, etc.).
✨ Recommended path
Create and test profiles in the UI first.
Use refByID to reference the profile by its ID (case-sensitive).
Ensure the profile type you are referencing matches the existing profile type.
apiVersion: perfectscale.io/v1
kind: ClusterSettings
metadata:
name: cluster-settings-main
namespace: perfectscale
spec:
profiles:
pricing:
# Reference an existing pricing profile by ID
# No assigned field needed - refByID is always assigned
- type: custom
refByID: "pricing-1"Configuring integration profile via UI
You can seamlessly create an integration profile directly from the PerfectScale UI. Simply go to Settings, select the integration type, and click Add profile. This approach allows you to set up and manage integrations quickly and accurately. Detailed step-by-step instructions for each integration type are provided on their dedicated integration pages.

When a profile is created in the UI, its ID has the following format: {type|class}-N. Underscores in type/class names are converted to hyphens in IDs.
Examples: jira-1, slack-2, resiliency-alerts-1, etc.
Created profiles in the UI can be referenced in a CRD using refByID.
Example:
Configuring inline integration profile via CRD
Alternatively, you can configure an inline integration profile using a CRD. This approach is ideal for teams that prefer GitOps workflows. Detailed step-by-step instructions for each integration type are provided on their dedicated integration pages.
The inline profile configured via CRD is visible in UI and can be tested before activation with a single click. You cannot modify or delete a profile configured via CRD in the UI. You can make temporary changes for testing, but these changes will not be saved.
Inline profiles will be displayed in the UI using the following name format: {your profile name}-{type/class}-{clusterUID}
Example: dev-team profile with the type Jira
dev-team-jira-1522a0a0-b363-4e6c-bc0d-cfd82c56402e
Inline profiles will be displayed in the UI using the following name format:
You can seamlessly set assigned: false to create profiles without activating them immediately (for example, for testing). In that case, the profile will be visible in the UI but inactive. Only one profile per type (Slack, Jira, etc.) can have assigned: true.
Profiles created via CRD are cluster-specific and cannot be referenced by other clusters.
Prerequisites for configuring the integration profile via CRD
The feature is supported starting from the exporter v1.0.80.
If psc-exporter (v1.0.80+) is newly installed, the required CRDs are installed automatically, allowing you to manage cluster settings using custom resources (CRs). However, CRDs are not installed automatically when running a helm upgrade. If you are upgrading, you must install the CRDs manually by running:
Combining refByID and inline integrations
We highly recommend creating profiles via UI and referencing them using refByID rather than inline profiles. If you prefer using inline profiles, you can test them in UI before activation, even when assigned: false.
You have the option to configure a CR that combines multiple integrations, allowing you to manage them with a single resource. Additionally, you can include existing profiles that were previously configured via the PerfectScale UI, giving you flexibility to mix and match inline and UI-based configurations in one setup.
You can combine both approaches by referencing profiles created in the PerfectScale UI directly in your CR using refByID (case-sensitive). However, refByID cannot reference profiles created via CR, and a CR cannot have both refByID and an inline profile with assigned: true for the same type.
Example:
✅ Valid:
refByID+ inline profiles withassigned: false(for testing)❌ Invalid:
refByID+ inline profile withassigned: true
When using refByID, ensure the profile type matches the existing profile's type: jira, slack, teams, etc.
Example
CRD profiles (both refByID and inline) take precedence over UI-assigned profiles and will override them.
Deleting a profile
Profiles assigned to clusters cannot be deleted.
To delete a profile, it must first be unassigned from all clusters. If the profile is still assigned to one or more clusters, deletion is blocked, and a pop-up message will inform you of the reason with the following instructions.

To unassign a profile from all clusters, navigate to Manage Assignments and deselect the relevant profile.
Profiles created via CRD cannot be deleted in the UI, so the delete option is disabled.
Troubleshooting
CRD creation failed
Check if ClusterSettings already exists:
kubectl get clustersettings -n perfectscaleReview logs:
kubectl logs -n perfectscale -l app=perfectscale-exporter
Profile not applied
Check logs for sync errors
Verify secrets exist:
kubectl get secrets -n perfectscaleCheck profile format matches the type
Secret not found
Verify secret exists:
kubectl get secret <secret-name> -n perfectscaleEnsure the secret is in
perfectscalenamespace
Profile deletion failed
Ensure the profile is unassigned from all clusters
If it is still assigned, navigate to Manage Assignments and deselect the relevant profile.
Last updated
Was this helpful?