Spec: Support kubernetes pod with persistent volumes protection plugin

Change-Id: I72c0e63a57c200a6800556fb6a2843ad6088ac9a
Implements: blueprint kubernetes-pods-protection-plugin
This commit is contained in:
chenying 2017-08-16 17:46:41 +08:00
parent e9160d22ce
commit dfd09a3b2f
2 changed files with 217 additions and 0 deletions

View File

@ -32,6 +32,7 @@ Approved Specs
operation-log-api
policy-in-code
freezer-protection-plugin
kubernetes-pods-protection-plugin
Spec Template
-------------

View File

@ -0,0 +1,216 @@
..
This work is licensed under a Creative Commons Attribution 3.0 Unported
License.
http://creativecommons.org/licenses/by/3.0/legalcode
=============================================================================
The kubernetes pod with persistent volumes protectable and protection plugins
=============================================================================
https://blueprints.launchpad.net/karbor/+spec/kubernetes-pods-protection-plugin
Problem description
===================
With the rapid development of cloud computing, there is a trend of explosive growth in cloud
data over recent years. Cloud data backup and recovery has become an urgent topic which the
customers concern. Running Kubernetes on OpenStack becames more and more popular. The data
protection of the application on Kubernetes also need be considered.
In this spec we would like to introduce a plugin in Karbor to protect your application deployed
in Kubernetes which runs on top of OpenStack. The application data protected by Karbor include
the configurations and metadata in etcd service, and the persistent volume provided by Cinder.
Use Cases
=========
The kubernetes cluster can run on openstack instances using Openstack cloud provider, the pods
can be created with persistent volumes provided by Cinder. This bp adds kubernetes pods with
persistent volumes protection plugin in Karbor.
Proposed change
===============
The kubernetes pod protectable plugin:
--------------------------------------
A new protectable plugin about The kubernetes pod need be implemented.
The type of resource the kubernetes pod is "OS::Kubernetes::Pod". It will be added to the constant
RESOURCE_TYPES in Karbor.
1. The parent resource types: PROJECT_RESOURCE_TYPE
2. list the resources:
This interface of plugin will call the 'list_pod_for_all_namespaces' API method in the
kubernetes python client[1].
3. show the resource:
This interface of plugin will call the 'read_namespaced_pod' method API method in the
kubernetes python client. The parameter is a pod id.
4. get dependent resources:
The parameter parent_resource is a project, this interface of plugin will return the
kubernetes pod in this project.
The volume protectable plugin:
------------------------------
1. Add a new parent resource types: "OS::Kubernetes::Pod"
2. get dependent resources:
The parameter parent_resource is a kubernetes pod, this interface of plugin will return the
persistent volumes list provided by Cinder in the this parent resource pod.
The kubernetes pod protection plugin
------------------------------------
A new protection plugin about the kubernetes pod need be implemented.
1. Protect Operation:
The configurations and metadata in etcd service about the pod will be saved to
the bank of Karbor.
2. Restore Operation:
The persistent volumes of the pod will be restored by Cinder Volume plugins.
Get the the configurations and metadata in etcd service about the pod from bank, and create
a new pod with restored persistent volumes from cinder in the kubernetes cluster.
3. Delete Operation:
The configurations and metadata about the pod will be deleted from the bank.
The backup data of persistent volumes will be deleted from Cinder.
The kubernetes pod protection plugin schema:
--------------------------------------------
::
OPTIONS_SCHEMA = {
"title": "The kubernetes pod Protection Options",
"type": "object",
"properties": {
"backup_name": {
"type": "string",
"title": "Backup Name",
"description": "The name of the kubernetes pod backup."
},
"description": {
"type": "string",
"title": "Description",
"description": "The description of the kubernetes pod backup."
}
},
"required": ["backup_name", "description"]
}
RESTORE_SCHEMA = {
"title": "The kubernetes pod Protection Restore",
"type": "object",
"properties": {
"restore_name": {
"type": "string",
"title": "Restore Name",
"description": "The name of the restored kubernetes pod.",
"default": None
},
"restore_description": {
"type": "string",
"title": "Restore Description",
"description": "The description of the restored kubernetes pod.",
"default": None
}
}
}
Alternatives
------------
None
Data model impact
-----------------
None
REST API impact
---------------
None
Security impact
---------------
None
Notifications impact
--------------------
None
Other end user impact
---------------------
None
Performance Impact
------------------
None
Other deployer impact
---------------------
Add the kubernetes pod protection plugin endpoint to setup.cfg.
Add the kubernetes pod protection plugin configuration to provider file.
Developer impact
----------------
None
Implementation
==============
Assignee(s)
-----------
Work Items
----------
* Write kubernetes pod backup protectable plugin
* Write kubernetes pod backup protection plugin
* Write tests
* Add a usage example about kubernetes pod protection
Dependencies
============
None
Testing
=======
Unit tests in Karbor.
Documentation Impact
====================
Add a usage example about kubernetes pod protection.
References
==========
[1] https://github.com/kubernetes-incubator/client-python