Dedicate a Node to the Controller

The Controller functions as a single-instance service with a single global access point. Horizontal scaling remains unavailable. Dedicate a Virtual Appliance node to the Controller to optimize performance. A dedicated Controller node provides these benefits:
  • Service isolation: Separates the Controller from control-plane, MySQL, DIS, EUM, ingress, and other services.

  • Unified updates: Synchronizes updates for pod CPU, pod memory, and JVM heap.

  • Memory management: Maintains JVM heap below the pod memory limit to reserve space for direct memory, metaspace, thread stacks, and native process overhead.

You can can dedicate a node only on standard deployment because hybrid deployments have an external Controller.

Complete the following checks before dedicating a node to the Controller:
  • Run the commands as the appduser user from a Virtual Appliance node that has access to appdcli, Kubernetes, and the deployment configuration.

  • Identify a target node by Kubernetes node name or internal IP address.
  • Verify that the target node has joined the cluster, reports Ready, and remains schedulable.
  • Verify that non-Controller pod requests leave enough CPU and memory for the calculated Controller allocation. The calculated limits must equal or exceed the current Controller limits.
    CODE
    kubectl get nodes -o wide
    kubectl describe node <node-name>
    kubectl get pods -A -o wide --field-selector spec.nodeName=<node-name>
CAUTION: Do not run this command during a Virtual Appliance cluster upgrade or concurrently with another Helm operation.
  1. Log in to the cluster node that has access to appdcli and Helm.
  2. Run the following command to dedicate a node for Controller.
    CODE
    appdcli platform dedicate-node --service controller --node <node-name-or-internal-ip>
    Sample Output:
    CODE
    Updated controller dedicated-node state in /var/appd/config/scaling-overlay.yaml.gotmpl
    Service: controller
    Node: node-4 (10.0.0.4)
    Controller CPU: 10400m request / 10400m limit
    Controller memory: 41Gi request / 41Gi limit
    Controller JVM: Xms=27648m Xmx=27648m
    Using install profile: medium
    Controller Helmfile sync completed in 6m 18s
    Controller readiness monitoring continues in background. Detailed log:
    /home/appduser/appdcli_dedicate_controller_output.log
    To follow progress: tail -f /home/appduser/appdcli_dedicate_controller_output.log
  3. Optional: Run this command to follow progress:
    CODE
    tail -f /home/appduser/appdcli_dedicate_controller_output.log
    Wait for a message that begins with controller endpoint ready and includes endpoint_available=true
    Trouble: If the log reports a timeout, run appdcli platform controller-info and contact Support with the command output and readiness log.
    .
  4. Verify the Controller, pod and endpoint status:
    CODE
    appdcli platform controller-info
    kubectl get pods -n cisco-controller -o wide
    curl -ksS https://<dnsDomain>/controller/rest/serverstatus
After all success criteria pass, the Controller runs with dedicated placement on the selected node.