From 2c90dc01a437dcf92a65b320eb7e9a3036e35c21 Mon Sep 17 00:00:00 2001 From: Erich Blume Date: Sat, 17 Jan 2026 22:39:38 -0800 Subject: [PATCH] Add minikube role for Kubernetes cluster on indri - Create ansible/roles/minikube for minikube cluster setup - Use podman driver with cri-o runtime - Set memory to 7800MB (vs 8192 podman) to account for VM overhead - Add minikube role to indri playbook - Update k8s-migration plan with implementation details Deployed with Kubernetes v1.34.0 and CRI-O 1.24.6. Co-Authored-By: Claude Opus 4.5 --- ansible/playbooks/indri.yml | 2 + ansible/roles/minikube/defaults/main.yml | 8 ++++ ansible/roles/minikube/handlers/main.yml | 9 +++++ ansible/roles/minikube/tasks/main.yml | 51 ++++++++++++++++++++++++ plans/k8s-migration.md | 4 ++ 5 files changed, 74 insertions(+) create mode 100644 ansible/roles/minikube/defaults/main.yml create mode 100644 ansible/roles/minikube/handlers/main.yml create mode 100644 ansible/roles/minikube/tasks/main.yml diff --git a/ansible/playbooks/indri.yml b/ansible/playbooks/indri.yml index e8dd762..63c6dea 100644 --- a/ansible/playbooks/indri.yml +++ b/ansible/playbooks/indri.yml @@ -105,6 +105,8 @@ tags: zot_metrics - role: podman tags: podman + - role: minikube + tags: minikube - role: plex_metrics tags: plex_metrics - role: postgresql diff --git a/ansible/roles/minikube/defaults/main.yml b/ansible/roles/minikube/defaults/main.yml new file mode 100644 index 0000000..1b520ec --- /dev/null +++ b/ansible/roles/minikube/defaults/main.yml @@ -0,0 +1,8 @@ +--- +# Minikube cluster configuration +minikube_cpus: 4 +# Note: Must be less than podman machine memory (8192MB) to account for overhead +minikube_memory: 7800 +minikube_disk_size: "200g" +minikube_driver: podman +minikube_container_runtime: cri-o diff --git a/ansible/roles/minikube/handlers/main.yml b/ansible/roles/minikube/handlers/main.yml new file mode 100644 index 0000000..7ba10c9 --- /dev/null +++ b/ansible/roles/minikube/handlers/main.yml @@ -0,0 +1,9 @@ +--- +# Minikube handlers +# Note: Restarting minikube is a heavy operation and may require manual intervention + +- name: Restart minikube + ansible.builtin.shell: | + minikube stop 2>/dev/null || true + minikube start + changed_when: true diff --git a/ansible/roles/minikube/tasks/main.yml b/ansible/roles/minikube/tasks/main.yml new file mode 100644 index 0000000..ac6cc34 --- /dev/null +++ b/ansible/roles/minikube/tasks/main.yml @@ -0,0 +1,51 @@ +--- +# Minikube installation and cluster setup for indri +# Requires podman machine to be running (see podman role) +# +# NOTE: Similar to podman, minikube start may have issues when run via SSH. +# If cluster fails to start, manually run on indri: +# minikube start --driver=podman --container-runtime=cri-o \ +# --cpus=4 --memory=8192 --disk-size=200g + +- name: Install minikube via homebrew + community.general.homebrew: + name: minikube + state: present + +- name: Install kubectl via homebrew + community.general.homebrew: + name: kubectl + state: present + +- name: Check if minikube cluster exists + ansible.builtin.command: + cmd: minikube status --format={% raw %}'{{.Host}}'{% endraw %} + register: minikube_status + changed_when: false + failed_when: false + +- name: Start minikube cluster + ansible.builtin.command: + cmd: > + minikube start + --driver={{ minikube_driver }} + --container-runtime={{ minikube_container_runtime }} + --cpus={{ minikube_cpus }} + --memory={{ minikube_memory }} + --disk-size={{ minikube_disk_size }} + register: minikube_start + changed_when: minikube_start.rc == 0 + failed_when: false # Don't fail - may need manual intervention like podman + when: minikube_status.rc != 0 or 'Running' not in minikube_status.stdout + +- name: Check minikube status after start attempt + ansible.builtin.command: + cmd: minikube status --format={% raw %}'{{.Host}}'{% endraw %} + register: minikube_final_status + changed_when: false + failed_when: false + +- name: Warn if minikube failed to start + ansible.builtin.debug: + msg: "WARNING: minikube may not have started properly. Run 'minikube start' manually on indri if needed. Status: {{ minikube_final_status.stdout | default('unknown') }}" + when: minikube_final_status.rc != 0 or 'Running' not in minikube_final_status.stdout diff --git a/plans/k8s-migration.md b/plans/k8s-migration.md index 12ea944..a48fb62 100644 --- a/plans/k8s-migration.md +++ b/plans/k8s-migration.md @@ -598,6 +598,10 @@ ssh indri 'kubectl get nodes' # Expected: minikube Ready control-plane ... ``` +**Implementation Details:** +- Changed `minikube_memory` from 8192 to 7800 because podman machine reports slightly less available memory (7908MB) due to VM overhead. Minikube rejects memory requests exceeding what podman reports. +- Deployed with Kubernetes v1.34.0 and CRI-O 1.24.6. + --- ### Step 0.10: Configure Kubeconfig on Gilbert