Access RethinkDB

MSR uses RethinkDB to persist and reproduce data across replicas. To review the internal state of MSR, you can connect directly to the RethinkDB instance that is running on an MSR replica, using either the RethinkCLI or the MSR API.

Warning

Mirantis does not support direct modifications to RethinkDB, and thus any unforeseen issues that result from doing so are solely the user’s responsibility.

Access RethinkDB with the RethinkCLI

  1. Enable external access to the RethinkDB Admin Console:

    kubectl port-forward service/msr-rethinkdb-admin 8080:8080
    
  2. Access the interactive RethinkDB Admin Console by opening http://localhost:8080 in a web browser.

  3. Query the database contents:

    • List the cluster problems as detected by the current node:

      r.db("rethinkdb").table("current_issues")
      

      Example output:

      []
      
    • List the databases that RethinkDB contains:

      r.dbList()
      

      Example output:

      [ 'dtr2',
        'jobrunner',
        'notaryserver',
        'notarysigner',
        'rethinkdb' ]
      
    • List the tables contained in the dtr2 database:

      r.db('dtr2').tableList()
      

      Example output:

      [ 'blob_links',
        'blobs',
        'client_tokens',
        'content_caches',
        'events',
        'layer_vuln_overrides',
        'manifests',
        'metrics',
        'namespace_team_access',
        'poll_mirroring_policies',
        'promotion_policies',
        'properties',
        'pruning_policies',
        'push_mirroring_policies',
        'repositories',
        'repository_team_access',
        'scanned_images',
        'scanned_layers',
        'tags',
        'user_settings',
        'webhooks' ]
      
    • List the entries contained in the repositories table:

      r.db('dtr2').table('repositories')
      

      Example output:

      [ { enableManifestLists: false,
          id: 'ac9614a8-36f4-4933-91fa-3ffed2bd259b',
          immutableTags: false,
          name: 'test-repo-1',
          namespaceAccountID: 'fc3b4aec-74a3-4ba2-8e62-daed0d1f7481',
          namespaceName: 'admin',
          pk: '3a4a79476d76698255ab505fb77c043655c599d1f5b985f859958ab72a4099d6',
          pulls: 0,
          pushes: 0,
          scanOnPush: false,
          tagLimit: 0,
          visibility: 'public' },
        { enableManifestLists: false,
          id: '9f43f029-9683-459f-97d9-665ab3ac1fda',
          immutableTags: false,
          longDescription: '',
          name: 'testing',
          namespaceAccountID: 'fc3b4aec-74a3-4ba2-8e62-daed0d1f7481',
          namespaceName: 'admin',
          pk: '6dd09ac485749619becaff1c17702ada23568ebe0a40bb74a330d058a757e0be',
          pulls: 0,
          pushes: 0,
          scanOnPush: false,
          shortDescription: '',
          tagLimit: 1,
          visibility: 'public' } ]
      

Note

Individual databases and tables are a private implementation detail that may change in MSR from version to version. You can, though, always use dbList() and tableList() to explore the contents and data structure.

Access RethinkDB with the MSR API

  1. Enable external access to the MSR API:

    kubectl port-forward service/msr 8443:443
    
  2. Review the status of your MSR cluster:

    curl -u admin:$TOKEN -X GET "https://<msr-url>/api/v0/meta/cluster_status" -H "accept: application/json"
    

    Example API response:

    {
      "rethink_system_tables": {
        "cluster_config": [
          {
            "heartbeat_timeout_secs": 10,
            "id": "heartbeat"
          }
        ],
        "current_issues": [],
        "db_config": [
          {
            "id": "339de11f-b0c2-4112-83ac-520cab68d89c",
            "name": "notaryserver"
          },
          {
            "id": "aa2e893f-a69a-463d-88c1-8102aafebebc",
            "name": "dtr2"
          },
          {
            "id": "bdf14a41-9c31-4526-8436-ab0fed00c2fd",
            "name": "jobrunner"
          },
          {
            "id": "f94f0e35-b7b1-4a2f-82be-1bdacca75039",
            "name": "notarysigner"
          }
        ],
        "server_status": [
          {
            "id": "9c41fbc6-bcf2-4fad-8960-d117f2fdb06a",
            "name": "dtr_rethinkdb_5eb9459a7832",
            "network": {
              "canonical_addresses": [
                {
                  "host": "dtr-rethinkdb-5eb9459a7832.dtr-ol",
                  "port": 29015
                }
              ],
              "cluster_port": 29015,
              "connected_to": {
                "dtr_rethinkdb_56b65e8c1404": true
              },
              "hostname": "9e83e4fee173",
              "http_admin_port": "<no http admin>",
              "reql_port": 28015,
              "time_connected": "2019-02-15T00:19:22.035Z"
            },
           }
         ...
        ]
      }
    }
    

See also

The RethinkDB documentation on RethinkDB queries