diff --git a/host_vars/alpha-worker-13.yaml b/host_vars/alpha-worker-13.yaml new file mode 100644 index 0000000..151d555 --- /dev/null +++ b/host_vars/alpha-worker-13.yaml @@ -0,0 +1,3 @@ +name: alpha-worker-13 +vcpu: + value: 2 diff --git a/host_vars/alpha-worker-14.yaml b/host_vars/alpha-worker-14.yaml new file mode 100644 index 0000000..ac76480 --- /dev/null +++ b/host_vars/alpha-worker-14.yaml @@ -0,0 +1,3 @@ +name: alpha-worker-14 +vcpu: + value: 2 diff --git a/host_vars/alpha-worker-15.yaml b/host_vars/alpha-worker-15.yaml new file mode 100644 index 0000000..31aa866 --- /dev/null +++ b/host_vars/alpha-worker-15.yaml @@ -0,0 +1,3 @@ +name: alpha-worker-15 +vcpu: + value: 2 diff --git a/host_vars/alpha-worker-16.yaml b/host_vars/alpha-worker-16.yaml new file mode 100644 index 0000000..e15b833 --- /dev/null +++ b/host_vars/alpha-worker-16.yaml @@ -0,0 +1,3 @@ +name: alpha-worker-16 +vcpu: + value: 2 diff --git a/host_vars/alpha-worker-17.yaml b/host_vars/alpha-worker-17.yaml new file mode 100644 index 0000000..416c135 --- /dev/null +++ b/host_vars/alpha-worker-17.yaml @@ -0,0 +1,3 @@ +name: alpha-worker-17 +vcpu: + value: 2 diff --git a/host_vars/poweredge-r720.yaml b/host_vars/poweredge-r720.yaml new file mode 100644 index 0000000..09a41ff --- /dev/null +++ b/host_vars/poweredge-r720.yaml @@ -0,0 +1,16 @@ +--- +# Host vars for poweredge-r720 +libvirt_networks: + - name: wan + forward: + mode: bridge + bridge: + name: wan + dev: eno1 +libvirt_guests: + - alpha-worker-13 + - alpha-worker-14 + - alpha-worker-15 + - alpha-worker-16 + - alpha-worker-17 +nfs_exports: ["/data *(rw,sync,no_root_squash)"] diff --git a/poweredge-r720.yaml b/poweredge-r720.yaml new file mode 100644 index 0000000..803c05a --- /dev/null +++ b/poweredge-r720.yaml @@ -0,0 +1,228 @@ +--- +# Playbook for eom.dev +- name: Initialize hypervisors + hosts: poweredge-r720 + become: true + vars_files: + - ../secrets.yaml + roles: + - role: ericomeehan.debian + - role: ericomeehan.ericomeehan + +- name: Initialize Network File Systems + hosts: poweredge-r720 + become: true + roles: + - role: geerlingguy.nfs + tasks: + - name: Create NFS directories + file: + path: "{{ item }}" + state: directory + loop: + - /data/alpha + - /data/beta + - /data/gamma + +- name: Deploy virtual machines + hosts: poweredge-r720 + become: true + vars_files: + - ../secrets.yaml + pre_tasks: + - name: Install packages for virtualization + apt: + update_cache: yes + name: + - bridge-utils + - genisoimage + - qemu-utils + - qemu-system-x86 + - libvirt-daemon-system + - python3-libvirt + - python3-lxml + state: present + + - name: Enable IPv4 packet forwarding + lineinfile: + path: /etc/sysctl.conf + line: 'net.ipv4.ip_forward = 1' + state: present + + - name: Enable IPv6 packet forwarding + lineinfile: + path: /etc/sysctl.conf + line: 'net.ipv6.conf.all.forwarding = 1' + state: present + + - name: Reload sysctl configuration + command: sysctl --system + + - name: Define libvirt networks + community.libvirt.virt_net: + name: "{{ item.name }}" + command: define + xml: "{{ lookup('template', 'libvirt-network.xml.j2') }}" + loop: "{{ libvirt_networks }}" + + - name: Create libvirt networks + community.libvirt.virt_net: + name: "{{ item.name }}" + command: create + loop: "{{ libvirt_networks }}" + + - name: Autostart libvirt networks + community.libvirt.virt_net: + name: "{{ item.name }}" + autostart: true + loop: "{{ libvirt_networks }}" + + - name: Download base image for guests + get_url: + url: https://cloud.debian.org/images/cloud/bookworm/latest/debian-12-generic-amd64.qcow2 + dest: "/var/lib/libvirt/images/{{ item }}.qcow2" + force: true + loop: "{{ libvirt_guests }}" + + - name: Create cloud-config directory for guests + file: + path: "/var/lib/libvirt/configs/{{ item }}" + state: directory + loop: "{{ libvirt_guests }}" + + - name: Copy cloud-config templates for guests + template: + src: eom_cloud.cfg.j2 + dest: "/var/lib/libvirt/configs/{{ domain.name }}/user-data" + force: true + loop: "{{ libvirt_guests }}" + vars: + domain: "{{ hostvars[item] }}" + + - name: Copy cloud-config templates for guests + template: + src: meta-data.j2 + dest: "/var/lib/libvirt/configs/{{ domain.name }}/meta-data" + force: true + loop: "{{ libvirt_guests }}" + vars: + domain: "{{ hostvars[item] }}" + + - name: Generate iso for guests + command: "genisoimage -output /var/lib/libvirt/images/{{ item }}.iso -volid cidata -joliet -rock /var/lib/libvirt/configs/{{ item }}/user-data /var/lib/libvirt/configs/{{ item }}/meta-data" + loop: "{{ libvirt_guests }}" + + - name: Copy logging config for guests + copy: + src: 05_logging.cfg + dest: "/var/lib/libvirt/configs/{{ item }}/05_logging.cfg" + loop: "{{ libvirt_guests }}" + + - name: Define libvirt virtual machine + community.libvirt.virt: + command: define + xml: "{{ lookup('template', 'libvirt-vm.xml.j2') }}" + loop: "{{ libvirt_guests }}" + vars: + domain: "{{ hostvars[item] }}" + + - name: Create libvirt virtual machine + community.libvirt.virt: + name: "{{ item }}" + command: create + loop: "{{ libvirt_guests }}" + + - name: Autostart libvirt virtual machine + community.libvirt.virt: + name: "{{ item }}" + autostart: true + loop: "{{ libvirt_guests }}" + +- name: Wait for manual tasks + hosts: localhost + tasks: + - name: Trust SSH identities + pause: + prompt: "Press Enter to continue..." + +- name: Initialize virtual machines + hosts: + - alpha-worker-13 + - alpha-worker-14 + - alpha-worker-15 + - alpha-worker-16 + - alpha-worker-17 + become: true + vars_files: + - ../secrets.yaml + roles: + - role: ericomeehan.ericomeehan + +- name: Initialize Kubernetes clusters + hosts: + - alpha-worker-13 + - alpha-worker-14 + - alpha-worker-15 + - alpha-worker-16 + - alpha-worker-17 + become: true + pre_tasks: + - name: Enable IPv4 packet forwarding + lineinfile: + path: /etc/sysctl.conf + line: 'net.ipv4.ip_forward = 1' + state: present + + - name: Enable IPv6 packet forwarding + lineinfile: + path: /etc/sysctl.conf + line: 'net.ipv6.conf.all.forwarding = 1' + state: present + + - name: Reload sysctl configuration + command: sysctl --system + + - name: Enable br_netfilter kernel module + command: modprobe br_netfilter + + - name: Add the module to a configuration file for persistence + lineinfile: + path: /etc/modules-load.d/modules.conf + line: "br_netfilter" + + - name: Install kubernetes library + apt: + name: python3-kubernetes + state: present + + roles: + - role: geerlingguy.containerd + +- name: Alpha Cluster + hosts: + - alpha-worker-13 + - alpha-worker-14 + - alpha-worker-15 + - alpha-worker-16 + - alpha-worker-17 + become: true + roles: + - role: geerlingguy.kubernetes + +- name: Deploy base Kubernetes resources + hosts: alpha_control_plane + become: true + tasks: + - name: Deploy NFS Provisioner + kubernetes.core.helm: + name: nfs-subdir-external-provisioner + chart_ref: nfs-subdir-external-provisioner/nfs-subdir-external-provisioner + release_namespace: r720-nfs-provisioner + create_namespace: true + values: + nfs: + server: poweredge-r720 + path: "/data/alpha" + storageClass: + defaultClass: false + name: r720-nfs-client