kubernetes: add separate docs directory and update immich manifests
All checks were successful
ci/woodpecker/push/demo-workflow Pipeline was successful
All checks were successful
ci/woodpecker/push/demo-workflow Pipeline was successful
This commit is contained in:
151
doc/proxmox_storage_concepts.md
Normal file
151
doc/proxmox_storage_concepts.md
Normal file
@ -0,0 +1,151 @@
|
|||||||
|
# Proxmox LVM Architecture and Concepts
|
||||||
|
|
||||||
|
## 1. Overview of LVM
|
||||||
|
|
||||||
|
Logical Volume Manager (LVM) provides a flexible storage management layer
|
||||||
|
between physical disks and file systems. It allows administrators to allocate,
|
||||||
|
resize, and manage storage dynamically, without the limitations of fixed disk
|
||||||
|
partitions.
|
||||||
|
|
||||||
|
The storage hierarchy under LVM is as follows:
|
||||||
|
|
||||||
|
Physical Volume (PV) → Volume Group (VG) → Logical Volume (LV)
|
||||||
|
|
||||||
|
Each layer abstracts the one beneath it to provide logical storage that can be
|
||||||
|
managed independently of the physical disk structure.
|
||||||
|
|
||||||
|
## 2. Core LVM Components
|
||||||
|
|
||||||
|
a. Physical Volume (PV)
|
||||||
|
|
||||||
|
A Physical Volume represents a raw storage device (such as a disk or a
|
||||||
|
partition) that LVM can manage.
|
||||||
|
|
||||||
|
It is initialized for use with the command:
|
||||||
|
|
||||||
|
pvcreate /dev/sda2
|
||||||
|
|
||||||
|
This prepares the partition /dev/sda2 as LVM-capable storage.
|
||||||
|
|
||||||
|
b. Volume Group (VG)
|
||||||
|
|
||||||
|
A Volume Group is a pool of storage composed of one or more Physical Volumes.
|
||||||
|
It aggregates multiple disks or partitions into a single logical storage space.
|
||||||
|
Example:
|
||||||
|
|
||||||
|
vgcreate pve /dev/sda2
|
||||||
|
|
||||||
|
In Proxmox, the default Volume Group created during installation is typically
|
||||||
|
named pve. Once created, Logical Volumes can be allocated from this group.
|
||||||
|
|
||||||
|
c. Logical Volume (LV)
|
||||||
|
|
||||||
|
A Logical Volume functions like a virtual partition carved from a Volume Group.
|
||||||
|
It behaves like a standard block device and can be formatted, mounted, or used
|
||||||
|
for virtual machine disks.
|
||||||
|
|
||||||
|
Example:
|
||||||
|
|
||||||
|
lvcreate -L 50G -n vm-100-disk pve
|
||||||
|
|
||||||
|
This command creates a 50 GB logical volume named vm-100-disk within the pve
|
||||||
|
Volume Group.
|
||||||
|
|
||||||
|
In Proxmox, each virtual machine disk backed by LVM appears as an LV under
|
||||||
|
/dev/<VG>/, for example:
|
||||||
|
|
||||||
|
/dev/pve/vm-100-disk-0
|
||||||
|
|
||||||
|
d. Thin Pool and Thin Volumes
|
||||||
|
|
||||||
|
A thin pool enables thin provisioning, which allows Logical Volumes to allocate
|
||||||
|
physical space on demand rather than all at once.
|
||||||
|
|
||||||
|
A thin pool is created as a special Logical Volume:
|
||||||
|
|
||||||
|
lvcreate -L 500G -T pve/data
|
||||||
|
|
||||||
|
Once the pool exists, thin-provisioned LVs can be created within it:
|
||||||
|
|
||||||
|
lvcreate -V 100G -T pve/data -n vm-101-disk
|
||||||
|
|
||||||
|
Here, vm-101-disk has a logical size of 100 GB but consumes physical space only
|
||||||
|
as data is written. This is the mechanism used by Proxmox’s “LVM-Thin” storage
|
||||||
|
type.
|
||||||
|
|
||||||
|
## 3. Example: Creating an Extra LV for /var/lib/vz
|
||||||
|
|
||||||
|
To create a new thin-provisioned LV for /var/lib/vz, the following command is used:
|
||||||
|
|
||||||
|
lvcreate -n vz -V 10G pve/data
|
||||||
|
|
||||||
|
Explanation:
|
||||||
|
|
||||||
|
-n vz: Names the new LV “vz”.
|
||||||
|
|
||||||
|
-V 10G: Defines a virtual (thin-provisioned) size of 10 GB.
|
||||||
|
|
||||||
|
pve/data: Specifies that the LV should be created within the thin pool data
|
||||||
|
inside the VG pve.
|
||||||
|
|
||||||
|
This creates /dev/pve/vz, a 10 GB thin-provisioned LV that can then be formatted
|
||||||
|
and mounted:
|
||||||
|
|
||||||
|
mkfs.ext4 /dev/pve/vz
|
||||||
|
mkdir /var/lib/vz
|
||||||
|
mount /dev/pve/vz /var/lib/vz
|
||||||
|
|
||||||
|
This approach isolates /var/lib/vz—commonly used by Proxmox to store container
|
||||||
|
data, ISO images, and templates—from the root filesystem.
|
||||||
|
|
||||||
|
4. Typical Proxmox LVM Layout
|
||||||
|
|
||||||
|
A standard Proxmox installation configured with LVM uses a single Volume Group
|
||||||
|
(pve) containing several Logical Volumes:
|
||||||
|
|
||||||
|
/dev/sda (disk)
|
||||||
|
└── /dev/sda2 (partition)
|
||||||
|
└── PV → VG: pve
|
||||||
|
├── LV: root → Mounted as /
|
||||||
|
├── LV: swap → Used as swap space
|
||||||
|
└── LV-Thin: data → Thin pool for VM and container disks
|
||||||
|
├── Thin LV: vm-100-disk-0
|
||||||
|
└── Thin LV: vm-101-disk-0
|
||||||
|
|
||||||
|
This structure allows the operating system, swap, and virtual machine disks to
|
||||||
|
share a single pool of storage while maintaining isolation through logical
|
||||||
|
volumes.
|
||||||
|
|
||||||
|
## 4. Example of Creating a new LVM thin pool and LV
|
||||||
|
|
||||||
|
To create a new LVM thin pool and a thin-provisioned logical volume,
|
||||||
|
follow these steps:
|
||||||
|
|
||||||
|
1. **Create a Physical Volume (if not already done)**
|
||||||
|
|
||||||
|
If you have a new disk or partition to use, initialize it as a Physical Volume:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
pvcreate /dev/sdb1
|
||||||
|
```
|
||||||
|
|
||||||
|
2. **Create a Volume Group**
|
||||||
|
Create a new Volume Group that includes the Physical Volume:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
vgcreate backup /dev/sdb1
|
||||||
|
```
|
||||||
|
|
||||||
|
3. **Create a Thin Pool**
|
||||||
|
Create a thin pool within the Volume Group:
|
||||||
|
```bash
|
||||||
|
lvcreate -L 200G -T backup/thinpool
|
||||||
|
```
|
||||||
|
4. Configure the thin pool to storage.cfg
|
||||||
|
```
|
||||||
|
lvmthin: backup-lvm
|
||||||
|
thinpool backup/thinpool
|
||||||
|
vgname backup
|
||||||
|
content rootdir,images
|
||||||
|
nodes proxmox-node1,proxmox-node2 # List of cluster nodes
|
||||||
|
```
|
||||||
@ -1,51 +0,0 @@
|
|||||||
apiVersion: apps/v1
|
|
||||||
kind: StatefulSet
|
|
||||||
metadata:
|
|
||||||
name: immich-migration-db
|
|
||||||
spec:
|
|
||||||
serviceName: "immich-migration-db"
|
|
||||||
replicas: 1
|
|
||||||
selector:
|
|
||||||
matchLabels:
|
|
||||||
app: immich-migration-db
|
|
||||||
template:
|
|
||||||
metadata:
|
|
||||||
labels:
|
|
||||||
app: immich-migration-db
|
|
||||||
spec:
|
|
||||||
containers:
|
|
||||||
- name: postgres
|
|
||||||
image: ghcr.io/immich-app/postgres:14-vectorchord0.4.3-pgvectors0.2.0
|
|
||||||
ports:
|
|
||||||
- containerPort: 5432
|
|
||||||
env:
|
|
||||||
- name: POSTGRES_DB
|
|
||||||
value: immich
|
|
||||||
- name: POSTGRES_USER
|
|
||||||
value: immich
|
|
||||||
- name: POSTGRES_PASSWORD
|
|
||||||
value: arsehole
|
|
||||||
volumeMounts:
|
|
||||||
- name: pgdata
|
|
||||||
mountPath: /var/lib/postgresql/data
|
|
||||||
volumeClaimTemplates:
|
|
||||||
- metadata:
|
|
||||||
name: pgdata
|
|
||||||
spec:
|
|
||||||
accessModes: ["ReadWriteOnce"]
|
|
||||||
resources:
|
|
||||||
requests:
|
|
||||||
storage: 10Gi
|
|
||||||
---
|
|
||||||
apiVersion: v1
|
|
||||||
kind: Service
|
|
||||||
metadata:
|
|
||||||
name: immich-migration-db
|
|
||||||
spec:
|
|
||||||
selector:
|
|
||||||
app: immich-migration-db
|
|
||||||
ports:
|
|
||||||
- name: postgres
|
|
||||||
port: 5432
|
|
||||||
targetPort: 5432
|
|
||||||
type: LoadBalancer
|
|
||||||
File diff suppressed because one or more lines are too long
11
kubernetes/immich/dbBackup.yaml
Normal file
11
kubernetes/immich/dbBackup.yaml
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
apiVersion: postgresql.cnpg.io/v1
|
||||||
|
kind: ScheduledBackup
|
||||||
|
metadata:
|
||||||
|
name: immich-db-backup
|
||||||
|
spec:
|
||||||
|
immediate: true
|
||||||
|
schedule: "0 0 0 * * *" # At midnight every day
|
||||||
|
backupOwnerReference: self
|
||||||
|
cluster:
|
||||||
|
name: immich-database
|
||||||
|
|
||||||
@ -43,7 +43,7 @@ image:
|
|||||||
tag: v1.4.0
|
tag: v1.4.0
|
||||||
supportBundleKit:
|
supportBundleKit:
|
||||||
repository: longhornio/support-bundle-kit
|
repository: longhornio/support-bundle-kit
|
||||||
tag: v0.0.17
|
tag: v0.0.69
|
||||||
csi:
|
csi:
|
||||||
attacher:
|
attacher:
|
||||||
repository: longhornio/csi-attacher
|
repository: longhornio/csi-attacher
|
||||||
|
|||||||
Reference in New Issue
Block a user