docs: right-size VM 106 (docker-home) — 16 GB/8 vCPU → 6 GB/4 vCPU (#19) #47

Open
Claude wants to merge 2 commits from issue/19-right-size-vm-106-docker-home-16-gb-6-8-gb-ram into main
Collaborator

Closes #19

Summary

Infrastructure audit found VM 106 (docker-home) running 3 containers on 16 GB RAM with only 1.1 GB in use (7%). This PR documents the target spec and provides the runbook to execute the resize.

Pre-checks performed

  • No container --memory limits: docker inspect confirms MemoryLimit: 0 on pihole, nginx-proxy-manager, and portainer — no OOM risk at 6 GB
  • No Docker Compose memory reservations: grepped all /home/cal/container-data/*/docker-compose.yml — no memory, mem_limit, or memswap keys
  • Live usage at audit time: 1.1 GB used / 15 GB total; Pi-hole 463 MiB, NPM 367 MiB, Portainer 12 MiB

Files changed

File Change
server-configs/proxmox/qemu/106.conf memory: 16384 → 6144, sockets: 2 → 1 (8 → 4 vCPUs)
server-configs/proxmox/right-sizing-vm-106.md New runbook: pre-check results, resize commands, validation steps, rollback

To execute the resize

Follow the runbook in server-configs/proxmox/right-sizing-vm-106.md:

ssh proxmox "qm shutdown 106 --timeout 60"
ssh proxmox "qm set 106 --memory 6144 --sockets 1 --cores 4"
ssh proxmox "qm start 106"

Brief Pi-hole/NPM downtime — manticore Pi-hole 2 provides HA DNS during shutdown.

Other observations

  • The SSH config has # DECOMMISSIONED: docker-home (10.10.0.124) — this comment refers to an old alias (old IP). VM 106 is now at 10.10.0.16. The wildcard Host 10.10.0.* rule handles SSH access. No change needed but worth noting.
Closes #19 ## Summary Infrastructure audit found VM 106 (docker-home) running 3 containers on 16 GB RAM with only 1.1 GB in use (7%). This PR documents the target spec and provides the runbook to execute the resize. ## Pre-checks performed - **No container `--memory` limits**: `docker inspect` confirms `MemoryLimit: 0` on pihole, nginx-proxy-manager, and portainer — no OOM risk at 6 GB - **No Docker Compose memory reservations**: grepped all `/home/cal/container-data/*/docker-compose.yml` — no `memory`, `mem_limit`, or `memswap` keys - **Live usage at audit time**: 1.1 GB used / 15 GB total; Pi-hole 463 MiB, NPM 367 MiB, Portainer 12 MiB ## Files changed | File | Change | |------|--------| | `server-configs/proxmox/qemu/106.conf` | `memory: 16384 → 6144`, `sockets: 2 → 1` (8 → 4 vCPUs) | | `server-configs/proxmox/right-sizing-vm-106.md` | New runbook: pre-check results, resize commands, validation steps, rollback | ## To execute the resize Follow the runbook in `server-configs/proxmox/right-sizing-vm-106.md`: ```bash ssh proxmox "qm shutdown 106 --timeout 60" ssh proxmox "qm set 106 --memory 6144 --sockets 1 --cores 4" ssh proxmox "qm start 106" ``` Brief Pi-hole/NPM downtime — manticore Pi-hole 2 provides HA DNS during shutdown. ## Other observations - The SSH config has `# DECOMMISSIONED: docker-home (10.10.0.124)` — this comment refers to an old alias (old IP). VM 106 is now at 10.10.0.16. The wildcard `Host 10.10.0.*` rule handles SSH access. No change needed but worth noting.
Claude added 2 commits 2026-04-04 04:06:03 +00:00
Establishes a first-Sunday-of-the-month maintenance window orchestrated
by Ansible on LXC 304. Split into two playbooks to handle the self-reboot
paradox (the controller is a guest on the host being rebooted):

- monthly-reboot.yml: snapshots, tiered shutdown with per-guest polling,
  fire-and-forget host reboot
- post-reboot-startup.yml: controlled tiered startup with staggered delays,
  Pi-hole UDP DNS fix, validation, and snapshot cleanup

Also fixes onboot:1 on VM 109, LXC 221, LXC 223 and creates a recurring
Google Calendar event for the maintenance window.

Closes #26

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
docs: right-size VM 106 (docker-home) — 16 GB/8 vCPU → 6 GB/4 vCPU (#19)
All checks were successful
Auto-merge docs-only PRs / auto-merge-docs (pull_request) Successful in 5s
9b47f0c027
Pre-checks confirmed safe to right-size: no container --memory limits,
no Docker Compose memory reservations. Live usage 1.1 GB / 15 GB (7%).

- Update 106.conf: memory 16384 → 6144, sockets 2 → 1 (8 → 4 vCPUs)
- Add right-sizing-vm-106.md runbook with pre-check results and resize commands

Closes #19

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Claude added the
ai-reviewing
label 2026-04-04 04:15:27 +00:00
Claude removed the
ai-reviewing
label 2026-04-04 04:20:28 +00:00
Claude added the
ai-reviewing
label 2026-04-04 04:45:26 +00:00
Claude reviewed 2026-04-04 04:49:00 +00:00
Claude left a comment
Author
Collaborator

AI Code Review

Files Reviewed

  • server-configs/proxmox/qemu/106.conf (modified)
  • server-configs/proxmox/right-sizing-vm-106.md (added)
  • server-configs/proxmox/maintenance-reboot.md (modified — already on main via PR #26)
  • ansible/playbooks/monthly-reboot.yml (in diff — already on main via PR #26)
  • ansible/playbooks/post-reboot-startup.yml (in diff — already on main via PR #26)
  • ansible/systemd/ansible-monthly-reboot.service (in diff — already on main via PR #26)
  • ansible/systemd/ansible-monthly-reboot.timer (in diff — already on main via PR #26)
  • ansible/systemd/ansible-post-reboot.service (in diff — already on main via PR #26)

Findings

Correctness

  • 106.conf: memory 16384 → 6144 and sockets: 2 → 1 are correct. cores: 4 unchanged. The resulting spec (1 socket × 4 cores = 4 vCPUs, 6 GB RAM) matches the PR description.
  • right-sizing-vm-106.md: Pre-check results are thorough — MemoryLimit: 0 on all 3 containers confirms no OOM risk. Live usage (1.1 GB / 15 GB) is documented. 6 GB target gives ~4× headroom which is appropriate.
  • Verification commands in Step 4 use ssh pihole — confirmed valid alias in ~/.ssh/config pointing to 10.10.0.16 (VM 106). No issue.
  • The diff contains 8 files but only 2 will be net-new on main. The other 6 (Ansible playbooks + systemd units) are already present from PR #26. Gitea confirms mergeable: true — the merge will be clean.

Security

  • No issues. Infrastructure documentation and config snapshot only. No secrets, no user input, no attack surface.

Style & Conventions

  • Runbook follows the established frontmatter format (title, description, type, domain, tags). Consistent with other runbooks in the repo.
  • SSH commands use aliases from ~/.ssh/config as required by project conventions.
  • The docs: prefix is defensible for a config snapshot + runbook. Note: the .conf file means the auto-merge-docs CI workflow won't auto-merge — intentional given the infra change warrants manual review.

Suggestions

  • The PR description's "Files changed" table lists only 2 files but the diff shows 8. Harmless (the other 6 are already on main), but a note in the PR body would avoid confusion for anyone inspecting the diff later.
  • Step 2 in the runbook runs qm set as two separate commands. Could be combined into one (qm set 106 --memory 6144 --sockets 1 --cores 4) matching the quick-reference in the PR body. Either is correct.

Verdict: APPROVED

The config change is accurate, the runbook is comprehensive and correct, SSH aliases are valid, and pre-checks were thorough. The extra files in the diff are a side effect of branch history and will merge cleanly as no-ops. Safe to merge.


Automated review by Claude PR Reviewer

## AI Code Review ### Files Reviewed - `server-configs/proxmox/qemu/106.conf` (modified) - `server-configs/proxmox/right-sizing-vm-106.md` (added) - `server-configs/proxmox/maintenance-reboot.md` (modified — already on main via PR #26) - `ansible/playbooks/monthly-reboot.yml` (in diff — already on main via PR #26) - `ansible/playbooks/post-reboot-startup.yml` (in diff — already on main via PR #26) - `ansible/systemd/ansible-monthly-reboot.service` (in diff — already on main via PR #26) - `ansible/systemd/ansible-monthly-reboot.timer` (in diff — already on main via PR #26) - `ansible/systemd/ansible-post-reboot.service` (in diff — already on main via PR #26) ### Findings #### Correctness - `106.conf`: memory `16384 → 6144` and `sockets: 2 → 1` are correct. `cores: 4` unchanged. The resulting spec (1 socket × 4 cores = 4 vCPUs, 6 GB RAM) matches the PR description. - `right-sizing-vm-106.md`: Pre-check results are thorough — `MemoryLimit: 0` on all 3 containers confirms no OOM risk. Live usage (1.1 GB / 15 GB) is documented. 6 GB target gives ~4× headroom which is appropriate. - Verification commands in Step 4 use `ssh pihole` — confirmed valid alias in `~/.ssh/config` pointing to `10.10.0.16` (VM 106). No issue. - The diff contains 8 files but only 2 will be net-new on main. The other 6 (Ansible playbooks + systemd units) are already present from PR #26. Gitea confirms `mergeable: true` — the merge will be clean. #### Security - No issues. Infrastructure documentation and config snapshot only. No secrets, no user input, no attack surface. #### Style & Conventions - Runbook follows the established frontmatter format (title, description, type, domain, tags). Consistent with other runbooks in the repo. - SSH commands use aliases from `~/.ssh/config` as required by project conventions. - The `docs:` prefix is defensible for a config snapshot + runbook. Note: the `.conf` file means the `auto-merge-docs` CI workflow won't auto-merge — intentional given the infra change warrants manual review. #### Suggestions - The PR description's "Files changed" table lists only 2 files but the diff shows 8. Harmless (the other 6 are already on main), but a note in the PR body would avoid confusion for anyone inspecting the diff later. - Step 2 in the runbook runs `qm set` as two separate commands. Could be combined into one (`qm set 106 --memory 6144 --sockets 1 --cores 4`) matching the quick-reference in the PR body. Either is correct. ### Verdict: APPROVED The config change is accurate, the runbook is comprehensive and correct, SSH aliases are valid, and pre-checks were thorough. The extra files in the diff are a side effect of branch history and will merge cleanly as no-ops. Safe to merge. --- *Automated review by Claude PR Reviewer*
Claude added
ai-reviewed
and removed
ai-reviewing
labels 2026-04-04 04:49:07 +00:00
All checks were successful
Auto-merge docs-only PRs / auto-merge-docs (pull_request) Successful in 5s
This pull request can be merged automatically.
This branch is out-of-date with the base branch
You are not authorized to merge this pull request.

Checkout

From your project repository, check out a new branch and test the changes.
git fetch -u origin issue/19-right-size-vm-106-docker-home-16-gb-6-8-gb-ram:issue/19-right-size-vm-106-docker-home-16-gb-6-8-gb-ram
git checkout issue/19-right-size-vm-106-docker-home-16-gb-6-8-gb-ram
Sign in to join this conversation.
No description provided.