Skip to content

Kedify Agent

The Kedify Agent is responsible for establishing a secure connection between your Kubernetes cluster and the Kedify platform. It handles the installation and lifecycle management of KEDA and the HTTP Scaler on your clusters, providing robust scaling capabilities and telemetry insights. The Kedify Agent can manage a large number of installations across multiple clusters using secure gRPC connections to communicate with the Kedify Dashboard, ensuring the seamless collection and display of telemetry data.

Key functionalities of the Kedify Agent include:

  • Installation Management: The agent manages the installation and versioning of KEDA and the HTTP Scaler using the Helm package manager. It ensures that the correct versions of these components are deployed and maintained across your clusters.

  • Telemetry Collection: The agent includes a telemetry collector that scrapes metrics from both KEDA and the HTTP Scaler. This telemetry data provides users with valuable insights into their configurations and scaling behaviors, which are displayed in the Kedify Dashboard.

  • Secure Communication: The Kedify Agent establishes a secure, outbound gRPC connection to the Kedify Service, ensuring that all data transmitted between your clusters and the Kedify platform is secure.

  • Custom Resource Management: The agent manages Kedify custom resources, providing autowiring and comprehensive management of the HTTP Scaler. For more information on custom resources, refer to the Kedify Custom Resource Definitions.

The Kedify Agent can be installed through helm chart or using a single, unique kubectl apply command generated and provided by Kedify via the dashboard. This command sets up the agent with all necessary configurations to connect to the Kedify platform and manage your KEDA and HTTP Scaler installations efficiently.

The Kedify Agent relies on the Helm package manager to manage and install versioned KEDA images.

Full set of configuration options is available in Kedify Agent chart values. Here are some notable options:

  • agent.features.podResourceProfilesEnabled: Enables the controller for PodResourceProfile to be started by Kedify Agent. The feature is further described on its own docs. By default, it is true.

  • agent.features.prpRequiresAnnotatedPods: If enabled, the controller for PodResourceProfile requires the target pods (where container resources should be modified) to have annotation prp.kedify.io/reconcile=true on them. This is a performance optimization so that more pod events can be ignored by the controller. Default: true.

  • agent.kedifyProxy.clusterWide: Enables the cluster-wide deployment of kedify-proxy, shared across all namespaces in the cluster. This variable should be set to true to configure a single instance of kedify-proxy in the KEDA installation namespace for centralized scaling. The cluster-wide setup is supported only for configurations using Istio’s VirtualService. For more details, see Kedify Proxy.

  • agent.kedifyProxy.globalValues: Set of options to configure kedify-proxy deployments. See Kedify Proxy helm chart for more details. This can also be fine-tuned per namespace through agent.kedifyProxy.namespacedValues.${NAMESPACE}.

The Kedify Agent uses an API key to authenticate with the Kedify platform. This key is generated by the Kedify platform and provided to the agent during installation. There could be multiple valid API keys defined per Organization.

The API key can be rotated in the Kedify Dashboard in the Organization -> API Keys section. When rotated, it is the responsibility of the user to update the API key in the Kedify Agent configuration. The key is stored in a Kubernetes Secret as a base64 encoded string.

First, run the new API key through the base64 function:

Terminal window
key="kfy_971fac53610186bc26891e08b73076c297552073f57c4c6fa6c563c6821d4384"
echo -n "$key" | base64 -w 0 ; echo ""
a2Z5Xzk3MWZhYzUzNjEwMTg2YmMyNjg5MWUwOGI3MzA3NmMyOTc1NTIwNzNmNTdjNGM2ZmE2YzU2M2M2ODIxZDQzODQ=

Then, update the API key in the Secret. Either in your gitops repository or directly in the cluster:

Terminal window
kubectl edit secret kedify-agent -n keda
apiVersion: v1
kind: Secret
type: Opaque
metadata:
name: kedify-agent
namespace: keda
data:
apikey: a2Z5Xzk3MWZhYzUzNjEwMTg2YmMyNjg5MWUwOGI3MzA3NmMyOTc1NTIwNzNmNTdjNGM2ZmE2YzU2M2M2ODIxZDQzODQ=