{
  "id": "deploy-control-plane",
  "title": "Deploy with Control Plane managed stores",
  "url": "https://redis.io/docs/latest/develop/ai/context-engine/agent-memory/self-managed/deploy-control-plane/",
  "summary": "Deploy Redis Agent Memory with stores managed by the self-managed Control Plane.",
  "tags": [
    "docs",
    "develop",
    "ai"
  ],
  "last_updated": "2026-07-28T14:23:48-07:00",
  "page_type": "content",
  "content_hash": "881c42549b675664126411cc0d21273b4fd0319f1b4bfcbc458dca8d4c1d9d43",
  "sections": [
    {
      "id": "overview",
      "title": "Overview",
      "role": "overview",
      "text": "Use Control Plane managed stores when operators need to create stores or agent\nkeys at runtime. In this mode, the Data Plane reads store and agent-key records\nfrom Metadata Redis.\n\nBefore you begin, review [prerequisites](https://redis.io/docs/latest/develop/ai/context-engine/agent-memory/self-managed/prerequisites)\nand create `memory-dataplane.config.yaml` from the\n[Control Plane managed stores example](https://redis.io/docs/latest/develop/ai/context-engine/agent-memory/self-managed/data-plane-configuration#control-plane-managed-stores-example)."
    },
    {
      "id": "create-the-namespace",
      "title": "Create the namespace",
      "role": "content",
      "text": "[code example]"
    },
    {
      "id": "create-shared-secrets",
      "title": "Create shared Secrets",
      "role": "content",
      "text": "Create the license Secret:\n\n[code example]\n\nCreate the Data Plane config Secret:\n\n[code example]"
    },
    {
      "id": "create-the-control-plane-config",
      "title": "Create the Control Plane config",
      "role": "content",
      "text": "Create `controlplane-onprem.config.yaml`:\n\n[code example]\n\nThe Control Plane only needs `embedding.dimensions` for Control Plane managed\nstore metadata. Configure the embedding provider, model, credentials, and\nbatching settings in the Data Plane config.\n\nCreate the Control Plane config Secret:\n\n[code example]\n\nBring your own admin token:\n\n[code example]\n\nTo read the admin token from the Secret used in this guide:\n\n[code example]"
    },
    {
      "id": "create-helm-values",
      "title": "Create Helm values",
      "role": "content",
      "text": "Create SHA-256 checksums for externally managed Secrets. These values are used\nby Helm values to roll pods after Secret changes; they are not used to validate\nSecret integrity.\n\n**Linux:**\n\n[code example]\n\n**macOS:**\n\n[code example]\n\n\n\nCreate `ram-values.yaml`:\n\n[code example]"
    },
    {
      "id": "install-the-chart",
      "title": "Install the chart",
      "role": "setup",
      "text": "Add the Helm repository when installing from the public repository:\n\n[code example]\n\nInstall with `redis-agent-memory` as the Helm release name:\n\n[code example]\n\nOn small clusters, install without `--atomic --wait`, then watch pod status:\n\n[code example]\n\nIf you want Helm to wait, set an explicit timeout that matches the environment:\n\n[code example]"
    },
    {
      "id": "verify-the-deployment",
      "title": "Verify the deployment",
      "role": "content",
      "text": "Check pods:\n\n[code example]\n\nPort-forward the Data Plane:\n\n[code example]\n\nCheck Data Plane health:\n\n[code example]\n\nPort-forward the Control Plane:\n\n[code example]\n\nVerify the admin API:\n\n[code example]\n\nFor the full self-managed admin API schema, see the\n[Control Plane API reference](https://redis.io/docs/latest/develop/ai/context-engine/agent-memory/self-managed/control-plane-api-reference).\n\nAfter you deploy Control Plane managed stores, configure Data Plane auth in\n[Authentication and authorization](https://redis.io/docs/latest/develop/ai/context-engine/agent-memory/self-managed/authentication)."
    }
  ],
  "examples": [
    {
      "id": "create-the-namespace-ex0",
      "language": "bash",
      "code": "kubectl create namespace <namespace-name>",
      "section_id": "create-the-namespace"
    },
    {
      "id": "create-shared-secrets-ex0",
      "language": "bash",
      "code": "kubectl -n <namespace-name> create secret generic ram-license \\\n  --from-file=license=./license",
      "section_id": "create-shared-secrets"
    },
    {
      "id": "create-shared-secrets-ex1",
      "language": "bash",
      "code": "kubectl -n <namespace-name> create secret generic ram-config \\\n  --from-file=memory-dataplane.config.yaml=./memory-dataplane.config.yaml",
      "section_id": "create-shared-secrets"
    },
    {
      "id": "create-the-control-plane-config-ex0",
      "language": "yaml",
      "code": "profile: prod\n\nauth:\n  type: admin-token\n  admin_token:\n    token_file: /etc/controlplane-onprem/admin/token\n\nlicense:\n  license_path: /etc/redis-agent-memory/license\n\nmetadata:\n  urls:\n    - redis://redis-meta:6379\n  namespace: iris:memory\n\nstore_db:\n  urls:\n    - redis://redis-store:6379\n\nembedding:\n  dimensions: 3072",
      "section_id": "create-the-control-plane-config"
    },
    {
      "id": "create-the-control-plane-config-ex1",
      "language": "bash",
      "code": "kubectl -n <namespace-name> create secret generic ram-controlplane-config \\\n  --from-file=controlplane-onprem.config.yaml=./controlplane-onprem.config.yaml",
      "section_id": "create-the-control-plane-config"
    },
    {
      "id": "create-the-control-plane-config-ex2",
      "language": "bash",
      "code": "kubectl -n <namespace-name> create secret generic ram-controlplane-admin-token \\\n  --from-literal=token='<admin-token>'",
      "section_id": "create-the-control-plane-config"
    },
    {
      "id": "create-the-control-plane-config-ex3",
      "language": "bash",
      "code": "kubectl -n <namespace-name> get secret \\\n  ram-controlplane-admin-token \\\n  -o jsonpath=\"{.data.token}\" | base64 -d",
      "section_id": "create-the-control-plane-config"
    },
    {
      "id": "create-helm-values-ex0",
      "language": "bash",
      "code": "LICENSE_CHECKSUM=\"$(sha256sum ./license | awk '{print $1}')\"\nCONFIG_CHECKSUM=\"$(sha256sum ./memory-dataplane.config.yaml | awk '{print $1}')\"\nCONTROLPLANE_CONFIG_CHECKSUM=\"$(sha256sum ./controlplane-onprem.config.yaml | awk '{print $1}')\"",
      "section_id": "create-helm-values"
    },
    {
      "id": "create-helm-values-ex1",
      "language": "bash",
      "code": "LICENSE_CHECKSUM=\"$(shasum -a 256 ./license | awk '{print $1}')\"\nCONFIG_CHECKSUM=\"$(shasum -a 256 ./memory-dataplane.config.yaml | awk '{print $1}')\"\nCONTROLPLANE_CONFIG_CHECKSUM=\"$(shasum -a 256 ./controlplane-onprem.config.yaml | awk '{print $1}')\"",
      "section_id": "create-helm-values"
    },
    {
      "id": "create-helm-values-ex2",
      "language": "yaml",
      "code": "license:\n  existingSecret: ram-license\n  existingSecretChecksum: \"<license-checksum>\"\n\nconfig:\n  existingSecret: ram-config\n  existingSecretChecksum: \"<config-checksum>\"\n\nimage:\n  repository: redislabs/agent-memory\n  tag: \"<ram-version>\"\n\ncontrolplane:\n  enabled: true\n  image:\n    repository: redislabs/agent-memory-control-plane\n    tag: \"<ram-version>\"\n  config:\n    existingSecret: ram-controlplane-config\n    existingSecretChecksum: \"<controlplane-config-checksum>\"\n  adminToken:\n    existingSecret: ram-controlplane-admin-token\n    secretKey: token\n    autoGenerate: false",
      "section_id": "create-helm-values"
    },
    {
      "id": "install-the-chart-ex0",
      "language": "bash",
      "code": "helm repo add redis-ai https://helm.redis.io/ai\nhelm repo update redis-ai\nhelm search repo redis-ai/redis-agent-memory --versions",
      "section_id": "install-the-chart"
    },
    {
      "id": "install-the-chart-ex1",
      "language": "bash",
      "code": "helm install redis-agent-memory redis-ai/redis-agent-memory \\\n  --version <chart-version> \\\n  --namespace <namespace-name> \\\n  --create-namespace \\\n  -f ram-values.yaml",
      "section_id": "install-the-chart"
    },
    {
      "id": "install-the-chart-ex2",
      "language": "bash",
      "code": "kubectl -n <namespace-name> get pods -w",
      "section_id": "install-the-chart"
    },
    {
      "id": "install-the-chart-ex3",
      "language": "bash",
      "code": "helm install redis-agent-memory redis-ai/redis-agent-memory \\\n  --version <chart-version> \\\n  --namespace <namespace-name> \\\n  --create-namespace \\\n  -f ram-values.yaml \\\n  --wait \\\n  --timeout 15m",
      "section_id": "install-the-chart"
    },
    {
      "id": "verify-the-deployment-ex0",
      "language": "bash",
      "code": "kubectl -n <namespace-name> get pods -l app.kubernetes.io/name=redis-agent-memory",
      "section_id": "verify-the-deployment"
    },
    {
      "id": "verify-the-deployment-ex1",
      "language": "bash",
      "code": "kubectl -n <namespace-name> port-forward svc/redis-agent-memory 9000:9000",
      "section_id": "verify-the-deployment"
    },
    {
      "id": "verify-the-deployment-ex2",
      "language": "bash",
      "code": "curl http://localhost:9000/health\ncurl http://localhost:9000/health/liveness\ncurl http://localhost:9000/health/readiness",
      "section_id": "verify-the-deployment"
    },
    {
      "id": "verify-the-deployment-ex3",
      "language": "bash",
      "code": "kubectl -n <namespace-name> port-forward svc/redis-agent-memory-controlplane 9100:9100",
      "section_id": "verify-the-deployment"
    },
    {
      "id": "verify-the-deployment-ex4",
      "language": "bash",
      "code": "curl -H \"Authorization: Bearer <admin-token>\" \\\n  http://localhost:9100/v1/stores",
      "section_id": "verify-the-deployment"
    }
  ]
}
