diff --git a/apps/adguardhome/pvc.yaml b/apps/adguardhome/pvc.yaml index 99b49095..24d3e10d 100644 --- a/apps/adguardhome/pvc.yaml +++ b/apps/adguardhome/pvc.yaml @@ -28,5 +28,7 @@ spec: storageClassName: local-path resources: requests: - # クエリログ(deployment.yaml の querylog.interval)の 2 本ぶん。LVM なのでこれが本当の上限になる - storage: 30Gi + # クエリログ(deployment.yaml の querylog.interval)の 2 本ぶん。LVM なのでこれが本当の上限になる。 + # 1 日 10 GB は外からの 53 番の増幅攻撃のぶんで、network-policy.yaml で閉じてからはふだんの量に戻った。 + # 合計を thin プールに収めるため小さめにしている(bootstrap/lvm-localpv-values.yaml) + storage: 10Gi diff --git a/apps/forgejo/forgejo.yaml b/apps/forgejo/forgejo.yaml index fcb24186..52999293 100644 --- a/apps/forgejo/forgejo.yaml +++ b/apps/forgejo/forgejo.yaml @@ -24,7 +24,7 @@ spec: storageClassName: local-path resources: requests: - storage: 50Gi + storage: 20Gi --- apiVersion: v1 kind: Service diff --git a/apps/matrix/tuwunel.yaml b/apps/matrix/tuwunel.yaml index 4cf00c0f..4e49394f 100644 --- a/apps/matrix/tuwunel.yaml +++ b/apps/matrix/tuwunel.yaml @@ -107,7 +107,7 @@ spec: storageClassName: local-path resources: requests: - storage: 20Gi + storage: 10Gi --- apiVersion: apps/v1 kind: StatefulSet diff --git a/apps/rybbit/clickhouse.yaml b/apps/rybbit/clickhouse.yaml index 38b8095c..6cd8e586 100644 --- a/apps/rybbit/clickhouse.yaml +++ b/apps/rybbit/clickhouse.yaml @@ -31,7 +31,7 @@ spec: storageClassName: local-path resources: requests: - storage: 20Gi + storage: 5Gi --- apiVersion: v1 kind: ConfigMap diff --git a/bootstrap/lvm-localpv-values.yaml b/bootstrap/lvm-localpv-values.yaml index 6432a090..70c6e016 100644 --- a/bootstrap/lvm-localpv-values.yaml +++ b/bootstrap/lvm-localpv-values.yaml @@ -5,8 +5,11 @@ # StorageClass・VolumeSnapshotClass・thin プールを作る DaemonSet は storage.yaml、 # snapshot-controller と VolumeSnapshot の CRD は render.sh が URL で入れる(版は talos.sops.yaml の先頭)。 # -# 容量で Pod の置き場を絞らせない。thin なので PVC の大きさは上限でしかなく、合計がプールを超えてよい -# (denpa は 1Ti と 300Gi)。true だと kube-scheduler が「プールの空き < PVC」のものを置けずに Pending にする。 +# 容量で Pod の置き場を絞らせない。thin なので PVC の大きさは上限でしかなく、合計がプールを超えても作れる。 +# true だと kube-scheduler が「プールの空き < PVC」のものを置けずに Pending にする。 +# ただし**全部の PVC の合計はプール(約 340Gi)に収める。** 超えて実際に埋まると、PVC の中の残量の見張り +# (denpa の disk.ts など)が鳴る前にプールが埋まり、全部の PVC の書き込みが止まる。 +# 残りは録画(danything/denpa の deploy/application.yaml の encoded)に回してあるので、ほかの PVC を増やしたらそこを減らす。 storageCapacity: false # 匿名の利用統計(Google Analytics)を送らない analytics: diff --git a/docs/decisions.md b/docs/decisions.md index e7e2cb57..bc00f299 100644 --- a/docs/decisions.md +++ b/docs/decisions.md @@ -311,8 +311,10 @@ StorageClass を変えた PVC を作り直すだけで中身が埋まるので `dm-snapshot` は組み込み。起動時の VG の有効化は Talos がする(`thin_check` が無いのは lvm2 が飛ばす)。Talos は知らない LV を消さない - **StorageClass の名前は `local-path` のまま**(既定)。各リポジトリの PVC は書き換えない。`thinProvision: "yes"`(スナップショットから戻せるのは thin だけ)、 xfs(ext4 は `lost+found` を作り、PGDATA がボリュームの直下の Postgres の initdb が落ちる) -- **`storageCapacity: false`。** thin なので PVC の大きさの合計はプールを超えてよい(denpa は 1Ti と 300Gi)。true だと kube-scheduler が +- **`storageCapacity: false`。** thin なので PVC の大きさの合計がプールを超えても作れる(ただし合計はプールに収める。下の項目)。true だと kube-scheduler が プールの空きより大きい PVC を Pending にする +- **PVC の合計はプールに収める。** 超えて実際に埋まると、PVC の中の残量の見張り(denpa の `disk.ts` など)が鳴る前にプールが埋まり、 + 全部の PVC の書き込みが止まる。使用量に比べて大きすぎた PVC(Forgejo・Matrix・Rybbit・AdGuard)を縮め、残りを録画(denpa の encoded)に回した - **snapshot-controller と VolumeSnapshot の CRD は chart の同梱を使わず**、external-snapshotter のタグの URL で入れる(版は `talos.sops.yaml` の先頭)。 クラスタに 1 つのもので、VolSync も使う - **talos-boot が確かめていること**: VG と thin プール(VG の 9 割)、PVC が xfs で bind、VolumeSnapshot が readyToUse、 diff --git a/docs/z440-migration.md b/docs/z440-migration.md index 3594c3cf..d4a426c9 100644 --- a/docs/z440-migration.md +++ b/docs/z440-migration.md @@ -72,7 +72,7 @@ local-path との違いで気を付けること: - **PVC の requests が本当の上限になる。** local-path はディスクの残り全部が使えたので、`adguardhome-work`(5Gi)に 68 GB 入っていた。 戻す前に `recovery/pv.sh - plan-all` が PVC に入るかを見る(`fit`。入らなければ止まる) -- **thin なので合計はプールを超えてよい**(denpa は 1Ti と 300Gi)。代わりに**プールが溢れると全部の PVC の書き込みが止まる。** +- **PVC の合計はプール(約 340Gi)に収める。** thin なので超えても作れるが、**プールが溢れると全部の PVC の書き込みが止まる。** 残りは denpa の encoded に回している(bootstrap/lvm-localpv-values.yaml)。 `kubectl -n kube-system get pods -l app=lvm-thinpool` が 90% で NotReady になる(ログに 1 時間ごとの使用率)。 denpa の残量の表示(statfs)は PVC の大きさで見るので、プールの空きより多く出る - **新しい PVC の直下は root の 0755**(local-path は 0777 だった)。root 以外で書くアプリは `fsGroup` が要る(worklog に足した。ほかは付いているか root) @@ -135,11 +135,11 @@ AMT の SOL は、OS からは PCI のシリアルポート(「Intel … KT Cont ## 4. 移す直前(DL360 で) コマンドは全部 `tools/t.ps1 --admin` のシェルで打つ([../recovery/README.md](../recovery/README.md)「道具と経路」)。 -LVM への切り替えは main に入っていること(入れたあと DL360 の Argo CD は `adguardhome-work` を 30Gi に広げられずに同期のエラーを出すが、 +LVM への切り替えは main に入っていること(入れたあと DL360 の Argo CD は `adguardhome-work` を 10Gi に広げられず、denpa などの縮めた PVC も縮められずに同期のエラーを出すが、 local-path が広げられないだけで、入れ直せば消える)。worklog の `fsGroup`(fj.doany.io の doa/worklog-cloud#179)も入っていること。 1. **AdGuard のクエリログを消す**(Web の「設定 → 一般設定 → クエリログを消去」)。`querylog.json` が 68 GB あり、 - 最後のバックアップに乗ると、戻すときに `adguardhome-work`(30Gi)に入らず `plan-all` が止まる。 + 最後のバックアップに乗ると、戻すときに `adguardhome-work`(10Gi)に入らず `plan-all` が止まる。 消す前に、どの端末が 1 日 10 GB も引いているかを見ておく(2026-10 末から。前は 1 日 0.3 GB ほど) 2. **Z440 の MAC を `LinkAliasConfig` に足して main にマージ**(「2. NIC と bond0」)。talos-boot が通ること 3. machine config を描く: `./bootstrap/render.sh bootstrap/clusterconfig`(`valid for metal mode` まで出ること)。