The K10 Application resource is in developer preview and a number of breaking changes to the resource API schema may happen in subsequent releases.
A K10 Application resource represents an application that K10 has automatically discovered on the Kubernetes cluster. The application encapsulates all stateless and stateful resources that comprise the application.
Life Cycle and Namespaces
K10 Application resources are read-only and are automatically instantiated by K10 when it discovers applications that are running on the Kubernetes cluster.
A K10 Application resource is available in for each application that is currently running in the cluster. This resource resides in the same namespace as the application that it corresponds to.
When an application, for which K10 has at least one existing RestorePointContent from a previous backup, is deleted from the cluster, a K10 Application resource representing the application is still available in the namespace where K10 is installed. The resource will be marked as a deleted application, but it will be possible for an administrator to restore the application.
K10 Apps are also available to track applications that have been deleted from the Kubernetes cluster, but are available to be restored based on an existing RestorePointContent captured by K10.
K10 Application Operations
List K10 Applications
The K10 Application API allows you to discover all applications that are installed and currently present on the Kubernetes cluster.
# list available applications $ kubectl get applications.apps.kio.kasten.io --namespace kasten-io \ --field-selector=status.state=Active NAME AGE my-app-1 <unknown> my-app-2 <unknown> my-app-3 <unknown>
List Deleted K10 Applications
The K10 Application API allows you to discover applications that K10 can restore which have been previously deleted from the cluster.
# list deleted applications $ kubectl get applications.apps.kio.kasten.io --namespace kasten-io \ --field-selector=status.state=Deleted NAME AGE my-app-5 <unknown> my-app-6 <unknown>
Restore Deleted K10 Applications
In addition to discovery of deleted applications, K10 makes it possible to restore an application that has been deleted but was previously protected.
The procedure, which requires K10 administrative privileges, is as follows:
Step 1: Find the RestorePointContent that corresponds to the desired point-in-time.
Step 2: Re-create the namespace where you would like to restore the application.
Step 3: Create a RestorePoint in the new namespace that is backed by the RestorePointContent. See Creating RestorePoint from RestorePointContent Example for details.
Step 4: Initiate a RestoreAction to restore the application from the created RestorePoint. See RestoreAction for details.
Get K10 Application Components
In addition to discovering the applications on the cluster, K10 also tracks all resources associated with the application. You can get a summary of all resources (stateful and stateless) discovered in the context of the application. This is done by querying a details sub-resource for the particular application you are interested in.
# get the details of application named <APPNAME> in namespace <NS> # yq is used for readability $ kubectl get --raw /apis/apps.kio.kasten.io/v1alpha1/namespaces/<NS>/applications/<APPNAME>/details | yq -y .status.appDetails components: config: - kind: secret name: default-token-wghrq namespace: sample-app - kind: secret name: muddled-saola-postgresql namespace: sample-app network: - kind: service name: muddled-saola-postgresql namespace: sample-app - kind: service name: muddled-saola-postgresql-headless namespace: sample-app volumes: - persistentVolumeClaimName: datadir size: 1 type: EBS workloads: - kind: statefulset name: muddled-saola-postgresql namespace: sample-app
Initiate Backup for an Application
K10 Apps can be protected on a scheduled basis using a Policy or in an ad hoc manner using a BackupAction.
K10App API Type
The following is a complete specification of the K10 Application resource.
The K10App resource is read-only.
# Standard Kubernetes API Version declaration. Required. apiVersion: apps.kio.kasten.io/v1alpha1 # Standard Kubernetes Kind declaration. Required. kind: Application # Standard Kubernetes metadata. Required. metadata: # Name of the K10App. Auto-derived. name: sample-app # Namespace of the K10App. Auto-derived. namespace: sample-app # Timestamp for when the application was created. creationTimestamp: '2019-02-11T03:03:47Z' # K10App parameters. Required. spec: # Currently only applications defines as namespaces are supported. # This may change in the near future with additional app types # Namespaced based app. namespace: # Name of the namespace hosting the application name: sample-app # Status of the K10App. Users should not set any data here. status: # State of the application. # Possible values: # Active - application is currently active # Deleted - application is not active but can be recovered state: Active
K10App Details API Type
The following is a complete specification of the appDetails section of the K10 Application API. These fields are only available in the K10 Application API when the details sub-resource is used as shown in the example above.
apiVersion: apps.kio.kasten.io/v1alpha1 kind: Application ... spec: ... status: ... # Details about the components of the application. appDetails: # Categorized components of the application components: # List of 'config' components. config: # Zero or more elements. # Kind for config components. # Possible values: secret | configmap - kind: secret # Kubernetes name of the component name: default-token-wghrq # Namespace of the component namespace: sample-app # List of 'network' components network: # Analogous to 'config'. # Possible kinds: service | ingress # List of 'workload' components workloads: # Analogous to 'config'. # Possible kinds: deployment | statefulset | cronjob # List of 'volumes' components volumes: # Zero or more elements. # PVC entry map with the following supported keys: # persistentVolumeClaimName - name of PVC # size - size of underlying volume in GB # type - identifier of disk type - persistentVolumeClaimName: datadir size: 1 type: EBS # Additional component types maybe introduced.