commit 13fc4d916dc753553a47eff1bad826044130e597 Author: Manuel Ganter Date: Tue Jul 22 14:19:39 2025 +0200 added example diff --git a/.envrc b/.envrc new file mode 100644 index 0000000..eff60eb --- /dev/null +++ b/.envrc @@ -0,0 +1,9 @@ +#!/bin/bash + +# Automatically sets up your devbox environment whenever you cd into this +# directory via our direnv integration: + +eval "$(devbox generate direnv --print-envrc)" + +# check out https://www.jetify.com/docs/devbox/ide_configuration/direnv/ +# for more details diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..9731b46 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +kubeconfig-manu-backup-test.yaml +volumesnapshot.yaml diff --git a/devbox.json b/devbox.json new file mode 100644 index 0000000..ea45ae3 --- /dev/null +++ b/devbox.json @@ -0,0 +1,17 @@ +{ + "$schema": "https://raw.githubusercontent.com/jetify-com/devbox/0.15.0/.schema/devbox.schema.json", + "packages": [ + "k9s@latest", + "kubectl@latest" + ], + "shell": { + "init_hook": [ + "echo 'Welcome to devbox!' > /dev/null" + ], + "scripts": { + "test": [ + "echo \"Error: no test specified\" && exit 1" + ] + } + } +} diff --git a/devbox.lock b/devbox.lock new file mode 100644 index 0000000..0804ebb --- /dev/null +++ b/devbox.lock @@ -0,0 +1,141 @@ +{ + "lockfile_version": "1", + "packages": { + "github:NixOS/nixpkgs/nixpkgs-unstable": { + "last_modified": "2025-07-08T04:39:49Z", + "resolved": "github:NixOS/nixpkgs/9b008d60392981ad674e04016d25619281550a9d?lastModified=1751949589&narHash=sha256-mgFxAPLWw0Kq%2BC8P3dRrZrOYEQXOtKuYVlo9xvPntt8%3D" + }, + "k9s@latest": { + "last_modified": "2025-07-20T07:42:04Z", + "resolved": "github:NixOS/nixpkgs/7c688a0875df5a8c28a53fb55ae45e94eae0dddb#k9s", + "source": "devbox-search", + "version": "0.50.9", + "systems": { + "aarch64-darwin": { + "outputs": [ + { + "name": "out", + "path": "/nix/store/bfi2rv8rr9xqp784rmfmj0am664dwn7y-k9s-0.50.9", + "default": true + } + ], + "store_path": "/nix/store/bfi2rv8rr9xqp784rmfmj0am664dwn7y-k9s-0.50.9" + }, + "aarch64-linux": { + "outputs": [ + { + "name": "out", + "path": "/nix/store/r9vxwkhd771ky6kn5bi5p710gsc54xac-k9s-0.50.9", + "default": true + } + ], + "store_path": "/nix/store/r9vxwkhd771ky6kn5bi5p710gsc54xac-k9s-0.50.9" + }, + "x86_64-darwin": { + "outputs": [ + { + "name": "out", + "path": "/nix/store/1mr4pmk1avvv38qhqzsfx3ng3q0wjxbq-k9s-0.50.9", + "default": true + } + ], + "store_path": "/nix/store/1mr4pmk1avvv38qhqzsfx3ng3q0wjxbq-k9s-0.50.9" + }, + "x86_64-linux": { + "outputs": [ + { + "name": "out", + "path": "/nix/store/9b4600vbqrfp9kdrias6cfncb1iv4i1g-k9s-0.50.9", + "default": true + } + ], + "store_path": "/nix/store/9b4600vbqrfp9kdrias6cfncb1iv4i1g-k9s-0.50.9" + } + } + }, + "kubectl@latest": { + "last_modified": "2025-07-13T22:45:35Z", + "resolved": "github:NixOS/nixpkgs/a421ac6595024edcfbb1ef950a3712b89161c359#kubectl", + "source": "devbox-search", + "version": "1.33.2", + "systems": { + "aarch64-darwin": { + "outputs": [ + { + "name": "out", + "path": "/nix/store/l3716q45znc72mfa6fp47q9sn69hmcla-kubectl-1.33.2", + "default": true + }, + { + "name": "man", + "path": "/nix/store/366v9mv6zb1a4j3fa7bxbc21ka98k3dn-kubectl-1.33.2-man", + "default": true + }, + { + "name": "convert", + "path": "/nix/store/77xnk3izgn6j86wmxx26adcxf542rr9p-kubectl-1.33.2-convert" + } + ], + "store_path": "/nix/store/l3716q45znc72mfa6fp47q9sn69hmcla-kubectl-1.33.2" + }, + "aarch64-linux": { + "outputs": [ + { + "name": "out", + "path": "/nix/store/4wfikcyl4c1j4a8r6s3a1aiz576dyvnz-kubectl-1.33.2", + "default": true + }, + { + "name": "man", + "path": "/nix/store/8hlxcrbmnfgalcbi7c5qcwqgs7576jjz-kubectl-1.33.2-man", + "default": true + }, + { + "name": "convert", + "path": "/nix/store/kz76zfr3fxsqx439w8qzw22pvk8ksnxs-kubectl-1.33.2-convert" + } + ], + "store_path": "/nix/store/4wfikcyl4c1j4a8r6s3a1aiz576dyvnz-kubectl-1.33.2" + }, + "x86_64-darwin": { + "outputs": [ + { + "name": "out", + "path": "/nix/store/hcki0d8h5k17mpfgjcs2ib7bj0mp1y4j-kubectl-1.33.2", + "default": true + }, + { + "name": "man", + "path": "/nix/store/jmzqw99v1zw2hlkz3hl1np08sgs5qyj5-kubectl-1.33.2-man", + "default": true + }, + { + "name": "convert", + "path": "/nix/store/i39jaxg44akik942svgbbsz0fqwd2szb-kubectl-1.33.2-convert" + } + ], + "store_path": "/nix/store/hcki0d8h5k17mpfgjcs2ib7bj0mp1y4j-kubectl-1.33.2" + }, + "x86_64-linux": { + "outputs": [ + { + "name": "out", + "path": "/nix/store/6qq4mnx220gb3iaggsgb90w9h9xlq1j8-kubectl-1.33.2", + "default": true + }, + { + "name": "man", + "path": "/nix/store/7fczlca4ccaqs2cy7rvdcrbs9rbm924r-kubectl-1.33.2-man", + "default": true + }, + { + "name": "convert", + "path": "/nix/store/qxl73ma1sg0i3d02mvcw536yad0ihj33-kubectl-1.33.2-convert" + } + ], + "store_path": "/nix/store/6qq4mnx220gb3iaggsgb90w9h9xlq1j8-kubectl-1.33.2" + } + } + } + } +} diff --git a/test_01/01_deploy.yaml b/test_01/01_deploy.yaml new file mode 100644 index 0000000..d0cb006 --- /dev/null +++ b/test_01/01_deploy.yaml @@ -0,0 +1,54 @@ +apiVersion: v1 +kind: PersistentVolumeClaim +metadata: + name: test-pvc + namespace: default +spec: + accessModes: + - ReadWriteOnce + storageClassName: "csi-disk" # Empty string must be explicitly set otherwise default StorageClass will be set + resources: + requests: + storage: 8Gi +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + labels: + app: nginx + name: nginx + namespace: default +spec: + progressDeadlineSeconds: 600 + replicas: 1 + revisionHistoryLimit: 10 + selector: + matchLabels: + app: nginx + strategy: + type: Recreate + template: + metadata: + creationTimestamp: null + labels: + app: nginx + spec: + containers: + - image: nginx + imagePullPolicy: Always + name: nginx + resources: {} + terminationMessagePath: /dev/termination-log + terminationMessagePolicy: File + volumeMounts: + - mountPath: "/test" + name: mypd + volumes: + - name: mypd + persistentVolumeClaim: + claimName: test-pvc + dnsPolicy: ClusterFirst + restartPolicy: Always + schedulerName: default-scheduler + securityContext: {} + terminationGracePeriodSeconds: 30 diff --git a/test_01/02_create_content.md b/test_01/02_create_content.md new file mode 100644 index 0000000..f74df57 --- /dev/null +++ b/test_01/02_create_content.md @@ -0,0 +1,3 @@ +Open shell to default/nginx and `cd /test`. + +Then create a file here. diff --git a/test_01/03_snapshot.yaml b/test_01/03_snapshot.yaml new file mode 100644 index 0000000..72c0041 --- /dev/null +++ b/test_01/03_snapshot.yaml @@ -0,0 +1,9 @@ +apiVersion: snapshot.storage.k8s.io/v1 +kind: VolumeSnapshot +metadata: + name: new-snapshot-test + namespace: default +spec: + volumeSnapshotClassName: csi-disk-snapclass + source: + persistentVolumeClaimName: test-pvc diff --git a/test_01/04_restore.yaml b/test_01/04_restore.yaml new file mode 100644 index 0000000..42bcff8 --- /dev/null +++ b/test_01/04_restore.yaml @@ -0,0 +1,63 @@ +apiVersion: v1 +kind: PersistentVolumeClaim +metadata: + name: restored-pvc + namespace: default +spec: + accessModes: + - ReadWriteOnce + storageClassName: "csi-disk" # Empty string must be explicitly set otherwise default StorageClass will be set + resources: + requests: + storage: 8Gi + dataSource: + apiGroup: snapshot.storage.k8s.io + kind: VolumeSnapshot + name: new-snapshot-test +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + labels: + app: nginx + name: nginx + namespace: default +spec: + progressDeadlineSeconds: 600 + replicas: 1 + revisionHistoryLimit: 10 + selector: + matchLabels: + app: nginx + strategy: + type: Recreate + template: + metadata: + creationTimestamp: null + labels: + app: nginx + spec: + containers: + - image: nginx + imagePullPolicy: Always + name: nginx + resources: {} + terminationMessagePath: /dev/termination-log + terminationMessagePolicy: File + volumeMounts: + - mountPath: "/test" + name: mypd + - mountPath: "/restored" + name: rere + volumes: + - name: mypd + persistentVolumeClaim: + claimName: test-pvc + - name: rere + persistentVolumeClaim: + claimName: restored-pvc + dnsPolicy: ClusterFirst + restartPolicy: Always + schedulerName: default-scheduler + securityContext: {} + terminationGracePeriodSeconds: 30