******************************** Managing Snapshots ******************************** **Application Snapshots** An application **snapshot** is a reference marker for an application at a particular point in time. It contains a copy of the application's data plus the application's current state. Snapshots provide a safeguard against application data corruption. For example, if key application data is accidentally deleted, a snapshot can be used to revert (roll back) the app to a point in time before the deletion occurred. Taking snapshots of storage volumes has existed for decades in the industry. However, when an application is distributed and/or uses multiple storage volumes across one or more pods, orchestrating storage-only snapshots across all of them is tedious, error-prone and inconsistent. Storage-only snapshots are also unaware of the application configuration and its topology, which makes cloning, backing up or restoring cumbersome and prone to misconfiguration. Robin allows creating application-consistent snapshots of an entire application, which capture: (1) The entire application topology and its configuration (i.e., specs of Pod, Service, StatefulSet, Secrets, ConfigMaps, etc) (2) Snapshots of all data volumes (PersistentVolumeClaims) Robin snapshots at the storage layer use redirect-on-write, which means that snapshots can be taken in less than a second even for terabyte sized data volumes. Because only the changed blocks are tracked between snapshots, Robin snapshots are very space efficient. **Namespace Snapshots** Namespace based snapshots share many of the same features as application based snapshots but differ in the sense they are a snapshot of an entire namespace and all the Kubernetes objects within it. More details on namespace based snapshots can be found `here `_. **Topics covered in this chapter:** =========================== ==================================================== ``robin snapshot create`` Snapshot an entire application (data and metadata) ``robin snapshot delete`` Delete the snapshot of an application or namespace ``robin snapshot restore`` Restore a snapshot from a backup copy stored on an external storage repository ``robin snapshot list`` List snapshots for one or more applications/namespaces ``robin snapshot info`` Show detailed information about a specific snapshot =========================== ==================================================== ------------------------------ Create an Application Snapshot ------------------------------ .. tabs:: .. tab:: CLI An application snapshot is created using this command: .. code-block:: text # robin snapshot create =============== ============================================================ ``snapname`` A name that would be assigned to the snapshot being taken ``app_name`` Name of the application being snapshotted =============== ============================================================ **Example:** .. code-block:: text # robin snapshot create mysql3 --wait Job: 331 Name: ApplicationSnapshot State: VALIDATED Error: 0 Job: 331 Name: ApplicationSnapshot State: WAITING Error: 0 Job: 331 Name: ApplicationSnapshot State: COMPLETED Error: 0 # robin snapshot list --app mysql3 +----------------------------------+--------+----------+----------+----------------------------+ | Snapshot ID | State | App Name | App Kind | Snapshot name | +----------------------------------+--------+----------+----------+----------------------------+ | b6033a5a4d6a11eab805255c7aa2236e | ONLINE | mysql3 | ROBIN | mysql3_snapshot-1581493122 | +----------------------------------+--------+----------+----------+----------------------------+ .. tab:: API Creates an application snapshot. **End Point:** /api/v3/robin_server/apps/ **Method:** PUT **URL Parameters:** None **Data Parameters:** - ``action: snapshot`` - This mandatory field within the payload specifies the snapshot operation is to be performed. - ``snapname: `` - This mandatory field within the payload specifies the name of the snapshot. - ``quiesce: `` - Utilizing this parameter by specifiying a comma seperated list of quiesce options results in them being exercised in order to acheive a consistent application state. Valid values include: 'fs', 'container' and 'all'. Note this option is only valid for ROBIN applications. **Port:** RCM Port (default value is 29442) **Headers:** - ``Authorization: `` : Authorization token to identify which user is sending the request. The token can be acquired from the login API. **Success Response Code:** 202 **Error Response Code:** 500 (Internal Server Error), 404 (Not Found Error), 401 (Unauthorized Error), 400 (Invalid Api Usage Error) **Example Response:** .. raw:: html
Output .. code-block:: text { "jobid":275, "plan":{ "kind":"robin", "quiesce":[ "fs" ], "original_app_tenant":1, "snapname":"snap1", "action":"snapshot", "original_app_owner":3, "opcode":8, "current_user":{ "session_expires":"2020-09-10T10:40:27", "tenant_id":1, "tenant":"Administrators", "user_capabilities":[ "AllSuperAdminCapabilities" ], "user_contexts":[ "robin" ], "username":"robin", "user_permissions":{ }, "tenant_role":"superadmin", "user_context":"robin", "tenants":[ "Administrators" ], "user_id":3, "namespace":"t001-u000003", "ip_addr":"172.17.0.1" }, "namespace":"t001-u000003", "name":"custom-labels-app" } } .. raw:: html
------------------------------------------------------ Configuring snapshot schedules and retention policies ------------------------------------------------------ For application-based snapshot schedules, review the section detailed `here `_. More specifically, review the details of the command ``robin app snapshot-schedule``. On the other hand, for namespace-based snapshot schedules review the section detailed `here `_ and review the details of the command ``robin namespace snapshot-schedule``. ------------------------------ Delete a Snapshot ------------------------------ .. tabs:: .. tab:: CLI In order to delete an application or namespace based snapshot, issue the following command: .. code-block:: text # robin snapshot delete ==================== =================================================================================== ``snapshotid`` Unique ID of the snapshot (obtained from the output of ``robin snapshot list``) ==================== =================================================================================== **Example:** .. code-block:: text # robin snapshot list --app mysql3 +----------------------------------+--------+----------+----------+----------------------------+ | Snapshot ID | State | App Name | App Kind | Snapshot name | +----------------------------------+--------+----------+----------+----------------------------+ | b6033a5a4d6a11eab805255c7aa2236e | ONLINE | mysql3 | ROBIN | mysql3_snapshot-1581493122 | +----------------------------------+--------+----------+----------+----------------------------+ # robin snapshot delete b6033a5a4d6a11eab805255c7aa2236e --wait Job: 330 Name: ApplicationDelete State: VALIDATED Error: 0 Job: 330 Name: ApplicationDelete State: COMPLETED Error: 0 # robin snapshot list --app mysql3 +-------------+--------+----------+----------+---------------+ | Snapshot ID | State | App Name | App Kind | Snapshot name | +-------------+--------+----------+----------+---------------+ +-------------+--------+----------+----------+---------------+ .. tab:: API Delete an application snapshot from a Robin CNS cluster **End Point:** /api/v6/robin_server/apps/?objtype=snapshot **Method:** DELETE **URL Parameters:** None **Data Parameters:** None **Port:** RCM Port (default value is 29442) **Headers:** - ``Authorization: `` : Authorization token to identify which user is sending the request. The token can be acquired from the login API. **Success Response Code:** 202 **Error Response Code:** 500 (Internal Server Error), 404 (Not Found Error), 401 (Unauthorized Error), 400 (Invalid Api Usage Error) **Example Response:** .. raw:: html
Output .. code-block:: text { "plan":{ "version":"1.15.8", "pvcpolicy":"create", "roles":[ { "display_name":"nginx", "serviceAccountName":"{{app['name'].lower()}}-sa", "scaleout":"enabled", "name":"nginx", "restart_on_qoscfg":true, "vnodes":[ { "allocated_initContainers":[ { "volumeMounts":[ { "mountPath":"\/cm1", "name":"vol-cm1" }, { "mountPath":"\/cm2", "name":"vol-cm2" }, { "mountPath":"\/cm3", "name":"vol-cm3" } ], "name":"init", "securityContext":{ "allowPrivilegeEscalation":true }, "resources":{ "limits":{ "memory":"128Mi", "cpu":"25m" } }, "imagePullPolicy":"IfNotPresent", "image":"k8s.gcr.io\/busybox", "command":[ "sleep", "1" ] } ], "k8s_provider":"robin", "bundle_object_id":"a9f229864a74f936047b1b005de391a8", "allocated_volumeMounts":[ { "mountPath":"\/cm1", "name":"vol-cm1" }, { "mountPath":"\/cm2", "name":"vol-cm2" }, { "mountPath":"\/cm3", "name":"vol-cm3" } ], "mem":{ "hugepages_2m":0, "hugepages_1g":0, "size":1283457024 }, "restart_num":15, "bundle_path":"\/usr\/local\/robin\/collections\/file-collection-1597953097832\/1597953155269\/nginx-1.0", "root_fs":"\/usr\/local\/robin\/instances\/demo-nginx-01.t001-u000003.svc.cluster.local", "pod_name":"demo-nginx-01", "appid":13, "host_ip":"172.21.20.104", "volumes":[ { "name":"vol-cm1", "configMap":{ "defaultMode":420, "name":"{{app['name'].lower()}}-cm1" } }, { "name":"vol-cm2", "configMap":{ "defaultMode":420, "name":"{{app['name'].lower()}}-cm2" } }, { "name":"vol-cm3", "configMap":{ "defaultMode":420, "name":"{{app['name'].lower()}}-cm3" } } ], "service_uids":[ "8de44f8e-fec0-47ee-b425-970758749188", "3ca02e11-24b9-4555-8386-4f1b0e5e44fc", "d273da82-86c3-4be6-9b29-1b930bece779" ], "appname":"demo", "restart_on_qoscfg":true, "env":{ "allocated":{ "ROBINHOST_TAG_ROBINRPOOL":"default", "ROBINHOST_TAG_KUBERNETES.IO-OS":"linux", "POD_NS":"t001-u000003", "POD_NAME":"demo-nginx-01", "K8S_NODE":"cscale-82-140", "ROBINHOST":"cscale-82-140.robinsystems.com", "ROBINHOST_TAG_KUBERNETES.IO-ARCH":"amd64" } }, "serviceAccountName":"{{app['name'].lower()}}-sa", "initContainers":[ { "volumeMounts":[ { "mountPath":"\/cm1", "name":"vol-cm1" }, { "mountPath":"\/cm2", "name":"vol-cm2" }, { "mountPath":"\/cm3", "name":"vol-cm3" } ], "name":"init", "securityContext":{ "allowPrivilegeEscalation":true }, "resources":{ "limits":{ "memory":"128Mi", "cpu":"25m" } }, "imagePullPolicy":"IfNotPresent", "image":"k8s.gcr.io\/busybox", "command":[ "sleep", "1" ] } ], "enable_hooklogs":true, "vnodeid":13, "allocated_volumes":[ { "name":"vol-cm1", "configMap":{ "defaultMode":420, "name":"demo-cm1" } }, { "name":"vol-cm2", "configMap":{ "defaultMode":420, "name":"demo-cm2" } }, { "name":"vol-cm3", "configMap":{ "defaultMode":420, "name":"demo-cm3" } } ], "volume_groups":[ { "rpoolid":1, "name":"demo.nginx.01.72.1.9457505a-dcf2-4f0c-b416-9467c10342d7", "media":"HDD", "stormgr_id":6, "layout":"round-robin", "replicas":1, "volumes":[ "demo.nginx.01.data.1.68f51300-c283-4df7-bd9e-43d7314e1a42" ], "device_sets":[ { "devices":[ { "host":"cscale-82-140.robinsystems.com", "tags":{ }, "wwn":"0x600224803bcdafde95b1f5cd27ceb5fb", "hostname":"cscale-82-140.robinsystems.com", "max_volumes_per_disk":10, "stormgr_id":2, "slices":77, "score":73, "type":"HDD", "devpath":"\/dev\/disk\/by-id\/scsi-3600224803bcdafde95b1f5cd27ceb5fb", "allocated_slices":24, "max_latency_sensitive_vols_per_disk":2, "write_unit":4096, "psize":107374182400, "reattachable":0, "pused":1107296256, "max_throughput_intensive_vols_per_disk":1, "protected":0, "role":"Storage", "aslices":50, "state":"READY", "capacity":107374182400 } ], "name":"demo.nginx.01.72.1.9457505a-dcf2-4f0c-b416-9467c10342d7.0.a6cab386-2774-46d1-ad51-7a0f11fcdb35", "stormgr_id":6 } ] } ], "gpu":{ "min":0, "max":0 }, "bundleid":1, "engine":"docker", "annotations":{ "annokey1":"annovalue1", "allocated":{ "annokey1":"annovalue1", "annokey2":"annovalue2" }, "annokey2":"annovalue2" }, "ctime":1598453564, "podSecurityContext":{ "runAsUser":0, "allocated":{ "runAsUser":0 } }, "hosttags":{ "robin.io\/robinrpool":[ "default" ], "kubernetes.io\/arch":[ "amd64" ], "kubernetes.io\/os":[ "linux" ] }, "allocated_host":"cscale-82-140.robinsystems.com", "calico_inuse":true, "image":{ "version":"1.15.8-alpine", "registry_hostname":"", "name":"nginx", "engine":"docker", "registry_port":"" }, "hostAliases":[ { "hostnames":[ "foo.remote", "bar.remote" ], "ip":"1.2.3.4" } ], "readinessProbe":{ "exec":{ "command":[ "sleep", "1" ] }, "initialDelaySeconds":5, "allocated":{ "exec":{ "command":[ "sleep", "1" ] }, "initialDelaySeconds":5 } }, "rpoolid":1, "role":"nginx", "livenessProbe":{ "allocated":{ "periodSeconds":3, "httpGet":{ "path":"\/", "httpHeaders":[ { "value":"Awesome", "name":"Custom-Header" } ], "port":80 }, "initialDelaySeconds":3 }, "periodSeconds":3, "httpGet":{ "path":"\/", "httpHeaders":[ { "value":"Awesome", "name":"Custom-Header" } ], "port":80 }, "initialDelaySeconds":3 }, "utime":1598453564, "volumeMounts":[ { "mountPath":"\/cm1", "name":"vol-cm1" }, { "mountPath":"\/cm2", "name":"vol-cm2" }, { "mountPath":"\/cm3", "name":"vol-cm3" } ], "hostname":"demo-nginx-01.t001-u000003.svc.cluster.local", "name":"demo.nginx.01", "numa_allocations":{ "0":{ "gpu_used":0, "isol_shared_cores_used":0, "isol_dedicated_cores_used":0, "hugepages_1g_used":0, "hugepages_2m_used":0, "mem_used":1283457024, "non_isol_cores_used":1 } }, "sidecars":[ { "volumeMounts":[ { "mountPath":"\/cm1", "name":"vol-cm1" }, { "mountPath":"\/cm2", "name":"vol-cm2" }, { "mountPath":"\/cm3", "name":"vol-cm3" } ], "name":"busyside1", "securityContext":{ "allowPrivilegeEscalation":true }, "resources":{ "requests":{ "memory":"100Mi" }, "limits":{ "memory":"200Mi" } }, "image":"k8s.gcr.io\/busybox", "command":[ "sleep", "3000" ] } ], "storage":[ { "faultdomain":"host", "pvcpolicy":"create", "compression":"disabled", "vol_ns":"t001-u000003", "snapname":"snap1", "lvm_vol_count":"0", "replication":1, "name":"demo.nginx.01.data.1.68f51300-c283-4df7-bd9e-43d7314e1a42", "blocksize":4096, "workload":0, "protection":0, "type":"data", "k8s_name":"demo-nginx-01-data-1-68f51300", "volgrp_name":"demo.nginx.01.72.1.9457505a-dcf2-4f0c-b416-9467c10342d7", "stordriver":{ "faultdomain":"host", "protection":0, "type":"das", "media":"HDD" }, "lvm_type":"None", "snapshot_space_limit":4294967296, "layout":"round-robin", "encryption":"none", "disk_tags":{ }, "mount_in_sidecars":true, "allocated":{ "qgroupid":5, "multinode_mounting":false, "compression":0, "genkey":1598453534287911, "priority":2, "snapname":"snap1", "vtype":0, "replication":1, "current_snapshotid":1, "name":"demo.nginx.01.data.1.68f51300-c283-4df7-bd9e-43d7314e1a42", "params":{ }, "protection":0, "appid":1, "appname":"default", "snapshot_space_limit":4294967296, "stordriver":{ "faultdomain":"host", "protection":0, "type":"das", "media":"HDD" }, "block_size":4096, "partitions":0, "current_snapshot":"active_snap", "grpid":6, "next_snapshotid":2, "next_backupid":1, "media":72, "size":21474836480, "slice_size":1073741824, "volumeid":"6", "resource_poolid":1 }, "snap_reserved":20, "media":"HDD", "mount_in_initcontainers":true, "path":"\/opt\/data", "fstype":"ext4", "size":21474836480 } ], "labels":{ "labelkey2":"labelvalue2", "allocated":{ "labelkey2":"labelvalue2", "labelkey1":"labelvalue1" }, "labelkey1":"labelvalue1" }, "allocated_host_type":"physical", "enable_metrics":true, "pod_ns":"t001-u000003", "allocated_host_public_ip":"10.9.82.140", "enable_portmapping":true, "vnodehookargs":{ }, "cpu":{ "reserve":false, "min":0, "max":1 }, "allocated_host_public_hostname":"cscale-82-140.robinsystems.com", "allocated_sidecars":[ { "volumeMounts":[ { "mountPath":"\/cm1", "name":"vol-cm1" }, { "mountPath":"\/cm2", "name":"vol-cm2" }, { "mountPath":"\/cm3", "name":"vol-cm3" } ], "name":"busyside1", "securityContext":{ "allowPrivilegeEscalation":true }, "resources":{ "requests":{ "memory":"100Mi" }, "limits":{ "memory":"200Mi" } }, "image":"k8s.gcr.io\/busybox", "command":[ "sleep", "3000" ] } ], "cm_keys":[ "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCULUZ7abTGyeGhxSuXejf0VohBrk2ndhAQj0mx8whbs\/qyJmVmzenvGUVGGXSfri7m3PE++2V0xMathKizVpjcrWXoFTNZLlJKBVWog5XaCYIYRswAlow+rQU6aKJ+lP2DlUgmpZ9iG9VCae0vt+JosC2LeIDmgNm5vD6AN0aB\/rKHeQjCiJyvr90d9MbQ\/JAsh+\/1EkA4fTuTXRstlMH86gB+7JhAeCROIBz32Y7HV8hKf0SQx2fj2XFeQsRcZm8oC8n1En87qBXk+iz3qKkZBduNDp8XnKWFvhsKDQkuWGr1jUNp1SyaqNSFFZrv+EyFC1sHoORuJwAwYp8DLwyF root@cscale-82-140" ], "role_name":"nginx", "allocated":{ "zonename":"default", "nodeid":1, "nodename":"cscale-82-140", "zoneid":1597969746 }, "allocated_serviceAccountName":"demo-sa", "securityContext":{ "allowPrivilegeEscalation":true, "allocated":{ "allowPrivilegeEscalation":true } }, "network":[ { "allocated_names":[ "eth0" ], "interfaces":1, "allocated_netmask":"255.255.0.0", "name":"robin-default", "ippool":"robin-default", "allocated_ip":"172.21.20.104", "driver":"calico", "subnet":"172.21.0.0", "allocated_by":"system", "allocated_prefix":16 } ], "sidecar_info":{ "containers":[ { "hugepages_2m":0, "name":"busyside1", "cpu":0, "mem":209715200, "gpu":0, "hugepages_1g":0 } ], "hugepages_2m":0, "cpu":0, "mem":209715200, "gpu":0, "hugepages_1g":0 }, "state":"STARTED", "id":13, "services":[ { "annotations":{ "a1":"av1", "a2":"av2" }, "labels":{ "l2":"v2", "namespace":"t001-u000003", "robin.io\/username":"robin", "scope":"vnode", "robin.io\/tenant":"Administrators", "robin.io\/tenant_id":"1", "robin.io\/user_id":"3", "l1":"v1" }, "appname":"demo", "scope":"pod", "ports":[ { "protocol":"TCP", "name":"web", "node_port":31574, "port":80, "target_port":80 } ], "cluster_ip":"172.19.64.18", "vnodename":"demo-nginx-01", "type":"NodePort", "k8s_name":"demo-nginx-01-np-0", "selectors":{ "robin.io\/vnode":"demo-nginx-01" } } ] } ], "hostAliases":[ { "hostnames":[ "foo.remote", "bar.remote" ], "ip":"1.2.3.4" } ], "volume_groups":[ ], "image":{ "version":"1.15.8-alpine", "registry_hostname":"", "name":"nginx", "engine":"docker", "registry_port":"" }, "services":[ { "rolename":"nginx", "annotations":{ "a1":"av1", "a2":"av2" }, "ports":[ { "protocol":"TCP", "name":"web", "node_port":null, "port":80, "target_port":80 } ], "appname":"demo", "cluster_ip":"172.19.177.184", "labels":{ "l2":"v2", "namespace":"t001-u000003", "robin.io\/username":"robin", "scope":"role", "robin.io\/tenant":"Administrators", "robin.io\/tenant_id":"1", "robin.io\/user_id":"3", "l1":"v1" }, "type":"ClusterIP", "k8s_name":"demo-nginx-cl-0", "selectors":{ "app":"demo", "robin.io\/role":"nginx" } }, { "rolename":"nginx", "annotations":{ "a1":"av1", "a2":"av2" }, "ports":[ { "protocol":"TCP", "name":"web", "node_port":32392, "port":80, "target_port":80 } ], "appname":"demo", "cluster_ip":"172.19.51.165", "labels":{ "l2":"v2", "namespace":"t001-u000003", "robin.io\/username":"robin", "scope":"role", "robin.io\/tenant":"Administrators", "robin.io\/tenant_id":"1", "robin.io\/user_id":"3", "l1":"v1" }, "type":"LoadBalancer", "k8s_name":"demo-nginx-lb-0", "selectors":{ "app":"demo", "robin.io\/role":"nginx" } } ], "qgroups":{ "data":{ "rd_min_iops":0, "rd_weight":1, "enabled":false, "rd_max_iops":2000000, "wr_min_window":500, "wr_weight":1, "priority":1, "wr_min_iops":0, "rd_min_window":500, "wr_max_iops":2000000 } } } ], "apphooks":{ "postdestroy":"python3 postdestroy.py", "allocated":{ "postcreate":{ "spec":{ "template":{ "spec":{ "containers":[ { "volumeMounts":[ { "mountPath":"\/cm1", "name":"vol-cm1" }, { "mountPath":"\/cm2", "name":"vol-cm2" }, { "mountPath":"\/cm3", "name":"vol-cm3" } ], "name":"demo-pin1", "image":"k8s.gcr.io\/busybox", "command":[ "sleep", "1" ] } ], "backoffLimit":4, "volumes":[ { "name":"vol-cm1", "configMap":{ "defaultMode":420, "name":"demo-cm1" } }, { "name":"vol-cm2", "configMap":{ "defaultMode":420, "name":"demo-cm2" } }, { "name":"vol-cm3", "configMap":{ "defaultMode":420, "name":"demo-cm3" } } ], "restartPolicy":"Never" } } }, "type":"job" }, "precreate":"python3 precreate.py", "info":"python3 app_info.py", "preclone":"python3 precreate.py", "postdestroy":"python3 postdestroy.py" }, "postcreate":{ "spec":{ "template":{ "spec":{ "containers":[ { "volumeMounts":[ { "mountPath":"\/cm1", "name":"vol-cm1" }, { "mountPath":"\/cm2", "name":"vol-cm2" }, { "mountPath":"\/cm3", "name":"vol-cm3" } ], "name":"{{app['name'].lower()}}-pin1", "image":"k8s.gcr.io\/busybox", "command":[ "sleep", "1" ] } ], "backoffLimit":4, "volumes":[ { "name":"vol-cm1", "configMap":{ "defaultMode":420, "name":"{{app['name'].lower()}}-cm1" } }, { "name":"vol-cm2", "configMap":{ "defaultMode":420, "name":"{{app['name'].lower()}}-cm2" } }, { "name":"vol-cm3", "configMap":{ "defaultMode":420, "name":"{{app['name'].lower()}}-cm3" } } ], "restartPolicy":"Never" } } }, "type":"job" }, "info":"python3 app_info.py", "preclone":"python3 precreate.py", "precreate":"python3 precreate.py" }, "bundle_object_id":"a9f229864a74f936047b1b005de391a8", "clonemode":"unfenced", "zoneid":1597969746, "tenant":"Administrators", "from_template":null, "master_name":"demo", "parent_app_state":6, "parent_last_known_state":6, "bundle_path":"\/usr\/local\/robin\/collections\/file-collection-1597953097832\/1597953155269\/nginx-1.0", "rpoolid":1, "snapshot":"enabled", "appvars":{ "var2":"{{APP_NAME}}-val2", "var1":"{{APP_NAME}}-val1" }, "snapname":"snap1", "rpool":"default", "restart_num":15, "username":"robin", "app_ns":"t001-u000003", "namespace":"t001-u000003", "desc":"", "parentid":13, "enable_metrics":true, "enable_hooklogs":true, "allocated_appvars":{ "var2":"demo-val2", "var1":"demo-val1" }, "id":13, "robin_version":"5.3.1-230", "auto_relocate":true, "bundleid":1, "name":"demo_snap1", "content_id":"a9f229864a74f936047b1b005de391a8", "planid":14, "clone":"enabled", "parent_app":"demo" }, "jobid":147 } .. raw:: html
--------------------------------------------- Restore a Snapshot from a Backup --------------------------------------------- .. tabs:: .. tab:: CLI In order to restore a locally deleted snapshot from a backup copy stored in an external storage repository, issue the following command: .. code-block:: text # robin snapshot restore ============ =================================================================================== ``backupid`` Unique ID of a backup (obtained from the output of ``robin backup list``) ============ =================================================================================== **Example:** **List backups** .. code-block:: text # robin backup list +----------------------------------+--------------------------+----------+----------------------------+--------+ | Backup ID | Backup Name | Repo | Snapshot Name | State | +----------------------------------+--------------------------+----------+----------------------------+--------+ | a9a29bf44c6611ea80e52dcf1d27e528 | mysql2_backup-1581381428 | testrepo | mysql2_snapshot-1581381428 | Pushed | +----------------------------------+--------------------------+----------+----------------------------+--------+ **Verify the snapshot does not exist locally** .. code-block:: text # robin snapshot list +----------------------------------+--------+----------+----------+------------------------------+ | Snapshot ID | State | App Name | App Kind | Snapshot name | +----------------------------------+--------+----------+----------+------------------------------+ +----------------------------------+--------+----------+----------+------------------------------+ **Restore the snapshot from the backup** .. code-block:: text # robin snapshot restore a9a29bf44c6611ea80e52dcf1d27e528 --wait Job: 354 Name: K8SAppSnapshotRestore State: PREPARED Error: 0 Job: 354 Name: K8SAppSnapshotRestore State: AGENT_WAIT Error: 0 Job: 354 Name: K8SAppSnapshotRestore State: COMPLETED Error: 0 **Verify the snapshot has been restored** .. code-block:: text # robin snapshot list +----------------------------------+--------+----------+----------+------------------------------+ | Snapshot ID | State | App Name | App Kind | Snapshot name | +----------------------------------+--------+----------+----------+------------------------------+ | a4e900c84c6611eab476b72c237544ba | ONLINE | mysql2 | helm | mysql2_snapshot-1581381428 | +----------------------------------+--------+----------+----------+------------------------------+ .. tab:: API Restores a locally deleted snapshot from a backup copy stored in an external storage repository **End Point:** /v3/robin_server/snapshots/ **Method:** PUT **URL Parameters:** None **Data Parameters:** - ``action: restore`` - This mandatory field within the payload specifies that the restore operation is to be performed. - ``backupid: `` - This mandatory field within the payload specifies which backup the snapshot should be restored from. **Port:** RCM Port (default value is 29442) **Headers:** - ``Authorization: `` : Authorization token to identify which user is sending the request. The token can be acquired from the login API. **Success Response Code:** 202 **Error Response Code:** 500 (Internal Server Error), 404 (Not Found Error), 401 (Unauthorized Error), 400 (Invalid API Usage Error) **Example Response:** .. raw:: html
Output .. code-block:: text { "plan":{ "snapshotid":"41c719f0e77911ea93d70b35167412fa", "action":"restore", "backupname":"bkp-1", "vols":{ "pvc-098e3286-a989-42ba-9333-12d922973514":{ "metadata":{ "annotations":{ "robin.io\/fstype":"ext4", "robin.io\/appid":"1", "robin.io\/snapshotid":"1", "volume.beta.kubernetes.io\/storage-provisioner":"robin", "robin.io\/snapname":"mysql-1_s1_r-100000", "robin.io\/zoneid":"1598446881", "robin.io\/volumeid":"4", "meta.helm.sh\/release-namespace":"t001-u000003", "robin.io\/encryption":"none", "robin.io\/vol_snapname":"s1_r-100000", "robin.io\/backupid":"2", "meta.helm.sh\/release-name":"mysql-1", "robin.io\/blocksize":"4096", "volume.kubernetes.io\/selected-node":"qct-07", "robin.io\/volumename":"pvc-098e3286-a989-42ba-9333-12d922973514" }, "labels":{ "app.kubernetes.io\/managed-by":"Helm", "chart":"mysql-1.6.6", "app":"mysql-1", "heritage":"Helm", "release":"mysql-1" }, "namespace":"t001-u000003", "name":"mysql-1" }, "apiVersion":"v1", "kind":"PersistentVolumeClaim", "spec":{ "storageClassName":"workers", "accessModes":[ "ReadWriteOnce" ], "resources":{ "requests":{ "storage":"10Gi" } }, "volumeMode":"Filesystem" } } }, "appname":"mysql-1", "import":false, "snapname":"mysql-1_s1_r-100000", "repo":"repo-1", "backupid":"b94b6db0e7c311ea9d9f49af5651f4a6", "job_finished":true, "backup_path_prefix":"1598446881\/mysql-1_1\/b94b6db0e7c311ea9d9f49af5651f4a6" }, "jobid":190 } .. raw:: html
-------------------------- List all Snapshots -------------------------- .. tabs:: .. tab:: CLI Issue the following command to list both application and namespace based snapshots the current user is entitled to view: .. code-block:: text # robin snapshot list --app --app-kind --app-namespace --level --verbose ============================= =================================================================================== ``--app `` Only include snapshots for the specified applicaiton instance ``--app-kind `` Filter by application kind (valid choices are 'robin', 'helm', and 'flexapp') ``--app-namespace `` If there are multiple applications of the same name but in different namespaces this option can be used to distinguish them. Note this option is only valid when ``--app`` is specified ``--level `` Filter by the level of the snapshot (valid choices are 'app' and 'namespace') ``--verbose`` Include additional information in the output ============================= =================================================================================== **Example 1: List snapshots of a specific app** .. code-block:: text # robin snapshot list --app mysql1 +----------------------------------+--------+------------+----------+----------------------------+ | Snapshot ID | State | App Name | App Kind | Snapshot name | +----------------------------------+--------+------------+----------+----------------------------+ | 56875efa124d11ecba8f0f255475beae | ONLINE | ns1/mysql1 | helm | mysql1_snapshot-1631288383 | +----------------------------------+--------+------------+----------+----------------------------+ **Example 2: List all snapshots** .. code-block:: text # robin snapshot list +----------------------------------+--------+-------------------------------------+----------+----------------------------------------+ | Snapshot ID | State | App Name | App Kind | Snapshot name | +----------------------------------+--------+-------------------------------------+----------+----------------------------------------+ | fc0e74ba0fc611ec90008fd9e303c008 | ONLINE | ns1/ns1obcrh | flexapp | ns1obcrh_nss1 | | a44d6e3a108511ecb4620d978aa26f58 | ONLINE | u1ns1/u1ns1iquap | flexapp | u1ns1iquap_ss1u1ns1 | | f3f11798108b11ec9673e3f06b68957b | ONLINE | u11ns1/u11ns1plscf | flexapp | u11ns1plscf_ss1u11ns1 | | 90d480d8109011ec943d0b68842c3cba | ONLINE | u11ns1a1share1/u11ns1a1share1zonzq | flexapp | u11ns1a1share1zonzq_ss1u11ns1a1share1 | | e5514088109011ec8960b79252b3a9c8 | ONLINE | u11ns1a1share1/u11ns1a1share1zonzq | flexapp | u11ns1a1share1zonzq_ss1u11ns1a1share12 | | 63383f30109511ec9bc51f2f07c2e5f3 | ONLINE | u11ns2a1share1/u11ns2a1share1abcdef | flexapp | u11ns2a1share1abcdef_ss1u11ns2a1share1 | | 640f4ad2109711ecb0ada7e2383a10c4 | ONLINE | u1ns2a1share1/u1ns2a1share1dcefr | flexapp | u1ns2a1share1dcefr_ss1u1ns2a1share1 | | 56875efa124d11ecba8f0f255475beae | ONLINE | ns1/mysql1 | helm | mysql1_snapshot-1631288383 | +----------------------------------+--------+-------------------------------------+----------+----------------------------------------+ **Example 3: List all snapshots of a particular level** .. code-block:: text # robin snapshot list --level app +----------------------------------+--------+------------+----------+----------------------------+ | Snapshot ID | State | App Name | App Kind | Snapshot name | +----------------------------------+--------+------------+----------+----------------------------+ | 56875efa124d11ecba8f0f255475beae | ONLINE | ns1/mysql1 | helm | mysql1_snapshot-1631288383 | +----------------------------------+--------+------------+----------+----------------------------+ .. tab:: API Lists all application snapshots. **End Point:** /api/v6/robin_server/appsview?atype=SNAPSHOT **Method:** GET **URL Parameters:** - ``parentapp=`` : Utilizing this parameter filters the results such that only snapshots of the specified application are returned. - ``akind=[robin,helm,flexapp]`` : Utilizing this parameter filters the results by the kind specified. Valid values include robin, helm and flexapp. - ``namespace=`` : Utilizing this parameter filters the results such that only snapshots of the specified application in the given namespace are returned. Note this option is only valid with the ``parentapp`` parameter is utilized. - ``level=[app,namespace]`` : Utilizing this parameter filters the results by the level specified. Valid values include app and namespace. **Data Parameters:** None **Port:** RCM Port (default value is 29442) **Headers:** - ``Authorization: `` : Authorization token to identify which user is sending the request. The token can be acquired from the login API. **Success Response Code:** 200 **Error Response Code:** 500 (Internal Server Error) **Example Response:** .. raw:: html
Output .. code-block:: text { "k8s":[ { "name":"ns1obcrh_nss1", "namespace":"ns1", "desc":"Namespace ns1 snapshot", "appname":"ns1obcrh", "app_ns":"ns1", "kind":"flexapp", "description":"Namespace ns1 snapshot", "spec":[ { "apiVersion":"v1", "data":{ "run.sh":"" }, "kind":"ConfigMap", "metadata":{ "annotations":{ "meta.helm.sh\/release-name":"mysql1", "meta.helm.sh\/release-namespace":"ns1" }, "labels":{ "app":"mysql1", "app.kubernetes.io\/managed-by":"Helm", "chart":"mysql-1.6.7", "heritage":"Helm", "release":"mysql1" }, "name":"mysql1-test", "namespace":"ns1" } }, { "apiVersion":"v1", "data":{ "mysql-password":"WkFLQ2tnZnJETA==", "mysql-root-password":"MTh4WUpMVFNPag==" }, "kind":"Secret", "metadata":{ "annotations":{ "meta.helm.sh\/release-name":"mysql1", "meta.helm.sh\/release-namespace":"ns1" }, "labels":{ "app":"mysql1", "app.kubernetes.io\/managed-by":"Helm", "chart":"mysql-1.6.7", "heritage":"Helm", "release":"mysql1" }, "name":"mysql1", "namespace":"ns1" }, "type":"Opaque" }, { "apiVersion":"v1", "kind":"PersistentVolumeClaim", "metadata":{ "annotations":{ "meta.helm.sh\/release-name":"mysql1", "meta.helm.sh\/release-namespace":"ns1", "robin.io\/appid":"1", "robin.io\/blocksize":"4096", "robin.io\/encryption":"none", "robin.io\/fstype":"ext4", "robin.io\/snapname":"ns1obcrh_nss1", "robin.io\/snapshotid":"4", "robin.io\/vol_snapname":"nss1", "robin.io\/volumeid":"9", "robin.io\/volumename":"pvc-574b9417-0dd9-4eef-8d9b-9269d95be0ce", "robin.io\/zoneid":"1630920119", "volume.beta.kubernetes.io\/storage-provisioner":"robin" }, "labels":{ "app":"mysql1", "app.kubernetes.io\/managed-by":"Helm", "chart":"mysql-1.6.7", "heritage":"Helm", "release":"mysql1" }, "name":"mysql1", "namespace":"ns1" }, "spec":{ "accessModes":[ "ReadWriteOnce" ], "resources":{ "requests":{ "storage":"1Gi" } }, "storageClassName":"robin", "volumeMode":"Filesystem" } }, { "apiVersion":"v1", "kind":"Service", "metadata":{ "annotations":{ "meta.helm.sh\/release-name":"mysql1", "meta.helm.sh\/release-namespace":"ns1" }, "labels":{ "app":"mysql1", "app.kubernetes.io\/managed-by":"Helm", "chart":"mysql-1.6.7", "heritage":"Helm", "release":"mysql1" }, "name":"mysql1", "namespace":"ns1" }, "spec":{ "ipFamilies":[ "IPv4" ], "ipFamilyPolicy":"SingleStack", "ports":[ { "name":"mysql", "port":3306, "protocol":"TCP", "targetPort":"mysql" } ], "selector":{ "app":"mysql1" }, "sessionAffinity":"None", "type":"ClusterIP" } }, { "apiVersion":"apps\/v1", "kind":"Deployment", "metadata":{ "annotations":{ "deployment.kubernetes.io\/revision":"1", "meta.helm.sh\/release-name":"mysql1", "meta.helm.sh\/release-namespace":"ns1" }, "labels":{ "app":"mysql1", "app.kubernetes.io\/managed-by":"Helm", "chart":"mysql-1.6.7", "heritage":"Helm", "release":"mysql1" }, "name":"mysql1", "namespace":"ns1" }, "spec":{ "progressDeadlineSeconds":600, "replicas":1, "revisionHistoryLimit":10, "selector":{ "matchLabels":{ "app":"mysql1", "release":"mysql1" } }, "strategy":{ "type":"Recreate" }, "template":{ "metadata":{ "creationTimestamp":null, "labels":{ "app":"mysql1", "release":"mysql1" } }, "spec":{ "containers":[ { "env":[ { "name":"MYSQL_ROOT_PASSWORD", "valueFrom":{ "secretKeyRef":{ "key":"mysql-root-password", "name":"mysql1" } } }, { "name":"MYSQL_PASSWORD", "valueFrom":{ "secretKeyRef":{ "key":"mysql-password", "name":"mysql1", "optional":true } } }, { "name":"MYSQL_USER" }, { "name":"MYSQL_DATABASE" } ], "image":"mysql:5.7.30", "imagePullPolicy":"IfNotPresent", "livenessProbe":{ "exec":{ "command":[ "sh", "-c", "mysqladmin ping -u root -p${MYSQL_ROOT_PASSWORD}" ] }, "failureThreshold":3, "initialDelaySeconds":30, "periodSeconds":10, "successThreshold":1, "timeoutSeconds":5 }, "name":"mysql1", "ports":[ { "containerPort":3306, "name":"mysql", "protocol":"TCP" } ], "readinessProbe":{ "exec":{ "command":[ "sh", "-c", "mysqladmin ping -u root -p${MYSQL_ROOT_PASSWORD}" ] }, "failureThreshold":3, "initialDelaySeconds":5, "periodSeconds":10, "successThreshold":1, "timeoutSeconds":1 }, "resources":{ "requests":{ "cpu":"100m", "memory":"256Mi" } }, "securityContext":{ "privileged":true, "runAsUser":0 }, "terminationMessagePath":"\/dev\/termination-log", "terminationMessagePolicy":"File", "volumeMounts":[ { "mountPath":"\/var\/lib\/mysql", "name":"data" } ] } ], "dnsPolicy":"ClusterFirst", "initContainers":[ { "command":[ "rm", "-fr", "\/var\/lib\/mysql\/lost+found" ], "image":"busybox:1.32", "imagePullPolicy":"IfNotPresent", "name":"remove-lost-found", "resources":{ "requests":{ "cpu":"10m", "memory":"10Mi" } }, "terminationMessagePath":"\/dev\/termination-log", "terminationMessagePolicy":"File", "volumeMounts":[ { "mountPath":"\/var\/lib\/mysql", "name":"data" } ] } ], "restartPolicy":"Always", "schedulerName":"default-scheduler", "securityContext":{ }, "serviceAccount":"default", "serviceAccountName":"default", "terminationGracePeriodSeconds":30, "volumes":[ { "name":"data", "persistentVolumeClaim":{ "claimName":"mysql1" } } ] } } } } ], "tenant":"Administrators", "username":"admin", "id":"fc0e74ba0fc611ec90008fd9e303c008", "num_backups":0, "state":"ONLINE", "create_time":1631010811, "restored":false, "appnames":{ "mysql1":{ "mysql1":{ } } } }, { "name":"u1ns1iquap_ss1u1ns1", "namespace":"u1ns1", "desc":"Namespace u1ns1 snapshot", "appname":"u1ns1iquap", "app_ns":"u1ns1", "kind":"flexapp", "description":"Namespace u1ns1 snapshot", "spec":[ { "apiVersion":"v1", "data":{ "run.sh":"" }, "kind":"ConfigMap", "metadata":{ "annotations":{ "meta.helm.sh\/release-name":"mysql1t1u1ns1", "meta.helm.sh\/release-namespace":"u1ns1" }, "labels":{ "app":"mysql1t1u1ns1", "app.kubernetes.io\/managed-by":"Helm", "chart":"mysql-1.6.7", "heritage":"Helm", "release":"mysql1t1u1ns1" }, "name":"mysql1t1u1ns1-test", "namespace":"u1ns1" } }, { "apiVersion":"v1", "data":{ "mysql-password":"S3FLNk1ZQUVyTA==", "mysql-root-password":"d1NQS3NDaUhHWA==" }, "kind":"Secret", "metadata":{ "annotations":{ "meta.helm.sh\/release-name":"mysql1t1u1ns1", "meta.helm.sh\/release-namespace":"u1ns1" }, "labels":{ "app":"mysql1t1u1ns1", "app.kubernetes.io\/managed-by":"Helm", "chart":"mysql-1.6.7", "heritage":"Helm", "release":"mysql1t1u1ns1" }, "name":"mysql1t1u1ns1", "namespace":"u1ns1" }, "type":"Opaque" }, { "apiVersion":"v1", "kind":"PersistentVolumeClaim", "metadata":{ "annotations":{ "meta.helm.sh\/release-name":"mysql1t1u1ns1", "meta.helm.sh\/release-namespace":"u1ns1", "robin.io\/appid":"1", "robin.io\/blocksize":"4096", "robin.io\/encryption":"none", "robin.io\/fstype":"ext4", "robin.io\/snapname":"u1ns1iquap_ss1u1ns1", "robin.io\/snapshotid":"1", "robin.io\/vol_snapname":"ss1u1ns1", "robin.io\/volumeid":"17", "robin.io\/volumename":"pvc-1580fec7-ba32-4bf2-9e20-864754b5de43", "robin.io\/zoneid":"1630920119", "volume.beta.kubernetes.io\/storage-provisioner":"robin" }, "labels":{ "app":"mysql1t1u1ns1", "app.kubernetes.io\/managed-by":"Helm", "chart":"mysql-1.6.7", "heritage":"Helm", "release":"mysql1t1u1ns1" }, "name":"mysql1t1u1ns1", "namespace":"u1ns1" }, "spec":{ "accessModes":[ "ReadWriteOnce" ], "resources":{ "requests":{ "storage":"1Gi" } }, "storageClassName":"robin", "volumeMode":"Filesystem" } }, { "apiVersion":"v1", "kind":"Service", "metadata":{ "annotations":{ "meta.helm.sh\/release-name":"mysql1t1u1ns1", "meta.helm.sh\/release-namespace":"u1ns1" }, "labels":{ "app":"mysql1t1u1ns1", "app.kubernetes.io\/managed-by":"Helm", "chart":"mysql-1.6.7", "heritage":"Helm", "release":"mysql1t1u1ns1" }, "name":"mysql1t1u1ns1", "namespace":"u1ns1" }, "spec":{ "ipFamilies":[ "IPv4" ], "ipFamilyPolicy":"SingleStack", "ports":[ { "name":"mysql", "port":3306, "protocol":"TCP", "targetPort":"mysql" } ], "selector":{ "app":"mysql1t1u1ns1" }, "sessionAffinity":"None", "type":"ClusterIP" } }, { "apiVersion":"apps\/v1", "kind":"Deployment", "metadata":{ "annotations":{ "deployment.kubernetes.io\/revision":"1", "meta.helm.sh\/release-name":"mysql1t1u1ns1", "meta.helm.sh\/release-namespace":"u1ns1" }, "labels":{ "app":"mysql1t1u1ns1", "app.kubernetes.io\/managed-by":"Helm", "chart":"mysql-1.6.7", "heritage":"Helm", "release":"mysql1t1u1ns1" }, "name":"mysql1t1u1ns1", "namespace":"u1ns1" }, "spec":{ "progressDeadlineSeconds":600, "replicas":1, "revisionHistoryLimit":10, "selector":{ "matchLabels":{ "app":"mysql1t1u1ns1", "release":"mysql1t1u1ns1" } }, "strategy":{ "type":"Recreate" }, "template":{ "metadata":{ "creationTimestamp":null, "labels":{ "app":"mysql1t1u1ns1", "release":"mysql1t1u1ns1" } }, "spec":{ "containers":[ { "env":[ { "name":"MYSQL_ROOT_PASSWORD", "valueFrom":{ "secretKeyRef":{ "key":"mysql-root-password", "name":"mysql1t1u1ns1" } } }, { "name":"MYSQL_PASSWORD", "valueFrom":{ "secretKeyRef":{ "key":"mysql-password", "name":"mysql1t1u1ns1", "optional":true } } }, { "name":"MYSQL_USER" }, { "name":"MYSQL_DATABASE" } ], "image":"mysql:5.7.30", "imagePullPolicy":"IfNotPresent", "livenessProbe":{ "exec":{ "command":[ "sh", "-c", "mysqladmin ping -u root -p${MYSQL_ROOT_PASSWORD}" ] }, "failureThreshold":3, "initialDelaySeconds":30, "periodSeconds":10, "successThreshold":1, "timeoutSeconds":5 }, "name":"mysql1t1u1ns1", "ports":[ { "containerPort":3306, "name":"mysql", "protocol":"TCP" } ], "readinessProbe":{ "exec":{ "command":[ "sh", "-c", "mysqladmin ping -u root -p${MYSQL_ROOT_PASSWORD}" ] }, "failureThreshold":3, "initialDelaySeconds":5, "periodSeconds":10, "successThreshold":1, "timeoutSeconds":1 }, "resources":{ "requests":{ "cpu":"100m", "memory":"256Mi" } }, "securityContext":{ "privileged":true, "runAsUser":0 }, "terminationMessagePath":"\/dev\/termination-log", "terminationMessagePolicy":"File", "volumeMounts":[ { "mountPath":"\/var\/lib\/mysql", "name":"data" } ] } ], "dnsPolicy":"ClusterFirst", "initContainers":[ { "command":[ "rm", "-fr", "\/var\/lib\/mysql\/lost+found" ], "image":"busybox:1.32", "imagePullPolicy":"IfNotPresent", "name":"remove-lost-found", "resources":{ "requests":{ "cpu":"10m", "memory":"10Mi" } }, "terminationMessagePath":"\/dev\/termination-log", "terminationMessagePolicy":"File", "volumeMounts":[ { "mountPath":"\/var\/lib\/mysql", "name":"data" } ] } ], "restartPolicy":"Always", "schedulerName":"default-scheduler", "securityContext":{ }, "serviceAccount":"default", "serviceAccountName":"default", "terminationGracePeriodSeconds":30, "volumes":[ { "name":"data", "persistentVolumeClaim":{ "claimName":"mysql1t1u1ns1" } } ] } } } }, { "apiVersion":"rbac.authorization.k8s.io\/v1", "kind":"RoleBinding", "metadata":{ "labels":{ "robin.io\/domain":"ROBIN", "robin.io\/role":"tenantadmin", "robin.io\/tenant":"t1", "robin.io\/tenant_id":"2", "robin.io\/user_id":"4", "robin.io\/username":"u1" }, "name":"rolebinding-u1-edit", "namespace":"u1ns1" }, "roleRef":{ "apiGroup":"rbac.authorization.k8s.io", "kind":"ClusterRole", "name":"edit" }, "subjects":[ { "apiGroup":"rbac.authorization.k8s.io", "kind":"User", "name":"u1", "namespace":"u1ns1" } ] } ], "tenant":"t1", "username":"u1", "id":"a44d6e3a108511ecb4620d978aa26f58", "num_backups":1, "state":"ONLINE", "create_time":1631092696, "restored":false, "appnames":{ "mysql1t1u1ns1":{ "mysql1t1u1ns1":{ } } } }, { "name":"u11ns1plscf_ss1u11ns1", "namespace":"u11ns1", "desc":"Namespace u11ns1 snapshot", "appname":"u11ns1plscf", "app_ns":"u11ns1", "kind":"flexapp", "description":"Namespace u11ns1 snapshot", "spec":[ { "apiVersion":"v1", "data":{ "run.sh":"" }, "kind":"ConfigMap", "metadata":{ "annotations":{ "meta.helm.sh\/release-name":"mysql1t1u11ns1", "meta.helm.sh\/release-namespace":"u11ns1" }, "labels":{ "app":"mysql1t1u11ns1", "app.kubernetes.io\/managed-by":"Helm", "chart":"mysql-1.6.7", "heritage":"Helm", "release":"mysql1t1u11ns1" }, "name":"mysql1t1u11ns1-test", "namespace":"u11ns1" } }, { "apiVersion":"v1", "data":{ "mysql-password":"WVdvNFhrd1ZCOQ==", "mysql-root-password":"QVNRRVZhd3VQNQ==" }, "kind":"Secret", "metadata":{ "annotations":{ "meta.helm.sh\/release-name":"mysql1t1u11ns1", "meta.helm.sh\/release-namespace":"u11ns1" }, "labels":{ "app":"mysql1t1u11ns1", "app.kubernetes.io\/managed-by":"Helm", "chart":"mysql-1.6.7", "heritage":"Helm", "release":"mysql1t1u11ns1" }, "name":"mysql1t1u11ns1", "namespace":"u11ns1" }, "type":"Opaque" }, { "apiVersion":"v1", "kind":"PersistentVolumeClaim", "metadata":{ "annotations":{ "meta.helm.sh\/release-name":"mysql1t1u11ns1", "meta.helm.sh\/release-namespace":"u11ns1", "robin.io\/appid":"1", "robin.io\/blocksize":"4096", "robin.io\/encryption":"none", "robin.io\/fstype":"ext4", "robin.io\/snapname":"u11ns1plscf_ss1u11ns1", "robin.io\/snapshotid":"1", "robin.io\/vol_snapname":"ss1u11ns1", "robin.io\/volumeid":"19", "robin.io\/volumename":"pvc-f90e8ae4-56a4-4a7b-aaed-8c7ef337e4e8", "robin.io\/zoneid":"1630920119", "volume.beta.kubernetes.io\/storage-provisioner":"robin" }, "labels":{ "app":"mysql1t1u11ns1", "app.kubernetes.io\/managed-by":"Helm", "chart":"mysql-1.6.7", "heritage":"Helm", "release":"mysql1t1u11ns1" }, "name":"mysql1t1u11ns1", "namespace":"u11ns1" }, "spec":{ "accessModes":[ "ReadWriteOnce" ], "resources":{ "requests":{ "storage":"1Gi" } }, "storageClassName":"robin", "volumeMode":"Filesystem" } }, { "apiVersion":"v1", "kind":"Service", "metadata":{ "annotations":{ "meta.helm.sh\/release-name":"mysql1t1u11ns1", "meta.helm.sh\/release-namespace":"u11ns1" }, "labels":{ "app":"mysql1t1u11ns1", "app.kubernetes.io\/managed-by":"Helm", "chart":"mysql-1.6.7", "heritage":"Helm", "release":"mysql1t1u11ns1" }, "name":"mysql1t1u11ns1", "namespace":"u11ns1" }, "spec":{ "ipFamilies":[ "IPv4" ], "ipFamilyPolicy":"SingleStack", "ports":[ { "name":"mysql", "port":3306, "protocol":"TCP", "targetPort":"mysql" } ], "selector":{ "app":"mysql1t1u11ns1" }, "sessionAffinity":"None", "type":"ClusterIP" } }, { "apiVersion":"apps\/v1", "kind":"Deployment", "metadata":{ "annotations":{ "deployment.kubernetes.io\/revision":"1", "meta.helm.sh\/release-name":"mysql1t1u11ns1", "meta.helm.sh\/release-namespace":"u11ns1" }, "labels":{ "app":"mysql1t1u11ns1", "app.kubernetes.io\/managed-by":"Helm", "chart":"mysql-1.6.7", "heritage":"Helm", "release":"mysql1t1u11ns1" }, "name":"mysql1t1u11ns1", "namespace":"u11ns1" }, "spec":{ "progressDeadlineSeconds":600, "replicas":1, "revisionHistoryLimit":10, "selector":{ "matchLabels":{ "app":"mysql1t1u11ns1", "release":"mysql1t1u11ns1" } }, "strategy":{ "type":"Recreate" }, "template":{ "metadata":{ "creationTimestamp":null, "labels":{ "app":"mysql1t1u11ns1", "release":"mysql1t1u11ns1" } }, "spec":{ "containers":[ { "env":[ { "name":"MYSQL_ROOT_PASSWORD", "valueFrom":{ "secretKeyRef":{ "key":"mysql-root-password", "name":"mysql1t1u11ns1" } } }, { "name":"MYSQL_PASSWORD", "valueFrom":{ "secretKeyRef":{ "key":"mysql-password", "name":"mysql1t1u11ns1", "optional":true } } }, { "name":"MYSQL_USER" }, { "name":"MYSQL_DATABASE" } ], "image":"mysql:5.7.30", "imagePullPolicy":"IfNotPresent", "livenessProbe":{ "exec":{ "command":[ "sh", "-c", "mysqladmin ping -u root -p${MYSQL_ROOT_PASSWORD}" ] }, "failureThreshold":3, "initialDelaySeconds":30, "periodSeconds":10, "successThreshold":1, "timeoutSeconds":5 }, "name":"mysql1t1u11ns1", "ports":[ { "containerPort":3306, "name":"mysql", "protocol":"TCP" } ], "readinessProbe":{ "exec":{ "command":[ "sh", "-c", "mysqladmin ping -u root -p${MYSQL_ROOT_PASSWORD}" ] }, "failureThreshold":3, "initialDelaySeconds":5, "periodSeconds":10, "successThreshold":1, "timeoutSeconds":1 }, "resources":{ "requests":{ "cpu":"100m", "memory":"256Mi" } }, "securityContext":{ "privileged":true, "runAsUser":0 }, "terminationMessagePath":"\/dev\/termination-log", "terminationMessagePolicy":"File", "volumeMounts":[ { "mountPath":"\/var\/lib\/mysql", "name":"data" } ] } ], "dnsPolicy":"ClusterFirst", "initContainers":[ { "command":[ "rm", "-fr", "\/var\/lib\/mysql\/lost+found" ], "image":"busybox:1.32", "imagePullPolicy":"IfNotPresent", "name":"remove-lost-found", "resources":{ "requests":{ "cpu":"10m", "memory":"10Mi" } }, "terminationMessagePath":"\/dev\/termination-log", "terminationMessagePolicy":"File", "volumeMounts":[ { "mountPath":"\/var\/lib\/mysql", "name":"data" } ] } ], "restartPolicy":"Always", "schedulerName":"default-scheduler", "securityContext":{ }, "serviceAccount":"default", "serviceAccountName":"default", "terminationGracePeriodSeconds":30, "volumes":[ { "name":"data", "persistentVolumeClaim":{ "claimName":"mysql1t1u11ns1" } } ] } } } }, { "apiVersion":"rbac.authorization.k8s.io\/v1", "kind":"RoleBinding", "metadata":{ "labels":{ "app.kubernetes.io\/instance":"robin", "app.kubernetes.io\/managed-by":"robin.io", "app.kubernetes.io\/name":"robin", "robin.io\/domain":"ROBIN", "robin.io\/role":"tenantadmin", "robin.io\/tenant":"t1", "robin.io\/tenant_id":"2", "robin.io\/user_id":"4", "robin.io\/username":"u1" }, "name":"rolebinding-u1-edit", "namespace":"u11ns1" }, "roleRef":{ "apiGroup":"rbac.authorization.k8s.io", "kind":"ClusterRole", "name":"edit" }, "subjects":[ { "apiGroup":"rbac.authorization.k8s.io", "kind":"User", "name":"u1", "namespace":"u11ns1" } ] }, { "apiVersion":"rbac.authorization.k8s.io\/v1", "kind":"RoleBinding", "metadata":{ "labels":{ "app.kubernetes.io\/instance":"robin", "app.kubernetes.io\/managed-by":"robin.io", "app.kubernetes.io\/name":"robin", "robin.io\/domain":"ROBIN", "robin.io\/role":"user", "robin.io\/tenant":"t1", "robin.io\/tenant_id":"2", "robin.io\/user_id":"7", "robin.io\/username":"u11" }, "name":"rolebinding-u11-edit", "namespace":"u11ns1" }, "roleRef":{ "apiGroup":"rbac.authorization.k8s.io", "kind":"ClusterRole", "name":"edit" }, "subjects":[ { "apiGroup":"rbac.authorization.k8s.io", "kind":"User", "name":"u11", "namespace":"u11ns1" } ] } ], "tenant":"t1", "username":"u11", "id":"f3f11798108b11ec9673e3f06b68957b", "num_backups":1, "state":"ONLINE", "create_time":1631095408, "restored":false, "appnames":{ "mysql1t1u11ns1":{ "mysql1t1u11ns1":{ } } } }, { "name":"u11ns1a1share1zonzq_ss1u11ns1a1share1", "namespace":"u11ns1a1share1", "desc":"Namespace u11ns1a1share1 snapshot", "appname":"u11ns1a1share1zonzq", "app_ns":"u11ns1a1share1", "kind":"flexapp", "description":"Namespace u11ns1a1share1 snapshot", "spec":[ { "apiVersion":"v1", "data":{ "run.sh":"" }, "kind":"ConfigMap", "metadata":{ "annotations":{ "meta.helm.sh\/release-name":"mysql1t1u1ns1a1share1", "meta.helm.sh\/release-namespace":"u11ns1a1share1" }, "labels":{ "app":"mysql1t1u1ns1a1share1", "app.kubernetes.io\/managed-by":"Helm", "chart":"mysql-1.6.7", "heritage":"Helm", "release":"mysql1t1u1ns1a1share1" }, "name":"mysql1t1u1ns1a1share1-test", "namespace":"u11ns1a1share1" } }, { "apiVersion":"v1", "data":{ "mysql-password":"RmdPTEYyZlZOdA==", "mysql-root-password":"b3RzRHpiRmJhZw==" }, "kind":"Secret", "metadata":{ "annotations":{ "meta.helm.sh\/release-name":"mysql1t1u1ns1a1share1", "meta.helm.sh\/release-namespace":"u11ns1a1share1" }, "labels":{ "app":"mysql1t1u1ns1a1share1", "app.kubernetes.io\/managed-by":"Helm", "chart":"mysql-1.6.7", "heritage":"Helm", "release":"mysql1t1u1ns1a1share1" }, "name":"mysql1t1u1ns1a1share1", "namespace":"u11ns1a1share1" }, "type":"Opaque" }, { "apiVersion":"v1", "kind":"PersistentVolumeClaim", "metadata":{ "annotations":{ "meta.helm.sh\/release-name":"mysql1t1u1ns1a1share1", "meta.helm.sh\/release-namespace":"u11ns1a1share1", "robin.io\/appid":"1", "robin.io\/blocksize":"4096", "robin.io\/encryption":"none", "robin.io\/fstype":"ext4", "robin.io\/snapname":"u11ns1a1share1zonzq_ss1u11ns1a1share1", "robin.io\/snapshotid":"1", "robin.io\/vol_snapname":"ss1u11ns1a1share1", "robin.io\/volumeid":"21", "robin.io\/volumename":"pvc-41bb9d9f-039c-4bad-87fe-f9afcf6d8acd", "robin.io\/zoneid":"1630920119", "volume.beta.kubernetes.io\/storage-provisioner":"robin" }, "labels":{ "app":"mysql1t1u1ns1a1share1", "app.kubernetes.io\/managed-by":"Helm", "chart":"mysql-1.6.7", "heritage":"Helm", "release":"mysql1t1u1ns1a1share1" }, "name":"mysql1t1u1ns1a1share1", "namespace":"u11ns1a1share1" }, "spec":{ "accessModes":[ "ReadWriteOnce" ], "resources":{ "requests":{ "storage":"1Gi" } }, "storageClassName":"robin", "volumeMode":"Filesystem" } }, { "apiVersion":"v1", "kind":"Service", "metadata":{ "annotations":{ "meta.helm.sh\/release-name":"mysql1t1u1ns1a1share1", "meta.helm.sh\/release-namespace":"u11ns1a1share1" }, "labels":{ "app":"mysql1t1u1ns1a1share1", "app.kubernetes.io\/managed-by":"Helm", "chart":"mysql-1.6.7", "heritage":"Helm", "release":"mysql1t1u1ns1a1share1" }, "name":"mysql1t1u1ns1a1share1", "namespace":"u11ns1a1share1" }, "spec":{ "ipFamilies":[ "IPv4" ], "ipFamilyPolicy":"SingleStack", "ports":[ { "name":"mysql", "port":3306, "protocol":"TCP", "targetPort":"mysql" } ], "selector":{ "app":"mysql1t1u1ns1a1share1" }, "sessionAffinity":"None", "type":"ClusterIP" } }, { "apiVersion":"apps\/v1", "kind":"Deployment", "metadata":{ "annotations":{ "deployment.kubernetes.io\/revision":"1", "meta.helm.sh\/release-name":"mysql1t1u1ns1a1share1", "meta.helm.sh\/release-namespace":"u11ns1a1share1" }, "labels":{ "app":"mysql1t1u1ns1a1share1", "app.kubernetes.io\/managed-by":"Helm", "chart":"mysql-1.6.7", "heritage":"Helm", "release":"mysql1t1u1ns1a1share1" }, "name":"mysql1t1u1ns1a1share1", "namespace":"u11ns1a1share1" }, "spec":{ "progressDeadlineSeconds":600, "replicas":1, "revisionHistoryLimit":10, "selector":{ "matchLabels":{ "app":"mysql1t1u1ns1a1share1", "release":"mysql1t1u1ns1a1share1" } }, "strategy":{ "type":"Recreate" }, "template":{ "metadata":{ "creationTimestamp":null, "labels":{ "app":"mysql1t1u1ns1a1share1", "release":"mysql1t1u1ns1a1share1" } }, "spec":{ "containers":[ { "env":[ { "name":"MYSQL_ROOT_PASSWORD", "valueFrom":{ "secretKeyRef":{ "key":"mysql-root-password", "name":"mysql1t1u1ns1a1share1" } } }, { "name":"MYSQL_PASSWORD", "valueFrom":{ "secretKeyRef":{ "key":"mysql-password", "name":"mysql1t1u1ns1a1share1", "optional":true } } }, { "name":"MYSQL_USER" }, { "name":"MYSQL_DATABASE" } ], "image":"mysql:5.7.30", "imagePullPolicy":"IfNotPresent", "livenessProbe":{ "exec":{ "command":[ "sh", "-c", "mysqladmin ping -u root -p${MYSQL_ROOT_PASSWORD}" ] }, "failureThreshold":3, "initialDelaySeconds":30, "periodSeconds":10, "successThreshold":1, "timeoutSeconds":5 }, "name":"mysql1t1u1ns1a1share1", "ports":[ { "containerPort":3306, "name":"mysql", "protocol":"TCP" } ], "readinessProbe":{ "exec":{ "command":[ "sh", "-c", "mysqladmin ping -u root -p${MYSQL_ROOT_PASSWORD}" ] }, "failureThreshold":3, "initialDelaySeconds":5, "periodSeconds":10, "successThreshold":1, "timeoutSeconds":1 }, "resources":{ "requests":{ "cpu":"100m", "memory":"256Mi" } }, "securityContext":{ "privileged":true, "runAsUser":0 }, "terminationMessagePath":"\/dev\/termination-log", "terminationMessagePolicy":"File", "volumeMounts":[ { "mountPath":"\/var\/lib\/mysql", "name":"data" } ] } ], "dnsPolicy":"ClusterFirst", "initContainers":[ { "command":[ "rm", "-fr", "\/var\/lib\/mysql\/lost+found" ], "image":"busybox:1.32", "imagePullPolicy":"IfNotPresent", "name":"remove-lost-found", "resources":{ "requests":{ "cpu":"10m", "memory":"10Mi" } }, "terminationMessagePath":"\/dev\/termination-log", "terminationMessagePolicy":"File", "volumeMounts":[ { "mountPath":"\/var\/lib\/mysql", "name":"data" } ] } ], "restartPolicy":"Always", "schedulerName":"default-scheduler", "securityContext":{ }, "serviceAccount":"default", "serviceAccountName":"default", "terminationGracePeriodSeconds":30, "volumes":[ { "name":"data", "persistentVolumeClaim":{ "claimName":"mysql1t1u1ns1a1share1" } } ] } } } }, { "apiVersion":"rbac.authorization.k8s.io\/v1", "kind":"RoleBinding", "metadata":{ "labels":{ "app.kubernetes.io\/instance":"robin", "app.kubernetes.io\/managed-by":"robin.io", "app.kubernetes.io\/name":"robin", "robin.io\/domain":"ROBIN", "robin.io\/role":"tenantadmin", "robin.io\/tenant":"t1", "robin.io\/tenant_id":"2", "robin.io\/user_id":"4", "robin.io\/username":"u1" }, "name":"rolebinding-u1-edit", "namespace":"u11ns1a1share1" }, "roleRef":{ "apiGroup":"rbac.authorization.k8s.io", "kind":"ClusterRole", "name":"edit" }, "subjects":[ { "apiGroup":"rbac.authorization.k8s.io", "kind":"User", "name":"u1", "namespace":"u11ns1a1share1" } ] }, { "apiVersion":"rbac.authorization.k8s.io\/v1", "kind":"RoleBinding", "metadata":{ "labels":{ "app.kubernetes.io\/instance":"robin", "app.kubernetes.io\/managed-by":"robin.io", "app.kubernetes.io\/name":"robin", "robin.io\/domain":"ROBIN", "robin.io\/role":"user", "robin.io\/tenant":"t1", "robin.io\/tenant_id":"2", "robin.io\/user_id":"7", "robin.io\/username":"u11" }, "name":"rolebinding-u11-edit", "namespace":"u11ns1a1share1" }, "roleRef":{ "apiGroup":"rbac.authorization.k8s.io", "kind":"ClusterRole", "name":"edit" }, "subjects":[ { "apiGroup":"rbac.authorization.k8s.io", "kind":"User", "name":"u11", "namespace":"u11ns1a1share1" } ] } ], "tenant":"t1", "username":"u11", "id":"90d480d8109011ec943d0b68842c3cba", "num_backups":0, "state":"ONLINE", "create_time":1631097388, "restored":false, "appnames":{ "mysql1t1u1ns1a1share1":{ "mysql1t1u1ns1a1share1":{ } } } }, { "name":"u11ns1a1share1zonzq_ss1u11ns1a1share12", "namespace":"u11ns1a1share1", "desc":"Namespace u11ns1a1share1 snapshot", "appname":"u11ns1a1share1zonzq", "app_ns":"u11ns1a1share1", "kind":"flexapp", "description":"Namespace u11ns1a1share1 snapshot", "spec":[ { "apiVersion":"v1", "data":{ "run.sh":"" }, "kind":"ConfigMap", "metadata":{ "annotations":{ "meta.helm.sh\/release-name":"mysql1t1u1ns1a1share1", "meta.helm.sh\/release-namespace":"u11ns1a1share1" }, "labels":{ "app":"mysql1t1u1ns1a1share1", "app.kubernetes.io\/managed-by":"Helm", "chart":"mysql-1.6.7", "heritage":"Helm", "release":"mysql1t1u1ns1a1share1" }, "name":"mysql1t1u1ns1a1share1-test", "namespace":"u11ns1a1share1" } }, { "apiVersion":"v1", "data":{ "mysql-password":"RmdPTEYyZlZOdA==", "mysql-root-password":"b3RzRHpiRmJhZw==" }, "kind":"Secret", "metadata":{ "annotations":{ "meta.helm.sh\/release-name":"mysql1t1u1ns1a1share1", "meta.helm.sh\/release-namespace":"u11ns1a1share1" }, "labels":{ "app":"mysql1t1u1ns1a1share1", "app.kubernetes.io\/managed-by":"Helm", "chart":"mysql-1.6.7", "heritage":"Helm", "release":"mysql1t1u1ns1a1share1" }, "name":"mysql1t1u1ns1a1share1", "namespace":"u11ns1a1share1" }, "type":"Opaque" }, { "apiVersion":"v1", "kind":"PersistentVolumeClaim", "metadata":{ "annotations":{ "meta.helm.sh\/release-name":"mysql1t1u1ns1a1share1", "meta.helm.sh\/release-namespace":"u11ns1a1share1", "robin.io\/appid":"1", "robin.io\/blocksize":"4096", "robin.io\/encryption":"none", "robin.io\/fstype":"ext4", "robin.io\/snapname":"u11ns1a1share1zonzq_ss1u11ns1a1share12", "robin.io\/snapshotid":"2", "robin.io\/vol_snapname":"ss1u11ns1a1share12", "robin.io\/volumeid":"21", "robin.io\/volumename":"pvc-41bb9d9f-039c-4bad-87fe-f9afcf6d8acd", "robin.io\/zoneid":"1630920119", "volume.beta.kubernetes.io\/storage-provisioner":"robin" }, "labels":{ "app":"mysql1t1u1ns1a1share1", "app.kubernetes.io\/managed-by":"Helm", "chart":"mysql-1.6.7", "heritage":"Helm", "release":"mysql1t1u1ns1a1share1" }, "name":"mysql1t1u1ns1a1share1", "namespace":"u11ns1a1share1" }, "spec":{ "accessModes":[ "ReadWriteOnce" ], "resources":{ "requests":{ "storage":"1Gi" } }, "storageClassName":"robin", "volumeMode":"Filesystem" } }, { "apiVersion":"v1", "kind":"Service", "metadata":{ "annotations":{ "meta.helm.sh\/release-name":"mysql1t1u1ns1a1share1", "meta.helm.sh\/release-namespace":"u11ns1a1share1" }, "labels":{ "app":"mysql1t1u1ns1a1share1", "app.kubernetes.io\/managed-by":"Helm", "chart":"mysql-1.6.7", "heritage":"Helm", "release":"mysql1t1u1ns1a1share1" }, "name":"mysql1t1u1ns1a1share1", "namespace":"u11ns1a1share1" }, "spec":{ "ipFamilies":[ "IPv4" ], "ipFamilyPolicy":"SingleStack", "ports":[ { "name":"mysql", "port":3306, "protocol":"TCP", "targetPort":"mysql" } ], "selector":{ "app":"mysql1t1u1ns1a1share1" }, "sessionAffinity":"None", "type":"ClusterIP" } }, { "apiVersion":"apps\/v1", "kind":"Deployment", "metadata":{ "annotations":{ "deployment.kubernetes.io\/revision":"1", "meta.helm.sh\/release-name":"mysql1t1u1ns1a1share1", "meta.helm.sh\/release-namespace":"u11ns1a1share1" }, "labels":{ "app":"mysql1t1u1ns1a1share1", "app.kubernetes.io\/managed-by":"Helm", "chart":"mysql-1.6.7", "heritage":"Helm", "release":"mysql1t1u1ns1a1share1" }, "name":"mysql1t1u1ns1a1share1", "namespace":"u11ns1a1share1" }, "spec":{ "progressDeadlineSeconds":600, "replicas":1, "revisionHistoryLimit":10, "selector":{ "matchLabels":{ "app":"mysql1t1u1ns1a1share1", "release":"mysql1t1u1ns1a1share1" } }, "strategy":{ "type":"Recreate" }, "template":{ "metadata":{ "creationTimestamp":null, "labels":{ "app":"mysql1t1u1ns1a1share1", "release":"mysql1t1u1ns1a1share1" } }, "spec":{ "containers":[ { "env":[ { "name":"MYSQL_ROOT_PASSWORD", "valueFrom":{ "secretKeyRef":{ "key":"mysql-root-password", "name":"mysql1t1u1ns1a1share1" } } }, { "name":"MYSQL_PASSWORD", "valueFrom":{ "secretKeyRef":{ "key":"mysql-password", "name":"mysql1t1u1ns1a1share1", "optional":true } } }, { "name":"MYSQL_USER" }, { "name":"MYSQL_DATABASE" } ], "image":"mysql:5.7.30", "imagePullPolicy":"IfNotPresent", "livenessProbe":{ "exec":{ "command":[ "sh", "-c", "mysqladmin ping -u root -p${MYSQL_ROOT_PASSWORD}" ] }, "failureThreshold":3, "initialDelaySeconds":30, "periodSeconds":10, "successThreshold":1, "timeoutSeconds":5 }, "name":"mysql1t1u1ns1a1share1", "ports":[ { "containerPort":3306, "name":"mysql", "protocol":"TCP" } ], "readinessProbe":{ "exec":{ "command":[ "sh", "-c", "mysqladmin ping -u root -p${MYSQL_ROOT_PASSWORD}" ] }, "failureThreshold":3, "initialDelaySeconds":5, "periodSeconds":10, "successThreshold":1, "timeoutSeconds":1 }, "resources":{ "requests":{ "cpu":"100m", "memory":"256Mi" } }, "securityContext":{ "privileged":true, "runAsUser":0 }, "terminationMessagePath":"\/dev\/termination-log", "terminationMessagePolicy":"File", "volumeMounts":[ { "mountPath":"\/var\/lib\/mysql", "name":"data" } ] } ], "dnsPolicy":"ClusterFirst", "initContainers":[ { "command":[ "rm", "-fr", "\/var\/lib\/mysql\/lost+found" ], "image":"busybox:1.32", "imagePullPolicy":"IfNotPresent", "name":"remove-lost-found", "resources":{ "requests":{ "cpu":"10m", "memory":"10Mi" } }, "terminationMessagePath":"\/dev\/termination-log", "terminationMessagePolicy":"File", "volumeMounts":[ { "mountPath":"\/var\/lib\/mysql", "name":"data" } ] } ], "restartPolicy":"Always", "schedulerName":"default-scheduler", "securityContext":{ }, "serviceAccount":"default", "serviceAccountName":"default", "terminationGracePeriodSeconds":30, "volumes":[ { "name":"data", "persistentVolumeClaim":{ "claimName":"mysql1t1u1ns1a1share1" } } ] } } } }, { "apiVersion":"rbac.authorization.k8s.io\/v1", "kind":"RoleBinding", "metadata":{ "labels":{ "app.kubernetes.io\/instance":"robin", "app.kubernetes.io\/managed-by":"robin.io", "app.kubernetes.io\/name":"robin", "robin.io\/domain":"ROBIN", "robin.io\/role":"tenantadmin", "robin.io\/tenant":"t1", "robin.io\/tenant_id":"2", "robin.io\/user_id":"4", "robin.io\/username":"u1" }, "name":"rolebinding-u1-edit", "namespace":"u11ns1a1share1" }, "roleRef":{ "apiGroup":"rbac.authorization.k8s.io", "kind":"ClusterRole", "name":"edit" }, "subjects":[ { "apiGroup":"rbac.authorization.k8s.io", "kind":"User", "name":"u1", "namespace":"u11ns1a1share1" } ] }, { "apiVersion":"rbac.authorization.k8s.io\/v1", "kind":"RoleBinding", "metadata":{ "labels":{ "app.kubernetes.io\/instance":"robin", "app.kubernetes.io\/managed-by":"robin.io", "app.kubernetes.io\/name":"robin", "robin.io\/domain":"ROBIN", "robin.io\/role":"user", "robin.io\/tenant":"t1", "robin.io\/tenant_id":"2", "robin.io\/user_id":"7", "robin.io\/username":"u11" }, "name":"rolebinding-u11-edit", "namespace":"u11ns1a1share1" }, "roleRef":{ "apiGroup":"rbac.authorization.k8s.io", "kind":"ClusterRole", "name":"edit" }, "subjects":[ { "apiGroup":"rbac.authorization.k8s.io", "kind":"User", "name":"u11", "namespace":"u11ns1a1share1" } ] } ], "tenant":"t1", "username":"u11", "id":"e5514088109011ec8960b79252b3a9c8", "num_backups":0, "state":"ONLINE", "create_time":1631097530, "restored":false, "appnames":{ "mysql1t1u1ns1a1share1":{ "mysql1t1u1ns1a1share1":{ } } } }, { "name":"u11ns2a1share1abcdef_ss1u11ns2a1share1", "namespace":"u11ns2a1share1", "desc":"Namespace u11ns2a1share1 snapshot", "appname":"u11ns2a1share1abcdef", "app_ns":"u11ns2a1share1", "kind":"flexapp", "description":"Namespace u11ns2a1share1 snapshot", "spec":[ { "apiVersion":"v1", "data":{ "run.sh":"" }, "kind":"ConfigMap", "metadata":{ "annotations":{ "meta.helm.sh\/release-name":"mysql1t1u11ns2a1share1", "meta.helm.sh\/release-namespace":"u11ns2a1share1" }, "labels":{ "app":"mysql1t1u11ns2a1share1", "app.kubernetes.io\/managed-by":"Helm", "chart":"mysql-1.6.7", "heritage":"Helm", "release":"mysql1t1u11ns2a1share1" }, "name":"mysql1t1u11ns2a1share1-test", "namespace":"u11ns2a1share1" } }, { "apiVersion":"v1", "data":{ "mysql-password":"Z1JmaXdKc3J6cA==", "mysql-root-password":"YllLaUY0SVk0Vg==" }, "kind":"Secret", "metadata":{ "annotations":{ "meta.helm.sh\/release-name":"mysql1t1u11ns2a1share1", "meta.helm.sh\/release-namespace":"u11ns2a1share1" }, "labels":{ "app":"mysql1t1u11ns2a1share1", "app.kubernetes.io\/managed-by":"Helm", "chart":"mysql-1.6.7", "heritage":"Helm", "release":"mysql1t1u11ns2a1share1" }, "name":"mysql1t1u11ns2a1share1", "namespace":"u11ns2a1share1" }, "type":"Opaque" }, { "apiVersion":"v1", "kind":"PersistentVolumeClaim", "metadata":{ "annotations":{ "meta.helm.sh\/release-name":"mysql1t1u11ns2a1share1", "meta.helm.sh\/release-namespace":"u11ns2a1share1", "robin.io\/appid":"1", "robin.io\/blocksize":"4096", "robin.io\/encryption":"none", "robin.io\/fstype":"ext4", "robin.io\/snapname":"u11ns2a1share1abcdef_ss1u11ns2a1share1", "robin.io\/snapshotid":"1", "robin.io\/vol_snapname":"ss1u11ns2a1share1", "robin.io\/volumeid":"23", "robin.io\/volumename":"pvc-c6668ecb-8f22-45c8-a149-ec7f5032ddaf", "robin.io\/zoneid":"1630920119", "volume.beta.kubernetes.io\/storage-provisioner":"robin" }, "labels":{ "app":"mysql1t1u11ns2a1share1", "app.kubernetes.io\/managed-by":"Helm", "chart":"mysql-1.6.7", "heritage":"Helm", "release":"mysql1t1u11ns2a1share1" }, "name":"mysql1t1u11ns2a1share1", "namespace":"u11ns2a1share1" }, "spec":{ "accessModes":[ "ReadWriteOnce" ], "resources":{ "requests":{ "storage":"1Gi" } }, "storageClassName":"robin", "volumeMode":"Filesystem" } }, { "apiVersion":"v1", "kind":"Service", "metadata":{ "annotations":{ "meta.helm.sh\/release-name":"mysql1t1u11ns2a1share1", "meta.helm.sh\/release-namespace":"u11ns2a1share1" }, "labels":{ "app":"mysql1t1u11ns2a1share1", "app.kubernetes.io\/managed-by":"Helm", "chart":"mysql-1.6.7", "heritage":"Helm", "release":"mysql1t1u11ns2a1share1" }, "name":"mysql1t1u11ns2a1share1", "namespace":"u11ns2a1share1" }, "spec":{ "ipFamilies":[ "IPv4" ], "ipFamilyPolicy":"SingleStack", "ports":[ { "name":"mysql", "port":3306, "protocol":"TCP", "targetPort":"mysql" } ], "selector":{ "app":"mysql1t1u11ns2a1share1" }, "sessionAffinity":"None", "type":"ClusterIP" } }, { "apiVersion":"apps\/v1", "kind":"Deployment", "metadata":{ "annotations":{ "deployment.kubernetes.io\/revision":"1", "meta.helm.sh\/release-name":"mysql1t1u11ns2a1share1", "meta.helm.sh\/release-namespace":"u11ns2a1share1" }, "labels":{ "app":"mysql1t1u11ns2a1share1", "app.kubernetes.io\/managed-by":"Helm", "chart":"mysql-1.6.7", "heritage":"Helm", "release":"mysql1t1u11ns2a1share1" }, "name":"mysql1t1u11ns2a1share1", "namespace":"u11ns2a1share1" }, "spec":{ "progressDeadlineSeconds":600, "replicas":1, "revisionHistoryLimit":10, "selector":{ "matchLabels":{ "app":"mysql1t1u11ns2a1share1", "release":"mysql1t1u11ns2a1share1" } }, "strategy":{ "type":"Recreate" }, "template":{ "metadata":{ "creationTimestamp":null, "labels":{ "app":"mysql1t1u11ns2a1share1", "release":"mysql1t1u11ns2a1share1" } }, "spec":{ "containers":[ { "env":[ { "name":"MYSQL_ROOT_PASSWORD", "valueFrom":{ "secretKeyRef":{ "key":"mysql-root-password", "name":"mysql1t1u11ns2a1share1" } } }, { "name":"MYSQL_PASSWORD", "valueFrom":{ "secretKeyRef":{ "key":"mysql-password", "name":"mysql1t1u11ns2a1share1", "optional":true } } }, { "name":"MYSQL_USER" }, { "name":"MYSQL_DATABASE" } ], "image":"mysql:5.7.30", "imagePullPolicy":"IfNotPresent", "livenessProbe":{ "exec":{ "command":[ "sh", "-c", "mysqladmin ping -u root -p${MYSQL_ROOT_PASSWORD}" ] }, "failureThreshold":3, "initialDelaySeconds":30, "periodSeconds":10, "successThreshold":1, "timeoutSeconds":5 }, "name":"mysql1t1u11ns2a1share1", "ports":[ { "containerPort":3306, "name":"mysql", "protocol":"TCP" } ], "readinessProbe":{ "exec":{ "command":[ "sh", "-c", "mysqladmin ping -u root -p${MYSQL_ROOT_PASSWORD}" ] }, "failureThreshold":3, "initialDelaySeconds":5, "periodSeconds":10, "successThreshold":1, "timeoutSeconds":1 }, "resources":{ "requests":{ "cpu":"100m", "memory":"256Mi" } }, "securityContext":{ "privileged":true, "runAsUser":0 }, "terminationMessagePath":"\/dev\/termination-log", "terminationMessagePolicy":"File", "volumeMounts":[ { "mountPath":"\/var\/lib\/mysql", "name":"data" } ] } ], "dnsPolicy":"ClusterFirst", "initContainers":[ { "command":[ "rm", "-fr", "\/var\/lib\/mysql\/lost+found" ], "image":"busybox:1.32", "imagePullPolicy":"IfNotPresent", "name":"remove-lost-found", "resources":{ "requests":{ "cpu":"10m", "memory":"10Mi" } }, "terminationMessagePath":"\/dev\/termination-log", "terminationMessagePolicy":"File", "volumeMounts":[ { "mountPath":"\/var\/lib\/mysql", "name":"data" } ] } ], "restartPolicy":"Always", "schedulerName":"default-scheduler", "securityContext":{ }, "serviceAccount":"default", "serviceAccountName":"default", "terminationGracePeriodSeconds":30, "volumes":[ { "name":"data", "persistentVolumeClaim":{ "claimName":"mysql1t1u11ns2a1share1" } } ] } } } }, { "apiVersion":"rbac.authorization.k8s.io\/v1", "kind":"RoleBinding", "metadata":{ "labels":{ "app.kubernetes.io\/instance":"robin", "app.kubernetes.io\/managed-by":"robin.io", "app.kubernetes.io\/name":"robin", "robin.io\/domain":"ROBIN", "robin.io\/role":"tenantadmin", "robin.io\/tenant":"t1", "robin.io\/tenant_id":"2", "robin.io\/user_id":"4", "robin.io\/username":"u1" }, "name":"rolebinding-u1-edit", "namespace":"u11ns2a1share1" }, "roleRef":{ "apiGroup":"rbac.authorization.k8s.io", "kind":"ClusterRole", "name":"edit" }, "subjects":[ { "apiGroup":"rbac.authorization.k8s.io", "kind":"User", "name":"u1", "namespace":"u11ns2a1share1" } ] }, { "apiVersion":"rbac.authorization.k8s.io\/v1", "kind":"RoleBinding", "metadata":{ "labels":{ "app.kubernetes.io\/instance":"robin", "app.kubernetes.io\/managed-by":"robin.io", "app.kubernetes.io\/name":"robin", "robin.io\/domain":"ROBIN", "robin.io\/role":"user", "robin.io\/tenant":"t1", "robin.io\/tenant_id":"2", "robin.io\/user_id":"7", "robin.io\/username":"u11" }, "name":"rolebinding-u11-edit", "namespace":"u11ns2a1share1" }, "roleRef":{ "apiGroup":"rbac.authorization.k8s.io", "kind":"ClusterRole", "name":"edit" }, "subjects":[ { "apiGroup":"rbac.authorization.k8s.io", "kind":"User", "name":"u11", "namespace":"u11ns2a1share1" } ] } ], "tenant":"t1", "username":"u11", "id":"63383f30109511ec9bc51f2f07c2e5f3", "num_backups":0, "state":"ONLINE", "create_time":1631099459, "restored":false, "appnames":{ "mysql1t1u11ns2a1share1":{ "mysql1t1u11ns2a1share1":{ } } } }, { "name":"u1ns2a1share1dcefr_ss1u1ns2a1share1", "namespace":"u1ns2a1share1", "desc":"Namespace u1ns2a1share1 snapshot", "appname":"u1ns2a1share1dcefr", "app_ns":"u1ns2a1share1", "kind":"flexapp", "description":"Namespace u1ns2a1share1 snapshot", "spec":[ { "apiVersion":"v1", "data":{ "run.sh":"" }, "kind":"ConfigMap", "metadata":{ "annotations":{ "meta.helm.sh\/release-name":"mysql1t1u1ns2a1share1", "meta.helm.sh\/release-namespace":"u1ns2a1share1" }, "labels":{ "app":"mysql1t1u1ns2a1share1", "app.kubernetes.io\/managed-by":"Helm", "chart":"mysql-1.6.7", "heritage":"Helm", "release":"mysql1t1u1ns2a1share1" }, "name":"mysql1t1u1ns2a1share1-test", "namespace":"u1ns2a1share1" } }, { "apiVersion":"v1", "data":{ "mysql-password":"TVZnZTcxeE9xMw==", "mysql-root-password":"bE42U0R2NVE5TA==" }, "kind":"Secret", "metadata":{ "annotations":{ "meta.helm.sh\/release-name":"mysql1t1u1ns2a1share1", "meta.helm.sh\/release-namespace":"u1ns2a1share1" }, "labels":{ "app":"mysql1t1u1ns2a1share1", "app.kubernetes.io\/managed-by":"Helm", "chart":"mysql-1.6.7", "heritage":"Helm", "release":"mysql1t1u1ns2a1share1" }, "name":"mysql1t1u1ns2a1share1", "namespace":"u1ns2a1share1" }, "type":"Opaque" }, { "apiVersion":"v1", "kind":"PersistentVolumeClaim", "metadata":{ "annotations":{ "meta.helm.sh\/release-name":"mysql1t1u1ns2a1share1", "meta.helm.sh\/release-namespace":"u1ns2a1share1", "robin.io\/appid":"1", "robin.io\/blocksize":"4096", "robin.io\/encryption":"none", "robin.io\/fstype":"ext4", "robin.io\/snapname":"u1ns2a1share1dcefr_ss1u1ns2a1share1", "robin.io\/snapshotid":"1", "robin.io\/vol_snapname":"ss1u1ns2a1share1", "robin.io\/volumeid":"24", "robin.io\/volumename":"pvc-eebf0869-a3d3-4c97-b127-1637288ec394", "robin.io\/zoneid":"1630920119", "volume.beta.kubernetes.io\/storage-provisioner":"robin" }, "labels":{ "app":"mysql1t1u1ns2a1share1", "app.kubernetes.io\/managed-by":"Helm", "chart":"mysql-1.6.7", "heritage":"Helm", "release":"mysql1t1u1ns2a1share1" }, "name":"mysql1t1u1ns2a1share1", "namespace":"u1ns2a1share1" }, "spec":{ "accessModes":[ "ReadWriteOnce" ], "resources":{ "requests":{ "storage":"1Gi" } }, "storageClassName":"robin", "volumeMode":"Filesystem" } }, { "apiVersion":"v1", "kind":"Service", "metadata":{ "annotations":{ "meta.helm.sh\/release-name":"mysql1t1u1ns2a1share1", "meta.helm.sh\/release-namespace":"u1ns2a1share1" }, "labels":{ "app":"mysql1t1u1ns2a1share1", "app.kubernetes.io\/managed-by":"Helm", "chart":"mysql-1.6.7", "heritage":"Helm", "release":"mysql1t1u1ns2a1share1" }, "name":"mysql1t1u1ns2a1share1", "namespace":"u1ns2a1share1" }, "spec":{ "ipFamilies":[ "IPv4" ], "ipFamilyPolicy":"SingleStack", "ports":[ { "name":"mysql", "port":3306, "protocol":"TCP", "targetPort":"mysql" } ], "selector":{ "app":"mysql1t1u1ns2a1share1" }, "sessionAffinity":"None", "type":"ClusterIP" } }, { "apiVersion":"apps\/v1", "kind":"Deployment", "metadata":{ "annotations":{ "deployment.kubernetes.io\/revision":"1", "meta.helm.sh\/release-name":"mysql1t1u1ns2a1share1", "meta.helm.sh\/release-namespace":"u1ns2a1share1" }, "labels":{ "app":"mysql1t1u1ns2a1share1", "app.kubernetes.io\/managed-by":"Helm", "chart":"mysql-1.6.7", "heritage":"Helm", "release":"mysql1t1u1ns2a1share1" }, "name":"mysql1t1u1ns2a1share1", "namespace":"u1ns2a1share1" }, "spec":{ "progressDeadlineSeconds":600, "replicas":1, "revisionHistoryLimit":10, "selector":{ "matchLabels":{ "app":"mysql1t1u1ns2a1share1", "release":"mysql1t1u1ns2a1share1" } }, "strategy":{ "type":"Recreate" }, "template":{ "metadata":{ "creationTimestamp":null, "labels":{ "app":"mysql1t1u1ns2a1share1", "release":"mysql1t1u1ns2a1share1" } }, "spec":{ "containers":[ { "env":[ { "name":"MYSQL_ROOT_PASSWORD", "valueFrom":{ "secretKeyRef":{ "key":"mysql-root-password", "name":"mysql1t1u1ns2a1share1" } } }, { "name":"MYSQL_PASSWORD", "valueFrom":{ "secretKeyRef":{ "key":"mysql-password", "name":"mysql1t1u1ns2a1share1", "optional":true } } }, { "name":"MYSQL_USER" }, { "name":"MYSQL_DATABASE" } ], "image":"mysql:5.7.30", "imagePullPolicy":"IfNotPresent", "livenessProbe":{ "exec":{ "command":[ "sh", "-c", "mysqladmin ping -u root -p${MYSQL_ROOT_PASSWORD}" ] }, "failureThreshold":3, "initialDelaySeconds":30, "periodSeconds":10, "successThreshold":1, "timeoutSeconds":5 }, "name":"mysql1t1u1ns2a1share1", "ports":[ { "containerPort":3306, "name":"mysql", "protocol":"TCP" } ], "readinessProbe":{ "exec":{ "command":[ "sh", "-c", "mysqladmin ping -u root -p${MYSQL_ROOT_PASSWORD}" ] }, "failureThreshold":3, "initialDelaySeconds":5, "periodSeconds":10, "successThreshold":1, "timeoutSeconds":1 }, "resources":{ "requests":{ "cpu":"100m", "memory":"256Mi" } }, "securityContext":{ "privileged":true, "runAsUser":0 }, "terminationMessagePath":"\/dev\/termination-log", "terminationMessagePolicy":"File", "volumeMounts":[ { "mountPath":"\/var\/lib\/mysql", "name":"data" } ] } ], "dnsPolicy":"ClusterFirst", "initContainers":[ { "command":[ "rm", "-fr", "\/var\/lib\/mysql\/lost+found" ], "image":"busybox:1.32", "imagePullPolicy":"IfNotPresent", "name":"remove-lost-found", "resources":{ "requests":{ "cpu":"10m", "memory":"10Mi" } }, "terminationMessagePath":"\/dev\/termination-log", "terminationMessagePolicy":"File", "volumeMounts":[ { "mountPath":"\/var\/lib\/mysql", "name":"data" } ] } ], "restartPolicy":"Always", "schedulerName":"default-scheduler", "securityContext":{ }, "serviceAccount":"default", "serviceAccountName":"default", "terminationGracePeriodSeconds":30, "volumes":[ { "name":"data", "persistentVolumeClaim":{ "claimName":"mysql1t1u1ns2a1share1" } } ] } } } }, { "apiVersion":"rbac.authorization.k8s.io\/v1", "kind":"RoleBinding", "metadata":{ "labels":{ "robin.io\/domain":"ROBIN", "robin.io\/role":"tenantadmin", "robin.io\/tenant":"t1", "robin.io\/tenant_id":"2", "robin.io\/user_id":"4", "robin.io\/username":"u1" }, "name":"rolebinding-u1-edit", "namespace":"u1ns2a1share1" }, "roleRef":{ "apiGroup":"rbac.authorization.k8s.io", "kind":"ClusterRole", "name":"edit" }, "subjects":[ { "apiGroup":"rbac.authorization.k8s.io", "kind":"User", "name":"u1", "namespace":"u1ns2a1share1" } ] }, { "apiVersion":"rbac.authorization.k8s.io\/v1", "kind":"RoleBinding", "metadata":{ "labels":{ "robin.io\/domain":"ROBIN", "robin.io\/role":"user", "robin.io\/tenant":"t1", "robin.io\/tenant_id":"2", "robin.io\/user_id":"7", "robin.io\/username":"u11" }, "name":"rolebinding-u11-edit", "namespace":"u1ns2a1share1" }, "roleRef":{ "apiGroup":"rbac.authorization.k8s.io", "kind":"ClusterRole", "name":"edit" }, "subjects":[ { "apiGroup":"rbac.authorization.k8s.io", "kind":"User", "name":"u11", "namespace":"u1ns2a1share1" } ] } ], "tenant":"t1", "username":"u11", "id":"640f4ad2109711ecb0ada7e2383a10c4", "num_backups":0, "state":"ONLINE", "create_time":1631100319, "restored":false, "appnames":{ "mysql1t1u1ns2a1share1":{ "mysql1t1u1ns2a1share1":{ } } } }, { "name":"mysql1_snapshot-1631288383", "namespace":"ns1", "desc":"-", "appname":"mysql1", "app_ns":"ns1", "kind":"helm", "description":"", "spec":[ { "apiVersion":"v1", "data":{ "run.sh":"" }, "kind":"ConfigMap", "metadata":{ "annotations":{ "meta.helm.sh\/release-name":"mysql1", "meta.helm.sh\/release-namespace":"ns1" }, "labels":{ "app":"mysql1", "app.kubernetes.io\/managed-by":"Helm", "chart":"mysql-1.6.7", "heritage":"Helm", "release":"mysql1" }, "name":"mysql1-test", "namespace":"ns1" } }, { "apiVersion":"v1", "data":{ "mysql-password":"WkFLQ2tnZnJETA==", "mysql-root-password":"MTh4WUpMVFNPag==" }, "kind":"Secret", "metadata":{ "annotations":{ "meta.helm.sh\/release-name":"mysql1", "meta.helm.sh\/release-namespace":"ns1" }, "labels":{ "app":"mysql1", "app.kubernetes.io\/managed-by":"Helm", "chart":"mysql-1.6.7", "heritage":"Helm", "release":"mysql1" }, "name":"mysql1", "namespace":"ns1" }, "type":"Opaque" }, { "apiVersion":"v1", "kind":"PersistentVolumeClaim", "metadata":{ "annotations":{ "meta.helm.sh\/release-name":"mysql1", "meta.helm.sh\/release-namespace":"ns1", "robin.io\/appid":"1", "robin.io\/blocksize":"4096", "robin.io\/encryption":"none", "robin.io\/fstype":"ext4", "robin.io\/snapname":"mysql1_snapshot-1631288383", "robin.io\/snapshotid":"5", "robin.io\/vol_snapname":"snapshot-1631288383", "robin.io\/volumeid":"9", "robin.io\/volumename":"pvc-574b9417-0dd9-4eef-8d9b-9269d95be0ce", "robin.io\/zoneid":"1630920119", "volume.beta.kubernetes.io\/storage-provisioner":"robin" }, "labels":{ "app":"mysql1", "app.kubernetes.io\/managed-by":"Helm", "chart":"mysql-1.6.7", "heritage":"Helm", "release":"mysql1" }, "name":"mysql1", "namespace":"ns1" }, "spec":{ "accessModes":[ "ReadWriteOnce" ], "resources":{ "requests":{ "storage":"1Gi" } }, "storageClassName":"robin", "volumeMode":"Filesystem" } }, { "apiVersion":"v1", "kind":"Service", "metadata":{ "annotations":{ "meta.helm.sh\/release-name":"mysql1", "meta.helm.sh\/release-namespace":"ns1" }, "labels":{ "app":"mysql1", "app.kubernetes.io\/managed-by":"Helm", "chart":"mysql-1.6.7", "heritage":"Helm", "release":"mysql1" }, "name":"mysql1", "namespace":"ns1" }, "spec":{ "ipFamilies":[ "IPv4" ], "ipFamilyPolicy":"SingleStack", "ports":[ { "name":"mysql", "port":3306, "protocol":"TCP", "targetPort":"mysql" } ], "selector":{ "app":"mysql1" }, "sessionAffinity":"None", "type":"ClusterIP" } }, { "apiVersion":"apps\/v1", "kind":"Deployment", "metadata":{ "annotations":{ "deployment.kubernetes.io\/revision":"1", "meta.helm.sh\/release-name":"mysql1", "meta.helm.sh\/release-namespace":"ns1" }, "labels":{ "app":"mysql1", "app.kubernetes.io\/managed-by":"Helm", "chart":"mysql-1.6.7", "heritage":"Helm", "release":"mysql1" }, "name":"mysql1", "namespace":"ns1" }, "spec":{ "progressDeadlineSeconds":600, "replicas":1, "revisionHistoryLimit":10, "selector":{ "matchLabels":{ "app":"mysql1", "release":"mysql1" } }, "strategy":{ "type":"Recreate" }, "template":{ "metadata":{ "creationTimestamp":null, "labels":{ "app":"mysql1", "release":"mysql1" } }, "spec":{ "containers":[ { "env":[ { "name":"MYSQL_ROOT_PASSWORD", "valueFrom":{ "secretKeyRef":{ "key":"mysql-root-password", "name":"mysql1" } } }, { "name":"MYSQL_PASSWORD", "valueFrom":{ "secretKeyRef":{ "key":"mysql-password", "name":"mysql1", "optional":true } } }, { "name":"MYSQL_USER" }, { "name":"MYSQL_DATABASE" } ], "image":"mysql:5.7.30", "imagePullPolicy":"IfNotPresent", "livenessProbe":{ "exec":{ "command":[ "sh", "-c", "mysqladmin ping -u root -p${MYSQL_ROOT_PASSWORD}" ] }, "failureThreshold":3, "initialDelaySeconds":30, "periodSeconds":10, "successThreshold":1, "timeoutSeconds":5 }, "name":"mysql1", "ports":[ { "containerPort":3306, "name":"mysql", "protocol":"TCP" } ], "readinessProbe":{ "exec":{ "command":[ "sh", "-c", "mysqladmin ping -u root -p${MYSQL_ROOT_PASSWORD}" ] }, "failureThreshold":3, "initialDelaySeconds":5, "periodSeconds":10, "successThreshold":1, "timeoutSeconds":1 }, "resources":{ "requests":{ "cpu":"100m", "memory":"256Mi" } }, "securityContext":{ "privileged":true, "runAsUser":0 }, "terminationMessagePath":"\/dev\/termination-log", "terminationMessagePolicy":"File", "volumeMounts":[ { "mountPath":"\/var\/lib\/mysql", "name":"data" } ] } ], "dnsPolicy":"ClusterFirst", "initContainers":[ { "command":[ "rm", "-fr", "\/var\/lib\/mysql\/lost+found" ], "image":"busybox:1.32", "imagePullPolicy":"IfNotPresent", "name":"remove-lost-found", "resources":{ "requests":{ "cpu":"10m", "memory":"10Mi" } }, "terminationMessagePath":"\/dev\/termination-log", "terminationMessagePolicy":"File", "volumeMounts":[ { "mountPath":"\/var\/lib\/mysql", "name":"data" } ] } ], "restartPolicy":"Always", "schedulerName":"default-scheduler", "securityContext":{ }, "serviceAccount":"default", "serviceAccountName":"default", "terminationGracePeriodSeconds":30, "volumes":[ { "name":"data", "persistentVolumeClaim":{ "claimName":"mysql1" } } ] } } } } ], "tenant":"Administrators", "username":"admin", "id":"56875efa124d11ecba8f0f255475beae", "num_backups":0, "state":"ONLINE", "create_time":1631288404, "restored":false } ], "robin":{ "apps":[ ], "vnodes":[ ], "users":[ { "id":3, "username":"admin", "current_tenantid":1, "firstname":"Robin", "lastname":"Systems", "email":null, "tenantid":1 }, { "id":4, "username":"u1", "current_tenantid":2, "firstname":null, "lastname":null, "email":null, "tenantid":2 }, { "id":5, "username":"u2", "current_tenantid":3, "firstname":null, "lastname":null, "email":null, "tenantid":3 }, { "id":6, "username":"u3", "current_tenantid":4, "firstname":null, "lastname":null, "email":null, "tenantid":4 }, { "id":7, "username":"u11", "current_tenantid":2, "firstname":null, "lastname":null, "email":null, "tenantid":2 }, { "id":8, "username":"u21", "current_tenantid":3, "firstname":null, "lastname":null, "email":null, "tenantid":3 }, { "id":9, "username":"u31", "current_tenantid":4, "firstname":null, "lastname":null, "email":null, "tenantid":4 }, { "id":10, "username":"u12", "current_tenantid":2, "firstname":null, "lastname":null, "email":null, "tenantid":2 }, { "id":11, "username":"u22", "current_tenantid":3, "firstname":null, "lastname":null, "email":null, "tenantid":3 }, { "id":12, "username":"u32", "current_tenantid":4, "firstname":null, "lastname":null, "email":null, "tenantid":4 } ], "tenants":[ { "id":1, "name":"Administrators" }, { "id":2, "name":"t1" }, { "id":3, "name":"t2" }, { "id":4, "name":"t3" }, { "id":5, "name":"t4" } ], "bundles":[ ], "nodes":[ { "id":1, "name":"hari6thsep-jwj8q-master-0.c.rock-range-207622.internal", "zoneid":1, "rpoolid":1, "nvnodes":0, "state":"ONLINE", "cpu":4, "mem":15742902272, "services":{ "iomgr-server":{ "ActiveState":"active" }, "stormgr-server":{ "ActiveState":"active" }, "postgresql-9.6":{ "ActiveState":"active" }, "sherlock-server":{ "ActiveState":"active" }, "httpd":{ "ActiveState":"active" }, "gui-cli":{ "ActiveState":"inactive" }, "consul-server":{ "ActiveState":"active" }, "consul-client":{ "ActiveState":"inactive" }, "robin-server":{ "ActiveState":"active" }, "robin-event-server":{ "ActiveState":"active" }, "robin-auth-server":{ "ActiveState":"active" }, "robin-node-monitor":{ "ActiveState":"active" }, "robin-file-server":{ "ActiveState":"active" }, "robin-agent":{ "ActiveState":"active" }, "monitor-server":{ "ActiveState":"active" }, "robin-watchdog":{ "ActiveState":"active" }, "consul_dns":true }, "mem_for_storage":1073741824, "memory_used":0, "cores_used":0, "cpu_prov_factor":10, "cpu_cores_present":4, "k8s_node_name":"hari6thsep-jwj8q-master-0.c.rock-range-207622.internal", "gpu":0, "reserved_cpus":[ ] }, { "id":2, "name":"hari6thsep-jwj8q-worker-c-94vq6.c.rock-range-207622.internal", "zoneid":1, "rpoolid":1, "nvnodes":0, "state":"ONLINE", "cpu":4, "mem":15742902272, "services":{ "iomgr-server":{ "ActiveState":"active" }, "stormgr-server":{ "ActiveState":"inactive" }, "postgresql-9.6":{ "ActiveState":"inactive" }, "sherlock-server":{ "ActiveState":"inactive" }, "httpd":{ "ActiveState":"active" }, "gui-cli":{ "ActiveState":"inactive" }, "consul-server":{ "ActiveState":"inactive" }, "consul-client":{ "ActiveState":"active" }, "robin-server":{ "ActiveState":"inactive" }, "robin-event-server":{ "ActiveState":"inactive" }, "robin-auth-server":{ "ActiveState":"inactive" }, "robin-node-monitor":{ "ActiveState":"inactive" }, "robin-file-server":{ "ActiveState":"inactive" }, "robin-agent":{ "ActiveState":"active" }, "monitor-server":{ "ActiveState":"active" }, "robin-watchdog":{ "ActiveState":"inactive" }, "consul_dns":true }, "mem_for_storage":1073741824, "memory_used":0, "cores_used":0, "cpu_prov_factor":10, "cpu_cores_present":4, "k8s_node_name":"hari6thsep-jwj8q-worker-c-94vq6.c.rock-range-207622.internal", "gpu":0, "reserved_cpus":[ ] }, { "id":3, "name":"hari6thsep-jwj8q-worker-b-fx84c.c.rock-range-207622.internal", "zoneid":1, "rpoolid":1, "nvnodes":0, "state":"ONLINE", "cpu":4, "mem":15742902272, "services":{ "iomgr-server":{ "ActiveState":"active" }, "stormgr-server":{ "ActiveState":"inactive" }, "postgresql-9.6":{ "ActiveState":"inactive" }, "sherlock-server":{ "ActiveState":"inactive" }, "httpd":{ "ActiveState":"active" }, "gui-cli":{ "ActiveState":"inactive" }, "consul-server":{ "ActiveState":"inactive" }, "consul-client":{ "ActiveState":"active" }, "robin-server":{ "ActiveState":"inactive" }, "robin-event-server":{ "ActiveState":"inactive" }, "robin-auth-server":{ "ActiveState":"inactive" }, "robin-node-monitor":{ "ActiveState":"inactive" }, "robin-file-server":{ "ActiveState":"inactive" }, "robin-agent":{ "ActiveState":"active" }, "monitor-server":{ "ActiveState":"active" }, "robin-watchdog":{ "ActiveState":"inactive" }, "consul_dns":true }, "mem_for_storage":1073741824, "memory_used":0, "cores_used":0, "cpu_prov_factor":10, "cpu_cores_present":4, "k8s_node_name":"hari6thsep-jwj8q-worker-b-fx84c.c.rock-range-207622.internal", "gpu":0, "reserved_cpus":[ ] }, { "id":4, "name":"hari6thsep-jwj8q-master-2.c.rock-range-207622.internal", "zoneid":1, "rpoolid":1, "nvnodes":0, "state":"ONLINE", "cpu":4, "mem":15742902272, "services":{ "iomgr-server":{ "ActiveState":"active" }, "stormgr-server":{ "ActiveState":"inactive" }, "postgresql-9.6":{ "ActiveState":"active" }, "sherlock-server":{ "ActiveState":"inactive" }, "httpd":{ "ActiveState":"active" }, "gui-cli":{ "ActiveState":"inactive" }, "consul-server":{ "ActiveState":"active" }, "consul-client":{ "ActiveState":"inactive" }, "robin-server":{ "ActiveState":"inactive" }, "robin-event-server":{ "ActiveState":"inactive" }, "robin-auth-server":{ "ActiveState":"inactive" }, "robin-node-monitor":{ "ActiveState":"inactive" }, "robin-file-server":{ "ActiveState":"inactive" }, "robin-agent":{ "ActiveState":"active" }, "monitor-server":{ "ActiveState":"active" }, "robin-watchdog":{ "ActiveState":"active" }, "consul_dns":true }, "mem_for_storage":1073741824, "memory_used":0, "cores_used":0, "cpu_prov_factor":10, "cpu_cores_present":4, "k8s_node_name":"hari6thsep-jwj8q-master-2.c.rock-range-207622.internal", "gpu":0, "reserved_cpus":[ ] }, { "id":5, "name":"hari6thsep-jwj8q-worker-a-slskk.c.rock-range-207622.internal", "zoneid":1, "rpoolid":1, "nvnodes":0, "state":"ONLINE", "cpu":4, "mem":15742902272, "services":{ "iomgr-server":{ "ActiveState":"active" }, "stormgr-server":{ "ActiveState":"inactive" }, "postgresql-9.6":{ "ActiveState":"inactive" }, "sherlock-server":{ "ActiveState":"inactive" }, "httpd":{ "ActiveState":"active" }, "gui-cli":{ "ActiveState":"inactive" }, "consul-server":{ "ActiveState":"inactive" }, "consul-client":{ "ActiveState":"active" }, "robin-server":{ "ActiveState":"inactive" }, "robin-event-server":{ "ActiveState":"inactive" }, "robin-auth-server":{ "ActiveState":"inactive" }, "robin-node-monitor":{ "ActiveState":"inactive" }, "robin-file-server":{ "ActiveState":"inactive" }, "robin-agent":{ "ActiveState":"active" }, "monitor-server":{ "ActiveState":"active" }, "robin-watchdog":{ "ActiveState":"inactive" }, "consul_dns":true }, "mem_for_storage":1073741824, "memory_used":0, "cores_used":0, "cpu_prov_factor":10, "cpu_cores_present":4, "k8s_node_name":"hari6thsep-jwj8q-worker-a-slskk.c.rock-range-207622.internal", "gpu":0, "reserved_cpus":[ ] }, { "id":6, "name":"hari6thsep-jwj8q-master-1.c.rock-range-207622.internal", "zoneid":1, "rpoolid":1, "nvnodes":0, "state":"ONLINE", "cpu":4, "mem":15742902272, "services":{ "iomgr-server":{ "ActiveState":"active" }, "stormgr-server":{ "ActiveState":"inactive" }, "postgresql-9.6":{ "ActiveState":"active" }, "sherlock-server":{ "ActiveState":"inactive" }, "httpd":{ "ActiveState":"active" }, "gui-cli":{ "ActiveState":"inactive" }, "consul-server":{ "ActiveState":"active" }, "consul-client":{ "ActiveState":"inactive" }, "robin-server":{ "ActiveState":"inactive" }, "robin-event-server":{ "ActiveState":"inactive" }, "robin-auth-server":{ "ActiveState":"inactive" }, "robin-node-monitor":{ "ActiveState":"inactive" }, "robin-file-server":{ "ActiveState":"inactive" }, "robin-agent":{ "ActiveState":"active" }, "monitor-server":{ "ActiveState":"active" }, "robin-watchdog":{ "ActiveState":"active" }, "consul_dns":true }, "mem_for_storage":1073741824, "memory_used":0, "cores_used":0, "cpu_prov_factor":10, "cpu_cores_present":4, "k8s_node_name":"hari6thsep-jwj8q-master-1.c.rock-range-207622.internal", "gpu":0, "reserved_cpus":[ ] } ], "zones":[ { "id":1, "name":"default", "zoneid":1630920119 } ], "rpools":[ { "id":1, "name":"default" } ] } } .. raw:: html
------------------------------------------ Show Information About a Specific Snapshot ------------------------------------------ .. tabs:: .. tab:: CLI In order to attain details about a specific snapshot such as its kind, the objects which are captured within it and its creation time, issue the following command: .. code-block:: text # robin snapshot info --specs ==================== =================================================================================== ``snapshotid`` Unique ID of the snapshot ``specs`` Output the spec file associated with the snapshot ==================== =================================================================================== **Example 1: Information displayed for a Helm based application snapshot** .. code-block:: text # robin snapshot info a4e900c84c6611eab476b72c237544ba Name : mysql2_snapshot-1581381428 Id : a4e900c84c6611eab476b72c237544ba Application Name : mysql2 Application Kind : helm State : ONLINE Description : - Number of volumes : 1 Number of backups : 0 Creation Time : 10 Feb 2020 16:37:20 Restored : TRUE Spec: +-----------------------+-------------------------------------------+--------------+ | Kind | Name | Namespace | +-----------------------+-------------------------------------------+--------------+ | ConfigMap | jaundiced-lionfish-mysql-test | t003-u000005 | | Secret | jaundiced-lionfish-mysql | t003-u000005 | | PersistentVolumeClaim | jaundiced-lionfish-mysql | t003-u000005 | | Pod | jaundiced-lionfish-mysql-84bc874656-q4twd | t003-u000005 | | Service | jaundiced-lionfish-mysql | t003-u000005 | | ReplicaSet | jaundiced-lionfish-mysql-84bc874656 | t003-u000005 | | Deployment | jaundiced-lionfish-mysql | t003-u000005 | +-----------------------+-------------------------------------------+--------------+ Volumes: +------------------------------------------+-----------+--------------------+ | ROBIN Name | Size (GB) | Snapshot Size (GB) | +------------------------------------------+-----------+--------------------+ | pvc-a17b6cb2-a6bb-4fc4-a0e3-97baa28ffdc6 | 8 | - | +------------------------------------------+-----------+--------------------+ **Example 2: Information displayed for a snapshot of a Namespace** .. code-block:: text # robin snapshot info fc0e74ba0fc611ec90008fd9e303c008 Name : ns1obcrh_nss1 Id : fc0e74ba0fc611ec90008fd9e303c008 Application Name : ns1obcrh Application Kind : flexapp State : ONLINE Description : Namespace ns1 snapshot Number of volumes : 1 Number of backups : 0 Creation Time : 07 Sep 2021 10:33:31 Restored : FALSE Spec: +-----------------------+-------------+-----------+ | Kind | Name | Namespace | +-----------------------+-------------+-----------+ | ConfigMap | mysql1-test | ns1 | | Secret | mysql1 | ns1 | | PersistentVolumeClaim | mysql1 | ns1 | | Service | mysql1 | ns1 | | Deployment | mysql1 | ns1 | +-----------------------+-------------+-----------+ Volumes: +------------------------------------------+-----------+---------------------------+ | ROBIN Name | Size (GB) | Snapshot Space Limit (GB) | +------------------------------------------+-----------+---------------------------+ | pvc-574b9417-0dd9-4eef-8d9b-9269d95be0ce | 1 | - | +------------------------------------------+-----------+---------------------------+ Applications: +--------+ | Name | +--------+ | mysql1 | +--------+ .. tab:: API Returns details about a specific snapshot such as its kind, the objects which are captured within it and its creation time. **End Point:** /api/v6/robin_server/apps/?objtype=snapshot **Method:** GET **URL Parameters:** None **Data Parameters:** None **Port:** RCM Port (default value is 29442) **Headers:** - ``Authorization: `` : Authorization token to identify which user is sending the request. The token can be acquired from the login API. **Success Response Code:** 200 **Error Response Code:** 500 (Internal Server Error), 404 (Not Found Error), 401 (Unauthorized Error) **Example Response:** .. raw:: html
Output .. code-block:: text { "name":"ns1obcrh_nss1", "namespace":"ns1", "desc":"Namespace ns1 snapshot", "appname":"ns1obcrh", "app_ns":"ns1", "kind":"flexapp", "description":"Namespace ns1 snapshot", "spec":[ { "apiVersion":"v1", "data":{ "run.sh":"" }, "kind":"ConfigMap", "metadata":{ "annotations":{ "meta.helm.sh\/release-name":"mysql1", "meta.helm.sh\/release-namespace":"ns1" }, "labels":{ "app":"mysql1", "app.kubernetes.io\/managed-by":"Helm", "chart":"mysql-1.6.7", "heritage":"Helm", "release":"mysql1" }, "name":"mysql1-test", "namespace":"ns1" } }, { "apiVersion":"v1", "data":{ "mysql-password":"WkFLQ2tnZnJETA==", "mysql-root-password":"MTh4WUpMVFNPag==" }, "kind":"Secret", "metadata":{ "annotations":{ "meta.helm.sh\/release-name":"mysql1", "meta.helm.sh\/release-namespace":"ns1" }, "labels":{ "app":"mysql1", "app.kubernetes.io\/managed-by":"Helm", "chart":"mysql-1.6.7", "heritage":"Helm", "release":"mysql1" }, "name":"mysql1", "namespace":"ns1" }, "type":"Opaque" }, { "apiVersion":"v1", "kind":"PersistentVolumeClaim", "metadata":{ "annotations":{ "meta.helm.sh\/release-name":"mysql1", "meta.helm.sh\/release-namespace":"ns1", "robin.io\/appid":"1", "robin.io\/blocksize":"4096", "robin.io\/encryption":"none", "robin.io\/fstype":"ext4", "robin.io\/snapname":"ns1obcrh_nss1", "robin.io\/snapshotid":"4", "robin.io\/vol_snapname":"nss1", "robin.io\/volumeid":"9", "robin.io\/volumename":"pvc-574b9417-0dd9-4eef-8d9b-9269d95be0ce", "robin.io\/zoneid":"1630920119", "volume.beta.kubernetes.io\/storage-provisioner":"robin" }, "labels":{ "app":"mysql1", "app.kubernetes.io\/managed-by":"Helm", "chart":"mysql-1.6.7", "heritage":"Helm", "release":"mysql1" }, "name":"mysql1", "namespace":"ns1" }, "spec":{ "accessModes":[ "ReadWriteOnce" ], "resources":{ "requests":{ "storage":"1Gi" } }, "storageClassName":"robin", "volumeMode":"Filesystem" } }, { "apiVersion":"v1", "kind":"Service", "metadata":{ "annotations":{ "meta.helm.sh\/release-name":"mysql1", "meta.helm.sh\/release-namespace":"ns1" }, "labels":{ "app":"mysql1", "app.kubernetes.io\/managed-by":"Helm", "chart":"mysql-1.6.7", "heritage":"Helm", "release":"mysql1" }, "name":"mysql1", "namespace":"ns1" }, "spec":{ "ipFamilies":[ "IPv4" ], "ipFamilyPolicy":"SingleStack", "ports":[ { "name":"mysql", "port":3306, "protocol":"TCP", "targetPort":"mysql" } ], "selector":{ "app":"mysql1" }, "sessionAffinity":"None", "type":"ClusterIP" } }, { "apiVersion":"apps\/v1", "kind":"Deployment", "metadata":{ "annotations":{ "deployment.kubernetes.io\/revision":"1", "meta.helm.sh\/release-name":"mysql1", "meta.helm.sh\/release-namespace":"ns1" }, "labels":{ "app":"mysql1", "app.kubernetes.io\/managed-by":"Helm", "chart":"mysql-1.6.7", "heritage":"Helm", "release":"mysql1" }, "name":"mysql1", "namespace":"ns1" }, "spec":{ "progressDeadlineSeconds":600, "replicas":1, "revisionHistoryLimit":10, "selector":{ "matchLabels":{ "app":"mysql1", "release":"mysql1" } }, "strategy":{ "type":"Recreate" }, "template":{ "metadata":{ "creationTimestamp":null, "labels":{ "app":"mysql1", "release":"mysql1" } }, "spec":{ "containers":[ { "env":[ { "name":"MYSQL_ROOT_PASSWORD", "valueFrom":{ "secretKeyRef":{ "key":"mysql-root-password", "name":"mysql1" } } }, { "name":"MYSQL_PASSWORD", "valueFrom":{ "secretKeyRef":{ "key":"mysql-password", "name":"mysql1", "optional":true } } }, { "name":"MYSQL_USER" }, { "name":"MYSQL_DATABASE" } ], "image":"mysql:5.7.30", "imagePullPolicy":"IfNotPresent", "livenessProbe":{ "exec":{ "command":[ "sh", "-c", "mysqladmin ping -u root -p${MYSQL_ROOT_PASSWORD}" ] }, "failureThreshold":3, "initialDelaySeconds":30, "periodSeconds":10, "successThreshold":1, "timeoutSeconds":5 }, "name":"mysql1", "ports":[ { "containerPort":3306, "name":"mysql", "protocol":"TCP" } ], "readinessProbe":{ "exec":{ "command":[ "sh", "-c", "mysqladmin ping -u root -p${MYSQL_ROOT_PASSWORD}" ] }, "failureThreshold":3, "initialDelaySeconds":5, "periodSeconds":10, "successThreshold":1, "timeoutSeconds":1 }, "resources":{ "requests":{ "cpu":"100m", "memory":"256Mi" } }, "securityContext":{ "privileged":true, "runAsUser":0 }, "terminationMessagePath":"\/dev\/termination-log", "terminationMessagePolicy":"File", "volumeMounts":[ { "mountPath":"\/var\/lib\/mysql", "name":"data" } ] } ], "dnsPolicy":"ClusterFirst", "initContainers":[ { "command":[ "rm", "-fr", "\/var\/lib\/mysql\/lost+found" ], "image":"busybox:1.32", "imagePullPolicy":"IfNotPresent", "name":"remove-lost-found", "resources":{ "requests":{ "cpu":"10m", "memory":"10Mi" } }, "terminationMessagePath":"\/dev\/termination-log", "terminationMessagePolicy":"File", "volumeMounts":[ { "mountPath":"\/var\/lib\/mysql", "name":"data" } ] } ], "restartPolicy":"Always", "schedulerName":"default-scheduler", "securityContext":{ }, "serviceAccount":"default", "serviceAccountName":"default", "terminationGracePeriodSeconds":30, "volumes":[ { "name":"data", "persistentVolumeClaim":{ "claimName":"mysql1" } } ] } } } } ], "tenant":"Administrators", "username":"admin", "id":"fc0e74ba0fc611ec90008fd9e303c008", "num_backups":0, "state":"ONLINE", "create_time":1631010811, "restored":false, "appnames":{ "mysql1":{ "mysql1":{ } } }, "volumes":[ { "name":"pvc-574b9417-0dd9-4eef-8d9b-9269d95be0ce", "size":1073741824, "snapshotsize":0 } ], "num_volumes":1, "restore_status":{ "bytes_count":0, "bytes_skipped":0, "bytes_transferred":0, "creation_time":0, "creation_end_time":0 }, "backups":[ ], "app_kind":"k8s" } .. raw:: html
.. What happens when a snapshot is deleted? ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ TODO -- explain (1) how snapshot tree is adjusted, (2) how is space given back to the system, (3) how are backups of the snapshot being deleted treated etc. What happens when a snapshot is taken? ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ TODO -- explain (1) what Row snapshots are (2) How are a group of volumes snapshotted together, (3) explain what app consistent snapshots mean etc