gitbackup

command module
v0.2.1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jan 5, 2023 License: MIT Imports: 11 Imported by: 0

README

Git Backup Operator

GitHub GitHub release (latest SemVer) CI GitHub go.mod Go version Go Report Card codecov

A Kubernetes Operator for scheduled backup of Git repositories.

Overview

  1. You create a Repository resource.
  2. The Operator creates a CronJob resource from it.
  3. The CronJob does the actual work.
apiVersion: gitbackup.ebiiim.com/v1beta1
kind: Repository
metadata:
  name: repo1
spec:
  src: https://github.com/ebiiim/gitbackup
  dst: https://gitlab.com/ebiiim/gitbackup
  schedule: "0 6 * * *"
  gitCredentials:
    name: repo1-secret # specify a Secret resource in the same namespace

Getting Started

Supported Kubernetes versions: 1.21 or higher

Installation

Make sure you have cert-manager deployed, as it is used to generate webhook certificates.

kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.10.0/cert-manager.yaml

⚠️ You may have to wait a second for cert-manager to be ready.

Deploy the Operator with the following command. It creates gitbackup-system namespace and deploys CRDs, controllers and other resources.

kubectl apply -f https://github.com/ebiiim/gitbackup/releases/download/v0.2.1/gitbackup.yaml
Backup a Git repository with a Repository resource

First, create a Secret resource that contains .git-credentials.

kubectl create secret generic repo1-secret --from-file=$HOME/.git-credentials

Next, create a Repository resource.

apiVersion: gitbackup.ebiiim.com/v1beta1
kind: Repository
metadata:
  name: repo1
spec:
  src: https://github.com/ebiiim/gitbackup
  dst: https://gitlab.com/ebiiim/gitbackup
  schedule: "0 6 * * *"
  gitCredentials:
    name: repo1-secret

Finally, confirm that resources has been created.

$ kubectl get repos
NAME    AGE
repo1   5s

$ kubectl get cronjobs
NAME              SCHEDULE    SUSPEND   ACTIVE   LAST SCHEDULE   AGE
gitbackup-repo1   0 6 * * *   False     0        <none>          5s

💡 You can test the CronJob by manually triggering it.

kubectl create job --from=cronjob/<name> <job-name>
Backup many Git repositories with a Collection resource

First, create a Secret resource that contains .git-credentials.

kubectl create secret generic coll1-secret --from-file=$HOME/.git-credentials

Next, create a Collection resource.

apiVersion: gitbackup.ebiiim.com/v1beta1
kind: Collection
metadata:
  name: coll1
spec:
  schedule: "0 6 * * *"
  gitCredentials:
    name: coll1-secret
  repos:
    - name: gitbackup
      src: https://github.com/ebiiim/gitbackup
      dst: https://gitlab.com/ebiiim/gitbackup
    - name: foo
      src: https://example.com/src/foo
      dst: https://example.com/dst/foo
    - name: bar
      src: https://example.com/src/bar
      dst: https://example.com/dst/bar

Finally, confirm that resources has been created.

$ kubectl get colls
NAME    AGE
coll1   5s

$ kubectl get repos
NAME                AGE
coll1-bar           5s
coll1-foo           5s
coll1-gitbackup     5s

$ kubectl get cronjobs
NAME                        SCHEDULE    SUSPEND   ACTIVE   LAST SCHEDULE   AGE
gitbackup-coll1-bar         2 6 * * *   False     0        <none>          5s
gitbackup-coll1-foo         1 6 * * *   False     0        <none>          5s
gitbackup-coll1-gitbackup   0 6 * * *   False     0        <none>          5s

💡 Each job runs one minute apart.

Uninstallation

Delete the Operator and resources with the following command.

kubectl delete -f https://github.com/ebiiim/gitbackup/releases/download/v0.2.1/gitbackup.yaml

Developing

This Operator uses Kubebuilder, so we basically follow the Kubebuilder way. See the Kubebuilder Documentation for details.

Prerequisites

Make sure you have the following tools installed:

  • Git
  • Make
  • Go
  • Docker
Run a development cluster with kind
./hack/dev-kind-reset-cluster.sh # create a K8s cluster `kind-gitbackup`
./hack/dev-kind-deploy.sh # build and deploy the Operator

Documentation

The Go Gopher

There is no documentation for this package.

Directories

Path Synopsis
api
v1beta1
Package v1beta1 contains API Schema definitions for the gitbackup v1beta1 API group +kubebuilder:object:generate=true +groupName=gitbackup.ebiiim.com
Package v1beta1 contains API Schema definitions for the gitbackup v1beta1 API group +kubebuilder:object:generate=true +groupName=gitbackup.ebiiim.com

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL