{"id":13439447,"url":"https://github.com/k8up-io/k8up","last_synced_at":"2026-01-12T07:53:40.535Z","repository":{"id":36957586,"uuid":"166203864","full_name":"k8up-io/k8up","owner":"k8up-io","description":"Kubernetes and OpenShift Backup Operator","archived":false,"fork":false,"pushed_at":"2024-05-22T02:57:02.000Z","size":52120,"stargazers_count":569,"open_issues_count":89,"forks_count":60,"subscribers_count":13,"default_branch":"master","last_synced_at":"2024-05-22T03:44:19.536Z","etag":null,"topics":["backup","hacktoberfest","kubernetes","kubernetes-operator","openshift","openshift-operator","operator","restic","vshn-project-ignore"],"latest_commit_sha":null,"homepage":"https://k8up.io/","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/k8up-io.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":"CODEOWNERS","security":null,"support":null,"governance":"GOVERNANCE.md","roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2019-01-17T10:05:05.000Z","updated_at":"2024-05-28T10:24:12.317Z","dependencies_parsed_at":"2023-09-27T17:58:50.024Z","dependency_job_id":"57164f2d-2681-42cc-900b-7a78902c5760","html_url":"https://github.com/k8up-io/k8up","commit_stats":null,"previous_names":["vshn/k8up"],"tags_count":84,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/k8up-io%2Fk8up","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/k8up-io%2Fk8up/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/k8up-io%2Fk8up/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/k8up-io%2Fk8up/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/k8up-io","download_url":"https://codeload.github.com/k8up-io/k8up/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":221739721,"owners_count":16872775,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["backup","hacktoberfest","kubernetes","kubernetes-operator","openshift","openshift-operator","operator","restic","vshn-project-ignore"],"created_at":"2024-07-31T03:01:13.986Z","updated_at":"2026-01-12T07:53:40.478Z","avatar_url":"https://github.com/k8up-io.png","language":"Go","funding_links":[],"categories":["HarmonyOS","Go","kubernetes"],"sub_categories":["Windows Manager"],"readme":"[![Build](https://img.shields.io/github/actions/workflow/status/k8up-io/k8up/.github/workflows/test.yml?branch=master)][build]\n![Go version](https://img.shields.io/github/go-mod/go-version/k8up-io/k8up)\n[![Version](https://img.shields.io/github/v/release/k8up-io/k8up)][releases]\n[![GitHub downloads](https://img.shields.io/github/downloads/k8up-io/k8up/total)][releases]\n[![License](https://img.shields.io/github/license/k8up-io/k8up)][license]\n[![CII Best Practices](https://bestpractices.coreinfrastructure.org/projects/5388/badge)](https://bestpractices.coreinfrastructure.org/projects/5388)\n[![OpenSSF Scorecard](https://api.securityscorecards.dev/projects/github.com/k8up-io/k8up/badge)](https://api.securityscorecards.dev/projects/github.com/k8up-io/k8up)\n[![Artifact Hub](https://img.shields.io/endpoint?url=https://artifacthub.io/badge/repository/k8up)](https://artifacthub.io/packages/helm/k8up/k8up)\n\n![K8up logo](docs/modules/ROOT/assets/images/k8up-logo.svg \"K8up\")\n\n# K8up Backup Operator\n\nK8up is a Kubernetes backup operator based on [Restic](https://restic.readthedocs.io) that will handle PVC and application backups on a Kubernetes or OpenShift cluster.\n\nJust create a `schedule` and a `credentials` object in the namespace you’d like to backup.\nIt’s that easy. K8up takes care of the rest. It also provides a Prometheus endpoint for monitoring.\n\nK8up is production ready. It is used in production deployments since 2019.\n\n## Documentation\n\nThe documentation is written in AsciiDoc and published with Antora to [k8up.io](https://k8up.io/).\nIt's source is available in the `docs/` directory.\n\nRun `make docs-preview` to build the docs and preview changes.\n\n## Contributing\n\nK8up is written using [Kubebuilder](https://github.com/kubernetes-sigs/kubebuilder).\n\nYou'll need:\n\n- A running Kubernetes cluster (minishift, minikube, k3s, ... you name it)\n- [kubectl](https://kubernetes.io/docs/tasks/tools/install-kubectl/)\n- Go development environment\n- Your favorite IDE (with a Go plugin)\n- Docker\n- `make`\n- `sed` (or `gsed` for MacOS)\n\nTo run the end-to-end test (e.g. `make e2e-test`), you additionally need:\n\n- `helm` (version 3)\n- `jq`\n- `yq` (make sure to use [mikefarah/yq](https://github.com/mikefarah/yq) and not [kislyuk/yq](https://github.com/kislyuk/yq))\n- `node` and `npm`\n- `bash` (installed, doesn't have to be your default shell)\n- `base64`\n- `find`\n\nThese are the most common make targets: `build`, `test`, `docker-build`, `run`, `kind-run`.\nRun `make help` to get an overview over the relevant targets and their intentions.\n\nYou can find the project roadmap [here](https://github.com/orgs/k8up-io/projects/2).\n\nWe use [Snyk](https://snyk.io/test/github/k8up-io/k8up) to test the code regularly for vulnerabilities and other security issues.\n\nIf you find any security issue, please follow our [Vulnerability Reporting](https://k8up.io/vulnerabilities/) process.\n\n### Code Structure\n\nK8s consists of two main modules:\n\n- The _operator_ module is the part that runs constantly within K8s and contains the various reconciliation loops.\n- The _restic_ module is our interface to the `restic` binary and is invoked whenever a `Backup` or `Restore` (or similar) custom resource is instantiated.\n  If it's job (like doing a backup or a restore) is done, the process ends.\n\n```asciidoc\n/\n- api           Go Types for the Custom Resource Definitions (CRDs) [o]\n- cmd           CLI definition and entrypoints\n- common        Code that is not specific to either\n- config        Various configuration files for the Operator SDK [o]\n- controllers   The reconciliation loops of the operator module [o]\n- docs          Out ASCIIdoc code as published on https://k8up.io\n- e2e           The Bats-based End-To-End tests\n- envtest       Infrastructure code for the integration tests\n- operator      Code that is otherwise related to the _operator module_,\n                but not part of the recommended Operator SDK structure.\n- restic        Code that makes up the _restic module_.\n\n[o]: this is part of the recommended Operator SDK structure\n```\n\n### Generate Kubernetes code\n\nIf you make changes to the CRD structs you'll need to run code generation.\nThis can be done with make:\n\n```bash\nmake generate\n```\n\n### Install CRDs\n\nCRDs can be either installed on the cluster by running `make install` or using `kubectl apply -f config/crd/apiextensions.k8s.io/v1`.\n\nCurrently there's an issue using [`make install`](https://github.com/kubernetes-sigs/kubebuilder/issues/1544) related to how the CRDs are specified.\nTherefore settle to the second approach for now.\n\n### Run the operator\n\nYou can run the operator in different ways:\n\n1. as a container image (see [quickstart](https://sdk.operatorframework.io/docs/building-operators/golang/quickstart/))\n2. using `make run-operator` (provide your own kubeconfig)\n3. using `make kind-run` (uses KIND to install a cluster in docker and provides its own kubeconfig in `testbin/`)\n4. using a configuration of your favorite IDE\n\nBest is if you have [minio](https://min.io/download) installed somewhere to be able to setup the needed env values. It needs to be reachable from within your dev cluster.\n\n### Run E2E tests\n\nYou need `node` and `npm` to run the tests, as it runs with [DETIK][detik].\n\nTo run e2e tests, execute:\n\n```bash\nmake e2e-test\n```\n\nTo test just a specific e2e test, run:\n\n```bash\nmake e2e-test -e BATS_FILES=test-02-deployment.bats\n```\n\nTo remove the local KIND cluster and other e2e resources, run:\n\n```bash\nmake e2e-clean\n```\n\nTo cleanup all created artifacts, there's always:\n\n```bash\nmake clean\n```\n\n### Example configurations\n\nThere are a number of example configurations in [`config/samples`](config/samples).\nApply them using `kubectl apply -f config/samples/somesample.yaml`\n\n# Community\n\nRead more about our community [in the documentation](https://k8up.io/community/).\n\n## Chat with us\n\nThe K8up project is present in the [CNCF Slack Workspace](https://slack.cncf.io/) in the [#k8up channel](https://app.slack.com/client/T08PSQ7BQ/C06GP0D5FEF).\n\n## Monthly community meeting\n\nWe host a monthly community meeting. For more information, head over to [the community documentation](https://k8up.io/community/).\n\n## Code of Conduct\n\nOur code of conduct can be read at [k8up.io](https://k8up.io/coc/).\n\n[build]: https://github.com/k8up-io/k8up/actions?query=workflow%3ATest\n[releases]: https://github.com/k8up-io/k8up/releases\n[license]: https://github.com/k8up-io/k8up/blob/master/LICENSE\n[detik]: https://github.com/bats-core/bats-detik\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fk8up-io%2Fk8up","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fk8up-io%2Fk8up","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fk8up-io%2Fk8up/lists"}