Repository files navigation

Kanister Logo

Kanister

Go Report CardGitHub Actions

Kanister is a data protection workflow management tool. It provides a set of cohesive APIs for defining and curating data operations by abstracting away tedious details around executing data operations on Kubernetes. It's extensible and easy to install, operate and scale.

Highlights

Kubernetes centric - Kanister's APIs are implemented as Custom Resource Definitions that conforms to Kubernetes' declarative management, security and distribution models.

Storage agnostic - Kanister allows you to efficiently and securely transfer backup data between your services and the object storage service of your choice. Use Kanister to backup, restore, and copy your data using your storage's APIs, and Kanister won't get in the way.

Asynchronous or synchronous task execution - Kanister can schedule your data operation to run asynchronously in dedicated job pods, or synchronously via Kubernetes apimachinery ExecStream framework.

Re-usable workflow artifacts - A Kanister blueprint can be re-used across multiple workflows to protect different environment deployments.

Extensible, atomic data operation functions - Kanister provides a collection of easy-to-use data operation functions that you can add to your blueprint to express detailed backup and restore operation steps, including pre-backup scaling down of replicas, working with all mounted volumes in a pod etc.

Secured via RBAC - Prevent unauthorized access to your workflows via Kubernetes role-based access control model.

Observability - Kanister exposes logs, events and metrics to popular observability tools like Prometheus, Grafana and Loki to provide you with operational insights into your data protection workflows.

Quickstart

Follow the instructions in the installation documentation, to install Kanister on your Kubernetes cluster.

Walk through the tutorial to define, curate and run your first data protection workflow using Kanister blueprints, actionsets and profiles.

The examples directory contains many sample blueprints that you can use to define data operations for:

The Kanister architecture is documented here.

Getting Help

If you have any questions or run into issues, feel free to reach out to us on Slack.

GitHub issues or pull requests that have been inactive for more than 60 days will be labeled as stale. If they remained inactive for another 30 days, they will be automatically closed. To be exempted from the issue lifecycle, discuss with a maintainer the reasons behind the exemption, and add the frozen label to the issue or pull request.

If you discovered any security issues, refer to our SECURITY.md documentation for our security policy, including steps on how to report vulnerabilities.

Community

The Kanister community meetings happen once every two weeks on Thursday, 16:00 UTC, where we discuss ongoing interesting features, issues, and pull requests. Come join us! Everyone is welcome! 🙌 (Zoom link is pinned on Slack)

If you are currently using Kanister, we would love to hear about it! Feel free to add your organization to the ADOPTERS.md by submitting a pull request.

Code of Conduct

Kanister is for everyone. We ask that our users and contributors take a few minutes to review our Code of Conduct.

Resources

License

Apache License 2.0, see LICENSE.

About

An extensible framework for application-level data management on Kubernetes

Resources

Code of conduct

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

Kanister Logo

Kanister

Go Report CardGitHub Actions

Kanister is a data protection workflow management tool. It provides a set of cohesive APIs for defining and curating data operations by abstracting away tedious details around executing data operations on Kubernetes. It's extensible and easy to install, operate and scale.

Highlights

Kubernetes centric - Kanister's APIs are implemented as Custom Resource Definitions that conforms to Kubernetes' declarative management, security and distribution models.

Storage agnostic - Kanister allows you to efficiently and securely transfer backup data between your services and the object storage service of your choice. Use Kanister to backup, restore, and copy your data using your storage's APIs, and Kanister won't get in the way.

Asynchronous or synchronous task execution - Kanister can schedule your data operation to run asynchronously in dedicated job pods, or synchronously via Kubernetes apimachinery ExecStream framework.

Re-usable workflow artifacts - A Kanister blueprint can be re-used across multiple workflows to protect different environment deployments.

Extensible, atomic data operation functions - Kanister provides a collection of easy-to-use data operation functions that you can add to your blueprint to express detailed backup and restore operation steps, including pre-backup scaling down of replicas, working with all mounted volumes in a pod etc.

Secured via RBAC - Prevent unauthorized access to your workflows via Kubernetes role-based access control model.

Observability - Kanister exposes logs, events and metrics to popular observability tools like Prometheus, Grafana and Loki to provide you with operational insights into your data protection workflows.

Quickstart

Follow the instructions in the installation documentation, to install Kanister on your Kubernetes cluster.

Walk through the tutorial to define, curate and run your first data protection workflow using Kanister blueprints, actionsets and profiles.

The examples directory contains many sample blueprints that you can use to define data operations for:

The Kanister architecture is documented here.

Getting Help

If you have any questions or run into issues, feel free to reach out to us on Slack.

GitHub issues or pull requests that have been inactive for more than 60 days will be labeled as stale. If they remained inactive for another 30 days, they will be automatically closed. To be exempted from the issue lifecycle, discuss with a maintainer the reasons behind the exemption, and add the frozen label to the issue or pull request.

If you discovered any security issues, refer to our SECURITY.md documentation for our security policy, including steps on how to report vulnerabilities.

Community

The Kanister community meetings happen once every two weeks on Thursday, 16:00 UTC, where we discuss ongoing interesting features, issues, and pull requests. Come join us! Everyone is welcome! 🙌 (Zoom link is pinned on Slack)

If you are currently using Kanister, we would love to hear about it! Feel free to add your organization to the ADOPTERS.md by submitting a pull request.

Code of Conduct

Kanister is for everyone. We ask that our users and contributors take a few minutes to review our Code of Conduct.

Resources

License

Apache License 2.0, see LICENSE.

About

An extensible framework for application-level data management on Kubernetes

Resources

Code of conduct

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Kanister Logo

Kanister

Go Report CardGitHub Actions

Kanister is a data protection workflow management tool. It provides a set of cohesive APIs for defining and curating data operations by abstracting away tedious details around executing data operations on Kubernetes. It's extensible and easy to install, operate and scale.

Highlights

Kubernetes centric - Kanister's APIs are implemented as Custom Resource Definitions that conforms to Kubernetes' declarative management, security and distribution models.

Storage agnostic - Kanister allows you to efficiently and securely transfer backup data between your services and the object storage service of your choice. Use Kanister to backup, restore, and copy your data using your storage's APIs, and Kanister won't get in the way.

Asynchronous or synchronous task execution - Kanister can schedule your data operation to run asynchronously in dedicated job pods, or synchronously via Kubernetes apimachinery ExecStream framework.

Re-usable workflow artifacts - A Kanister blueprint can be re-used across multiple workflows to protect different environment deployments.

Extensible, atomic data operation functions - Kanister provides a collection of easy-to-use data operation functions that you can add to your blueprint to express detailed backup and restore operation steps, including pre-backup scaling down of replicas, working with all mounted volumes in a pod etc.

Secured via RBAC - Prevent unauthorized access to your workflows via Kubernetes role-based access control model.

Observability - Kanister exposes logs, events and metrics to popular observability tools like Prometheus, Grafana and Loki to provide you with operational insights into your data protection workflows.

Quickstart

Follow the instructions in the installation documentation, to install Kanister on your Kubernetes cluster.

Walk through the tutorial to define, curate and run your first data protection workflow using Kanister blueprints, actionsets and profiles.

The examples directory contains many sample blueprints that you can use to define data operations for:

The Kanister architecture is documented here.

Getting Help

If you have any questions or run into issues, feel free to reach out to us on Slack.

GitHub issues or pull requests that have been inactive for more than 60 days will be labeled as stale. If they remained inactive for another 30 days, they will be automatically closed. To be exempted from the issue lifecycle, discuss with a maintainer the reasons behind the exemption, and add the frozen label to the issue or pull request.

If you discovered any security issues, refer to our SECURITY.md documentation for our security policy, including steps on how to report vulnerabilities.

Community

The Kanister community meetings happen once every two weeks on Thursday, 16:00 UTC, where we discuss ongoing interesting features, issues, and pull requests. Come join us! Everyone is welcome! 🙌 (Zoom link is pinned on Slack)

If you are currently using Kanister, we would love to hear about it! Feel free to add your organization to the ADOPTERS.md by submitting a pull request.

Code of Conduct

Kanister is for everyone. We ask that our users and contributors take a few minutes to review our Code of Conduct.

Resources

License

Apache License 2.0, see LICENSE.

About

An extensible framework for application-level data management on Kubernetes

Resources

Code of conduct

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Kanister Logo

Kanister

Go Report CardGitHub Actions

Kanister is a data protection workflow management tool. It provides a set of cohesive APIs for defining and curating data operations by abstracting away tedious details around executing data operations on Kubernetes. It's extensible and easy to install, operate and scale.

Highlights

Kubernetes centric - Kanister's APIs are implemented as Custom Resource Definitions that conforms to Kubernetes' declarative management, security and distribution models.

Storage agnostic - Kanister allows you to efficiently and securely transfer backup data between your services and the object storage service of your choice. Use Kanister to backup, restore, and copy your data using your storage's APIs, and Kanister won't get in the way.

Asynchronous or synchronous task execution - Kanister can schedule your data operation to run asynchronously in dedicated job pods, or synchronously via Kubernetes apimachinery ExecStream framework.

Re-usable workflow artifacts - A Kanister blueprint can be re-used across multiple workflows to protect different environment deployments.

Extensible, atomic data operation functions - Kanister provides a collection of easy-to-use data operation functions that you can add to your blueprint to express detailed backup and restore operation steps, including pre-backup scaling down of replicas, working with all mounted volumes in a pod etc.

Secured via RBAC - Prevent unauthorized access to your workflows via Kubernetes role-based access control model.

Observability - Kanister exposes logs, events and metrics to popular observability tools like Prometheus, Grafana and Loki to provide you with operational insights into your data protection workflows.

Quickstart

Follow the instructions in the installation documentation, to install Kanister on your Kubernetes cluster.

Walk through the tutorial to define, curate and run your first data protection workflow using Kanister blueprints, actionsets and profiles.

The examples directory contains many sample blueprints that you can use to define data operations for:

The Kanister architecture is documented here.

Getting Help

If you have any questions or run into issues, feel free to reach out to us on Slack.

GitHub issues or pull requests that have been inactive for more than 60 days will be labeled as stale. If they remained inactive for another 30 days, they will be automatically closed. To be exempted from the issue lifecycle, discuss with a maintainer the reasons behind the exemption, and add the frozen label to the issue or pull request.

If you discovered any security issues, refer to our SECURITY.md documentation for our security policy, including steps on how to report vulnerabilities.

Community

The Kanister community meetings happen once every two weeks on Thursday, 16:00 UTC, where we discuss ongoing interesting features, issues, and pull requests. Come join us! Everyone is welcome! 🙌 (Zoom link is pinned on Slack)

If you are currently using Kanister, we would love to hear about it! Feel free to add your organization to the ADOPTERS.md by submitting a pull request.

Code of Conduct

Kanister is for everyone. We ask that our users and contributors take a few minutes to review our Code of Conduct.

Resources

License

Apache License 2.0, see LICENSE.

About

An extensible framework for application-level data management on Kubernetes

Resources

Code of conduct

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

Kanister Logo

Kanister

Go Report CardGitHub Actions

Kanister is a data protection workflow management tool. It provides a set of cohesive APIs for defining and curating data operations by abstracting away tedious details around executing data operations on Kubernetes. It's extensible and easy to install, operate and scale.

Highlights

Kubernetes centric - Kanister's APIs are implemented as Custom Resource Definitions that conforms to Kubernetes' declarative management, security and distribution models.

Storage agnostic - Kanister allows you to efficiently and securely transfer backup data between your services and the object storage service of your choice. Use Kanister to backup, restore, and copy your data using your storage's APIs, and Kanister won't get in the way.

Asynchronous or synchronous task execution - Kanister can schedule your data operation to run asynchronously in dedicated job pods, or synchronously via Kubernetes apimachinery ExecStream framework.

Re-usable workflow artifacts - A Kanister blueprint can be re-used across multiple workflows to protect different environment deployments.

Extensible, atomic data operation functions - Kanister provides a collection of easy-to-use data operation functions that you can add to your blueprint to express detailed backup and restore operation steps, including pre-backup scaling down of replicas, working with all mounted volumes in a pod etc.

Secured via RBAC - Prevent unauthorized access to your workflows via Kubernetes role-based access control model.

Observability - Kanister exposes logs, events and metrics to popular observability tools like Prometheus, Grafana and Loki to provide you with operational insights into your data protection workflows.

Quickstart

Follow the instructions in the installation documentation, to install Kanister on your Kubernetes cluster.

Walk through the tutorial to define, curate and run your first data protection workflow using Kanister blueprints, actionsets and profiles.

The examples directory contains many sample blueprints that you can use to define data operations for:

The Kanister architecture is documented here.

Getting Help

If you have any questions or run into issues, feel free to reach out to us on Slack.

GitHub issues or pull requests that have been inactive for more than 60 days will be labeled as stale. If they remained inactive for another 30 days, they will be automatically closed. To be exempted from the issue lifecycle, discuss with a maintainer the reasons behind the exemption, and add the frozen label to the issue or pull request.

If you discovered any security issues, refer to our SECURITY.md documentation for our security policy, including steps on how to report vulnerabilities.

Community

The Kanister community meetings happen once every two weeks on Thursday, 16:00 UTC, where we discuss ongoing interesting features, issues, and pull requests. Come join us! Everyone is welcome! 🙌 (Zoom link is pinned on Slack)

If you are currently using Kanister, we would love to hear about it! Feel free to add your organization to the ADOPTERS.md by submitting a pull request.

Code of Conduct

Kanister is for everyone. We ask that our users and contributors take a few minutes to review our Code of Conduct.

Resources

License

Apache License 2.0, see LICENSE.

About

An extensible framework for application-level data management on Kubernetes

Resources

Code of conduct

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Kanister Logo

Kanister

Go Report CardGitHub Actions

Kanister is a data protection workflow management tool. It provides a set of cohesive APIs for defining and curating data operations by abstracting away tedious details around executing data operations on Kubernetes. It's extensible and easy to install, operate and scale.

Highlights

Kubernetes centric - Kanister's APIs are implemented as Custom Resource Definitions that conforms to Kubernetes' declarative management, security and distribution models.

Storage agnostic - Kanister allows you to efficiently and securely transfer backup data between your services and the object storage service of your choice. Use Kanister to backup, restore, and copy your data using your storage's APIs, and Kanister won't get in the way.

Asynchronous or synchronous task execution - Kanister can schedule your data operation to run asynchronously in dedicated job pods, or synchronously via Kubernetes apimachinery ExecStream framework.

Re-usable workflow artifacts - A Kanister blueprint can be re-used across multiple workflows to protect different environment deployments.

Extensible, atomic data operation functions - Kanister provides a collection of easy-to-use data operation functions that you can add to your blueprint to express detailed backup and restore operation steps, including pre-backup scaling down of replicas, working with all mounted volumes in a pod etc.

Secured via RBAC - Prevent unauthorized access to your workflows via Kubernetes role-based access control model.

Observability - Kanister exposes logs, events and metrics to popular observability tools like Prometheus, Grafana and Loki to provide you with operational insights into your data protection workflows.

Quickstart

Follow the instructions in the installation documentation, to install Kanister on your Kubernetes cluster.

Walk through the tutorial to define, curate and run your first data protection workflow using Kanister blueprints, actionsets and profiles.

The examples directory contains many sample blueprints that you can use to define data operations for:

The Kanister architecture is documented here.

Getting Help

If you have any questions or run into issues, feel free to reach out to us on Slack.

GitHub issues or pull requests that have been inactive for more than 60 days will be labeled as stale. If they remained inactive for another 30 days, they will be automatically closed. To be exempted from the issue lifecycle, discuss with a maintainer the reasons behind the exemption, and add the frozen label to the issue or pull request.

If you discovered any security issues, refer to our SECURITY.md documentation for our security policy, including steps on how to report vulnerabilities.

Community

The Kanister community meetings happen once every two weeks on Thursday, 16:00 UTC, where we discuss ongoing interesting features, issues, and pull requests. Come join us! Everyone is welcome! 🙌 (Zoom link is pinned on Slack)

If you are currently using Kanister, we would love to hear about it! Feel free to add your organization to the ADOPTERS.md by submitting a pull request.

Code of Conduct

Kanister is for everyone. We ask that our users and contributors take a few minutes to review our Code of Conduct.

Resources

License

Apache License 2.0, see LICENSE.

About

An extensible framework for application-level data management on Kubernetes

Resources

Code of conduct

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Kanister Logo

Kanister

Go Report CardGitHub Actions

Kanister is a data protection workflow management tool. It provides a set of cohesive APIs for defining and curating data operations by abstracting away tedious details around executing data operations on Kubernetes. It's extensible and easy to install, operate and scale.

Highlights

Kubernetes centric - Kanister's APIs are implemented as Custom Resource Definitions that conforms to Kubernetes' declarative management, security and distribution models.

Storage agnostic - Kanister allows you to efficiently and securely transfer backup data between your services and the object storage service of your choice. Use Kanister to backup, restore, and copy your data using your storage's APIs, and Kanister won't get in the way.

Asynchronous or synchronous task execution - Kanister can schedule your data operation to run asynchronously in dedicated job pods, or synchronously via Kubernetes apimachinery ExecStream framework.

Re-usable workflow artifacts - A Kanister blueprint can be re-used across multiple workflows to protect different environment deployments.

Extensible, atomic data operation functions - Kanister provides a collection of easy-to-use data operation functions that you can add to your blueprint to express detailed backup and restore operation steps, including pre-backup scaling down of replicas, working with all mounted volumes in a pod etc.

Secured via RBAC - Prevent unauthorized access to your workflows via Kubernetes role-based access control model.

Observability - Kanister exposes logs, events and metrics to popular observability tools like Prometheus, Grafana and Loki to provide you with operational insights into your data protection workflows.

Quickstart

Follow the instructions in the installation documentation, to install Kanister on your Kubernetes cluster.

Walk through the tutorial to define, curate and run your first data protection workflow using Kanister blueprints, actionsets and profiles.

The examples directory contains many sample blueprints that you can use to define data operations for:

The Kanister architecture is documented here.

Getting Help

If you have any questions or run into issues, feel free to reach out to us on Slack.

GitHub issues or pull requests that have been inactive for more than 60 days will be labeled as stale. If they remained inactive for another 30 days, they will be automatically closed. To be exempted from the issue lifecycle, discuss with a maintainer the reasons behind the exemption, and add the frozen label to the issue or pull request.

If you discovered any security issues, refer to our SECURITY.md documentation for our security policy, including steps on how to report vulnerabilities.

Community

The Kanister community meetings happen once every two weeks on Thursday, 16:00 UTC, where we discuss ongoing interesting features, issues, and pull requests. Come join us! Everyone is welcome! 🙌 (Zoom link is pinned on Slack)

If you are currently using Kanister, we would love to hear about it! Feel free to add your organization to the ADOPTERS.md by submitting a pull request.

Code of Conduct

Kanister is for everyone. We ask that our users and contributors take a few minutes to review our Code of Conduct.

Resources

License

Apache License 2.0, see LICENSE.

About

An extensible framework for application-level data management on Kubernetes

Resources

Code of conduct

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

Kanister Logo

Kanister

Go Report CardGitHub Actions

Kanister is a data protection workflow management tool. It provides a set of cohesive APIs for defining and curating data operations by abstracting away tedious details around executing data operations on Kubernetes. It's extensible and easy to install, operate and scale.

Highlights

Kubernetes centric - Kanister's APIs are implemented as Custom Resource Definitions that conforms to Kubernetes' declarative management, security and distribution models.

Storage agnostic - Kanister allows you to efficiently and securely transfer backup data between your services and the object storage service of your choice. Use Kanister to backup, restore, and copy your data using your storage's APIs, and Kanister won't get in the way.

Asynchronous or synchronous task execution - Kanister can schedule your data operation to run asynchronously in dedicated job pods, or synchronously via Kubernetes apimachinery ExecStream framework.

Re-usable workflow artifacts - A Kanister blueprint can be re-used across multiple workflows to protect different environment deployments.

Extensible, atomic data operation functions - Kanister provides a collection of easy-to-use data operation functions that you can add to your blueprint to express detailed backup and restore operation steps, including pre-backup scaling down of replicas, working with all mounted volumes in a pod etc.

Secured via RBAC - Prevent unauthorized access to your workflows via Kubernetes role-based access control model.

Observability - Kanister exposes logs, events and metrics to popular observability tools like Prometheus, Grafana and Loki to provide you with operational insights into your data protection workflows.

Quickstart

Follow the instructions in the installation documentation, to install Kanister on your Kubernetes cluster.

Walk through the tutorial to define, curate and run your first data protection workflow using Kanister blueprints, actionsets and profiles.

The examples directory contains many sample blueprints that you can use to define data operations for:

The Kanister architecture is documented here.

Getting Help

If you have any questions or run into issues, feel free to reach out to us on Slack.

GitHub issues or pull requests that have been inactive for more than 60 days will be labeled as stale. If they remained inactive for another 30 days, they will be automatically closed. To be exempted from the issue lifecycle, discuss with a maintainer the reasons behind the exemption, and add the frozen label to the issue or pull request.

If you discovered any security issues, refer to our SECURITY.md documentation for our security policy, including steps on how to report vulnerabilities.

Community

The Kanister community meetings happen once every two weeks on Thursday, 16:00 UTC, where we discuss ongoing interesting features, issues, and pull requests. Come join us! Everyone is welcome! 🙌 (Zoom link is pinned on Slack)

If you are currently using Kanister, we would love to hear about it! Feel free to add your organization to the ADOPTERS.md by submitting a pull request.

Code of Conduct

Kanister is for everyone. We ask that our users and contributors take a few minutes to review our Code of Conduct.

Resources

License

Apache License 2.0, see LICENSE.

About

An extensible framework for application-level data management on Kubernetes

Resources

Code of conduct

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages