{
  "schema_version": 2,
  "id": "operate/redisinsight/install/install-on-k8s",
  "title": "Install on Kubernetes",
  "url": "https://redis.io/docs/latest/operate/redisinsight/install/install-on-k8s/",
  "summary": "How to install Redis Insight on Kubernetes",
  "aliases": [
    "/operate/oss_and_stack/install/install-redis-insight/install-on-k8s/"
  ],
  "tags": [
    "docs",
    "operate",
    "redisinsight"
  ],
  "last_updated": "2026-10-05T16:11:44+01:00",
  "page_type": "content",
  "content_hash": "8efde69913eddf7c660bcdc858b4e61e45dfe3ce2477086e19d45738f1307c75",
  "sections": [
    {
      "id": "overview",
      "title": "Overview",
      "role": "overview",
      "text": "This tutorial shows how to install Redis Insight on [Kubernetes](https://kubernetes.io/) (K8s).\nThis is an easy way to use Redis Insight with a [Redis Enterprise K8s deployment](https://redis.io/docs/latest/operate/kubernetes/)."
    },
    {
      "id": "create-the-redis-insight-deployment-and-service",
      "title": "Create the Redis Insight deployment and service",
      "role": "content",
      "text": "Below is an annotated YAML file that will create a Redis Insight\ndeployment and a service in a K8s cluster.\n\n1. Create a new file named `redisinsight.yaml` with the content below.\n\n[code example]\n\n2. Create the Redis Insight deployment and service:\n\n[code example]\n\n3. Once the deployment and service are successfully applied and complete, access Redis Insight. This can be accomplished by using the `<external-ip>` of the service we created to reach Redis Insight.\n\n[code example]\n\n4. If you are using minikube, run `minikube list` to list the service and access Redis Insight at `http://<minikube-ip>:<minikube-service-port>`.\n[code example]"
    },
    {
      "id": "create-the-redis-insight-deployment-with-persistant-storage",
      "title": "Create the Redis Insight deployment with persistant storage",
      "role": "content",
      "text": "Below is an annotated YAML file that will create a Redis Insight\ndeployment in a K8s cluster. It will assign a peristent volume created from a volume claim template.\nWrite access to the container is configured in an init container. When using deployments\nwith persistent writeable volumes, it's best to set the strategy to `Recreate`. Otherwise you may find yourself\nwith two pods trying to use the same volume.\n\n1. Create a new file `redisinsight.yaml` with the content below.\n\n[code example]\n\n2. Create the Redis Insight deployment and service.\n\n[code example]"
    },
    {
      "id": "create-the-redis-insight-deployment-without-a-service",
      "title": "Create the Redis Insight deployment without a service.",
      "role": "content",
      "text": "Below is an annotated YAML file that will create a Redis Insight\ndeployment in a K8s cluster.\n\n1. Create a new file redisinsight.yaml with the content below\n\n[code example]\n\n2. Create the Redis Insight deployment\n\n[code example]\n\n> [!NOTE]\n> If the deployment will be exposed by a service whose name is 'redisinsight', set `RI_APP_HOST` and `RI_APP_PORT` environment variables to override the environment variables created by the service."
    },
    {
      "id": "run-redis-insight",
      "title": "Run Redis Insight",
      "role": "content",
      "text": "Once the deployment has been successfully applied and the deployment is complete, access Redis Insight. This can be accomplished by exposing the deployment as a K8s Service or by using port forwarding, as in the example below:\n\n[code example]\n\nOpen your browser and point to <http://localhost:5540>"
    }
  ],
  "examples": [
    {
      "id": "create-the-redis-insight-deployment-and-service-ex0",
      "language": "yaml",
      "code": "# Redis Insight service with name 'redisinsight-service'\napiVersion: v1\nkind: Service\nmetadata:\n  name: redisinsight-service       # name should not be 'redisinsight'\n                                   # since the service creates\n                                   # environment variables that\n                                   # conflicts with redisinsight\n                                   # application's environment\n                                   # variables `RI_APP_HOST` and\n                                   # `RI_APP_PORT`\nspec:\n  type: LoadBalancer\n  ports:\n    - port: 80\n      targetPort: 5540\n  selector:\n    app: redisinsight\n---\n# Redis Insight deployment with name 'redisinsight'\napiVersion: apps/v1\nkind: Deployment\nmetadata:\n  name: redisinsight #deployment name\n  labels:\n    app: redisinsight #deployment label\nspec:\n  replicas: 1 #a single replica pod\n  selector:\n    matchLabels:\n      app: redisinsight #which pods is the deployment managing, as defined by the pod template\n  template: #pod template\n    metadata:\n      labels:\n        app: redisinsight #label for pod/s\n    spec:\n      containers:\n\n      - name:  redisinsight #Container name (DNS_LABEL, unique)\n        image: redis/redisinsight:latest #repo/image\n        imagePullPolicy: IfNotPresent #Installs the latest Redis Insight version\n        volumeMounts:\n        - name: redisinsight #Pod volumes to mount into the container's filesystem. Cannot be updated.\n          mountPath: /data\n        ports:\n        - containerPort: 5540 #exposed container port and protocol\n          protocol: TCP\n      volumes:\n      - name: redisinsight\n        emptyDir: {} # node-ephemeral volume https://kubernetes.io/docs/concepts/storage/volumes/#emptydir",
      "section_id": "create-the-redis-insight-deployment-and-service"
    },
    {
      "id": "create-the-redis-insight-deployment-and-service-ex1",
      "language": "sh",
      "code": "kubectl apply -f redisinsight.yaml",
      "section_id": "create-the-redis-insight-deployment-and-service"
    },
    {
      "id": "create-the-redis-insight-deployment-and-service-ex2",
      "language": "sh",
      "code": "$ kubectl get svc redisinsight-service\nNAME                   CLUSTER-IP       EXTERNAL-IP      PORT(S)         AGE\nredisinsight-service   <cluster-ip>     <external-ip>    80:32143/TCP    1m",
      "section_id": "create-the-redis-insight-deployment-and-service"
    },
    {
      "id": "create-the-redis-insight-deployment-and-service-ex3",
      "language": "plaintext",
      "code": "$ minikube list\n|-------------|----------------------|--------------|---------------------------------------------|\n|  NAMESPACE  |         NAME         | TARGET PORT  |           URL                               |\n|-------------|----------------------|--------------|---------------------------------------------|\n| default     | kubernetes           | No node port |                                             |\n| default     | redisinsight-service |           80 | http://<minikube-ip>:<minikubeservice-port> |\n| kube-system | kube-dns             | No node port |                                             |\n|-------------|----------------------|--------------|---------------------------------------------|",
      "section_id": "create-the-redis-insight-deployment-and-service"
    },
    {
      "id": "create-the-redis-insight-deployment-with-persistant-storage-ex0",
      "language": "yaml",
      "code": "# Redis Insight service with name 'redisinsight-service'\napiVersion: v1\nkind: Service\nmetadata:\n  name: redisinsight-service       # name should not be 'redisinsight'\n                                   # since the service creates\n                                   # environment variables that\n                                   # conflicts with redisinsight\n                                   # application's environment\n                                   # variables `RI_APP_HOST` and\n                                   # `RI_APP_PORT`\nspec:\n  type: LoadBalancer\n  ports:\n    - port: 80\n      targetPort: 5540\n  selector:\n    app: redisinsight\n---\napiVersion: v1\nkind: PersistentVolumeClaim\nmetadata:\n  name: redisinsight-pv-claim\n  labels:\n    app: redisinsight\nspec:\n  accessModes:\n    - ReadWriteOnce\n  resources:\n    requests:\n      storage: 2Gi\n  storageClassName: default\n---\n# Redis Insight deployment with name 'redisinsight'\napiVersion: apps/v1\nkind: Deployment\nmetadata:\n  name: redisinsight #deployment name\n  labels:\n    app: redisinsight #deployment label\nspec:\n  replicas: 1 #a single replica pod\n  strategy:\n    type: Recreate\n  selector:\n    matchLabels:\n      app: redisinsight #which pods is the deployment managing, as defined by the pod template\n  template: #pod template\n    metadata:\n      labels:\n        app: redisinsight #label for pod/s\n    spec:\n      volumes:\n        - name: redisinsight\n          persistentVolumeClaim:\n            claimName: redisinsight-pv-claim\n      initContainers:\n        - name: init\n          image: busybox\n          command:\n            - /bin/sh\n            - '-c'\n            - |\n              chown -R 1000 /data\n          resources: {}\n          volumeMounts:\n            - name: redisinsight\n              mountPath: /data\n          terminationMessagePath: /dev/termination-log\n          terminationMessagePolicy: File\n      containers:\n        - name:  redisinsight #Container name (DNS_LABEL, unique)\n          image: redis/redisinsight:latest #repo/image\n          imagePullPolicy: IfNotPresent #Always pull image\n          volumeMounts:\n          - name: redisinsight #Pod volumes to mount into the container's filesystem. Cannot be updated.\n            mountPath: /data\n          ports:\n          - containerPort: 5540 #exposed container port and protocol\n            protocol: TCP",
      "section_id": "create-the-redis-insight-deployment-with-persistant-storage"
    },
    {
      "id": "create-the-redis-insight-deployment-with-persistant-storage-ex1",
      "language": "sh",
      "code": "kubectl apply -f redisinsight.yaml",
      "section_id": "create-the-redis-insight-deployment-with-persistant-storage"
    },
    {
      "id": "create-the-redis-insight-deployment-without-a-service-ex0",
      "language": "yaml",
      "code": "apiVersion: apps/v1\nkind: Deployment\nmetadata:\n  name: redisinsight # deployment name\n  labels:\n    app: redisinsight # deployment label\nspec:\n  replicas: 1 # a single replica pod\n  selector:\n    matchLabels:\n      app: redisinsight # which pods is the deployment managing, as defined by the pod template\n  template: # pod template\n    metadata:\n      labels:\n        app: redisinsight # label for pod/s\n    spec:\n      containers:\n      - name: redisinsight # Container name (DNS_LABEL, unique)\n        image: redis/redisinsight:latest # repo/image\n        imagePullPolicy: IfNotPresent # Always pull image\n        env:\n          # If there's a service named 'redisinsight' that exposes the\n          # deployment, we manually set `RI_APP_HOST` and\n          # `RI_APP_PORT` to override the service environment\n          # variables.\n          - name: RI_APP_HOST\n            value: \"0.0.0.0\"\n          - name: RI_APP_PORT\n            value: \"5540\"\n        volumeMounts:\n        - name: redisinsight # Pod volumes to mount into the container's filesystem. Cannot be updated.\n          mountPath: /data\n        ports:\n        - containerPort: 5540 # exposed container port and protocol\n          protocol: TCP\n        livenessProbe: # Probe to check container health\n          httpGet:\n            path: /api/health/ # exposed RI endpoint for healthcheck\n            port: 5540 # exposed container port\n          initialDelaySeconds: 5 # number of seconds to wait after the container starts to perform liveness probe\n          periodSeconds: 5 # period in seconds after which liveness probe is performed\n          failureThreshold: 1 # number of liveness probe failures after which container restarts\n      volumes:\n      - name: redisinsight\n        emptyDir: {} # node-ephemeral volume https://kubernetes.io/docs/concepts/storage/volumes/#emptydir",
      "section_id": "create-the-redis-insight-deployment-without-a-service"
    },
    {
      "id": "create-the-redis-insight-deployment-without-a-service-ex1",
      "language": "sh",
      "code": "kubectl apply -f redisinsight.yaml",
      "section_id": "create-the-redis-insight-deployment-without-a-service"
    },
    {
      "id": "run-redis-insight-ex0",
      "language": "sh",
      "code": "kubectl port-forward deployment/redisinsight 5540",
      "section_id": "run-redis-insight"
    }
  ]
}
