# llama.cpp in k3s statt Compose (Task 6.1, D6). Aufruf über playbooks/gpu-llamacpp-k3s.yml (je VM nacheinander). # Rückweg je VM: kubectl -n knaster delete deploy llamacpp-, dann in der VM # docker compose --project-directory /opt/knaster/gpu-llamacpp start - name: Profile, Karten, Modelle ansible.builtin.include_tasks: prepare.yml # 1. Image aus Docker in das containerd von k3s übernehmen (kein Neubau, kein Registry-Umweg) - name: Image in k3s vorhanden? ansible.builtin.command: /usr/local/bin/k3s ctr images ls -q register: llamacpp_k3s_images changed_when: false - name: Image aus Docker importieren ansible.builtin.shell: set -o pipefail; docker save {{ llamacpp_image }} | /usr/local/bin/k3s ctr images import - args: executable: /bin/bash when: ("docker.io/" ~ llamacpp_image) not in llamacpp_k3s_images.stdout async: 1800 poll: 15 # 2. Compose-Stack anhalten (Host-Ports und VRAM werden frei), Dateien bleiben für den Rückweg - name: Compose-Projekt vorhanden? ansible.builtin.stat: path: "{{ llamacpp_dir }}/docker-compose.yml" register: llamacpp_compose_file - name: Compose-Stack anhalten community.docker.docker_compose_v2: project_src: "{{ llamacpp_dir }}" state: stopped when: llamacpp_compose_file.stat.exists # 3. Manifest je VM rendern (UUID der P2000) und anwenden - name: Namespace knaster ansible.builtin.command: kubectl apply -f {{ llamacpp_k3s_namespace }} register: llamacpp_ns changed_when: "'created' in llamacpp_ns.stdout" delegate_to: localhost become: false - name: Deployment anwenden ansible.builtin.command: cmd: kubectl apply -f - stdin: "{{ lookup('template', llamacpp_k3s_template) }}" vars: llamacpp_k3s_containers: "{{ llamacpp_profiles | map('extract', llamacpp_k3s_services) | flatten }}" register: llamacpp_apply changed_when: "'configured' in llamacpp_apply.stdout or 'created' in llamacpp_apply.stdout" delegate_to: localhost become: false - name: Warten, bis der Pod bereit ist ansible.builtin.command: kubectl -n knaster rollout status deployment/llamacpp-{{ inventory_hostname }} --timeout=600s changed_when: false delegate_to: localhost become: false # 4. Prüfen in der VM: Dienste gesund, Prozesse nur auf der P2000 - name: Gesundheit in der VM prüfen ansible.builtin.uri: url: "http://127.0.0.1:{{ item.port }}/health" status_code: 200 loop: "{{ llamacpp_profiles | map('extract', llamacpp_k3s_services) | flatten }}" loop_control: label: "{{ item.name }}:{{ item.port }}" - name: Belegung der Karten ansible.builtin.command: nvidia-smi --query-gpu=index,name,memory.used,memory.total --format=csv,noheader register: llamacpp_vram changed_when: false - name: Ergebnis ansible.builtin.debug: msg: "{{ llamacpp_vram.stdout_lines }}"