mirror of
https://github.com/lukaszraczylo/rpi-home-cluster-setup.git
synced 2026-10-18 01:27:31 +00:00
Home K8S setup
This commit is contained in:
@@ -0,0 +1,16 @@
|
||||
---
|
||||
- name: Taint nodes
|
||||
ansible.builtin.shell:
|
||||
cmd: |
|
||||
kubectl taint nodes --all node-role.kubernetes.io/master:NoSchedule- || true
|
||||
|
||||
- name: Install py3-pip
|
||||
ansible.builtin.package:
|
||||
name:
|
||||
- py3-pip
|
||||
- helm
|
||||
state: present
|
||||
|
||||
- name: Install yaml package
|
||||
pip:
|
||||
name: PyYAML
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
# - name: Github authentication
|
||||
# ansible.builtin.shell:
|
||||
# cmd: |
|
||||
# kubectl create secret docker-registry docker-ghcr --docker-server=https://ghcr.io --docker-username=lukaszraczylo --docker-password=$GITHUB_TOKEN [email protected]
|
||||
@@ -0,0 +1,3 @@
|
||||
---
|
||||
# - include: k8s-general-setup.yml
|
||||
- include: k8s-github.yml
|
||||
@@ -0,0 +1,94 @@
|
||||
---
|
||||
- name: Install packages - filesystem
|
||||
ansible.builtin.package:
|
||||
name:
|
||||
- e2fsprogs
|
||||
- parted
|
||||
state: present
|
||||
|
||||
- name: Create partition for perm data
|
||||
community.general.parted:
|
||||
device: /dev/mmcblk0
|
||||
number: 2
|
||||
fs_type: ext4
|
||||
part_start: 1GiB
|
||||
part_end: 100%
|
||||
flags: [ boot ]
|
||||
state: present
|
||||
|
||||
- name: Fomat perm data partition
|
||||
community.general.filesystem:
|
||||
dev: /dev/mmcblk0p2
|
||||
fstype: ext4
|
||||
ignore_errors: yes
|
||||
|
||||
- name: Re-mount old data partition
|
||||
ansible.posix.mount:
|
||||
path: /media/mmcblk0p1
|
||||
src: /dev/mmcblk0p1
|
||||
opts: rw
|
||||
state: remounted
|
||||
|
||||
- name: Mount perm data partition
|
||||
ansible.posix.mount:
|
||||
path: /mnt
|
||||
src: /dev/mmcblk0p2
|
||||
opts: rw
|
||||
fstype: ext4
|
||||
state: mounted
|
||||
|
||||
- name: Overwrite setup-disk
|
||||
ansible.builtin.copy:
|
||||
src: static/setup-disk
|
||||
dest: /sbin/setup-disk
|
||||
owner: root
|
||||
group: root
|
||||
mode: '0744'
|
||||
backup: yes
|
||||
|
||||
- name: Setup new disk as system
|
||||
ansible.builtin.command:
|
||||
cmd: setup-disk -m sys /mnt
|
||||
creates: /mnt/bin/date
|
||||
|
||||
- name: Housekeeping
|
||||
ansible.builtin.shell:
|
||||
cmd: |
|
||||
rm -f /media/mmcblk0p1/boot/*
|
||||
cd /mnt
|
||||
rm boot/boot
|
||||
mv boot/* /media/mmcblk0p1/boot/
|
||||
rm -Rf boot
|
||||
mkdir media/mmcblk0p1
|
||||
ln -s media/mmcblk0p1/boot boot
|
||||
removes: /mnt/boot/boot
|
||||
|
||||
- name: Add mountpoints to fstab
|
||||
ansible.builtin.shell:
|
||||
cmd: |
|
||||
echo "/dev/mmcblk0p1 /media/mmcblk0p1 vfat defaults 0 0" >> etc/fstab
|
||||
echo "/dev/mmcblk0p1 /media/mmcblk0p1 vfat defaults 0 0" >> /etc/fstab
|
||||
sed -i '/cdrom/d' etc/fstab
|
||||
sed -i '/floppy/d' etc/fstab
|
||||
sed -i '/usbdisk/d' etc/fstab
|
||||
touch /mnt/.nvm_mountpoints
|
||||
chdir: /mnt
|
||||
creates: /mnt/.nvm_mountpoints
|
||||
|
||||
- name: Enable repositories and cgroups
|
||||
ansible.builtin.shell:
|
||||
cmd: |
|
||||
sed -i '/edge/s/^#//' /mnt/etc/apk/repositories
|
||||
sed -i 's/^/root=\/dev\/mmcblk0p2 /' /media/mmcblk0p1/cmdline.txt
|
||||
echo "cgroup_enable=cpuset cgroup_enable=memory cgroup_memory=1" >> /media/mmcblk0p1/cmdline.txt
|
||||
sed -i ':a;N;$!ba;s/\n/ /g' /media/mmcblk0p1/cmdline.txt
|
||||
touch /mnt/.nvm_cgroups
|
||||
creates: /mnt/.nvm_cgroups
|
||||
|
||||
- name: Commit changes
|
||||
ansible.builtin.shell:
|
||||
chdir: /media/mmcblk0p1
|
||||
cmd: lbu_commit -d || true
|
||||
|
||||
- name: Reboot
|
||||
reboot:
|
||||
@@ -0,0 +1,11 @@
|
||||
---
|
||||
- name: Pull basic images
|
||||
ansible.builtin.shell:
|
||||
cmd: kubeadm config images pull
|
||||
|
||||
- name: Install helm
|
||||
ansible.builtin.shell:
|
||||
cmd: |
|
||||
curl https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3 | bash
|
||||
creates: /etc/kubernetes/kubelet.conf
|
||||
register: k8sinit_output
|
||||
@@ -0,0 +1,9 @@
|
||||
---
|
||||
- name: Check for base system config lockfile
|
||||
stat: path="/mnt/.nvm_mountpoints"
|
||||
register: basic_config_lock
|
||||
- include: filesystem.yml
|
||||
when: basic_config_lock.stat.exists == False
|
||||
- include: networking.yml
|
||||
- include: kubernetes.yml
|
||||
- include: nfs.yml
|
||||
@@ -0,0 +1,68 @@
|
||||
---
|
||||
- name: Set hostname
|
||||
ansible.builtin.hostname:
|
||||
name: '{{ inventory_hostname }}'
|
||||
|
||||
- name: "Build hosts file"
|
||||
lineinfile:
|
||||
dest: /etc/hosts
|
||||
regexp: '.*{{ item }}$'
|
||||
line: "{{hostvars[item]['ansible_default_ipv4']['address']}} {{item}} {{item}}.local"
|
||||
state: present
|
||||
register: etchostsupdate
|
||||
when: hostvars[item]['ansible_facts']['default_ipv4'] is defined
|
||||
with_items:
|
||||
- "{{ groups['all'] }}"
|
||||
|
||||
- name: Install packages for networking
|
||||
ansible.builtin.package:
|
||||
name:
|
||||
- dbus
|
||||
- avahi
|
||||
- kubernetes
|
||||
- kubectl
|
||||
- docker
|
||||
- cni-plugins
|
||||
- kubelet
|
||||
- kubeadm
|
||||
- sudo
|
||||
- curl
|
||||
state: present
|
||||
|
||||
- name: Enable service dbus
|
||||
ansible.builtin.service:
|
||||
name: dbus
|
||||
state: started
|
||||
enabled: yes
|
||||
|
||||
- name: Overwrite avahi config
|
||||
ansible.builtin.copy:
|
||||
src: static/avahi-config
|
||||
dest: /etc/avahi/avahi-daemon.conf
|
||||
owner: root
|
||||
group: root
|
||||
mode: '0644'
|
||||
backup: yes
|
||||
|
||||
- name: Enable service avahi
|
||||
ansible.builtin.service:
|
||||
name: avahi-daemon
|
||||
state: restarted
|
||||
enabled: yes
|
||||
|
||||
- name: Enable service docker
|
||||
ansible.builtin.service:
|
||||
name: docker
|
||||
state: started
|
||||
enabled: yes
|
||||
|
||||
- name: Enable service kubelet
|
||||
ansible.builtin.service:
|
||||
name: kubelet
|
||||
state: started
|
||||
enabled: yes
|
||||
|
||||
- name: Enable promisc mode for ARP requests
|
||||
ansible.builtin.shell:
|
||||
cmd: |
|
||||
ip link set eth0 promisc on
|
||||
@@ -0,0 +1,34 @@
|
||||
---
|
||||
- name: Install nfsprogs
|
||||
ansible.builtin.package:
|
||||
name:
|
||||
- nfs-utils
|
||||
|
||||
- name: Prepare nfs mountpoint
|
||||
ansible.builtin.shell:
|
||||
cmd: |
|
||||
mkdir -p /media/nfs
|
||||
|
||||
- name: Mount NFS resources
|
||||
ansible.posix.mount:
|
||||
src: "{{settings.nfs_host}}:{{settings.nfs_multi_share_path}}"
|
||||
path: /media/nfs
|
||||
fstype: nfs
|
||||
opts: nofail,noatime,nolock,tcp,actimeo=1800
|
||||
state: mounted
|
||||
|
||||
- name: Mount NFS torrent
|
||||
ansible.posix.mount:
|
||||
src: "{{settings.nfs_host}}:{{settings.nfs_torrent_path}}"
|
||||
path: /mnt/drobo-storage/docker-volumes/torrent
|
||||
fstype: nfs
|
||||
opts: nofail,noatime,nolock,tcp,actimeo=1800
|
||||
state: mounted
|
||||
|
||||
- name: Mount NFS adguard
|
||||
ansible.posix.mount:
|
||||
src: "{{settings.nfs_host}}:{{settings.nfs_adguard_path}}"
|
||||
path: /mnt/drobo-storage/docker-volumes/adguard
|
||||
fstype: nfs
|
||||
opts: nofail,noatime,nolock,tcp,actimeo=1800
|
||||
state: mounted
|
||||
@@ -0,0 +1,2 @@
|
||||
---
|
||||
- include: master-setup.yml
|
||||
@@ -0,0 +1,35 @@
|
||||
---
|
||||
- name: Initialize cluster
|
||||
ansible.builtin.shell:
|
||||
cmd: |
|
||||
kubeadm reset -f
|
||||
kubeadm init --pod-network-cidr=10.244.0.0/16
|
||||
creates: /etc/kubernetes/kubelet.conf
|
||||
register: k8sinit_output
|
||||
|
||||
- name: Storing Logs and Generated token for nodes config
|
||||
ansible.builtin.copy:
|
||||
content: '{{ k8sinit_output.stdout }}'
|
||||
dest: cluster_join_file
|
||||
when: '"token" in k8sinit_output.stdout'
|
||||
|
||||
- name: Pulling the token file for setup purposes
|
||||
ansible.builtin.fetch:
|
||||
flat: yes
|
||||
src: cluster_join_file
|
||||
dest: static/token_file
|
||||
when: '"token" in k8sinit_output.stdout'
|
||||
|
||||
- name: Copying kubeconfig file
|
||||
ansible.builtin.shell:
|
||||
cmd: |
|
||||
mkdir -p $HOME/.kube
|
||||
cp -f /etc/kubernetes/admin.conf $HOME/.kube/config
|
||||
chown $(id -u):$(id -g) $HOME/.kube/config
|
||||
|
||||
- name: Save kubeconfig locally
|
||||
ansible.builtin.fetch:
|
||||
flat: yes
|
||||
src: /etc/kubernetes/admin.conf
|
||||
dest: static/kubectl.conf
|
||||
fail_on_missing: yes
|
||||
@@ -0,0 +1,2 @@
|
||||
---
|
||||
- include: worker-setup.yml
|
||||
@@ -0,0 +1,31 @@
|
||||
---
|
||||
- name: Copy token file to workers
|
||||
ansible.builtin.copy:
|
||||
src: static/token_file
|
||||
dest: /root/cluster_token_file
|
||||
owner: root
|
||||
group: root
|
||||
mode: '0644'
|
||||
|
||||
- name: Joining worker nodes with kubernetes master
|
||||
ansible.builtin.shell:
|
||||
cmd: |
|
||||
kubeadm reset -f
|
||||
cat /root/cluster_token_file | tail -2 > out.sh
|
||||
sh out.sh
|
||||
creates: out.sh
|
||||
|
||||
- name: Copy kubectl config to workers
|
||||
ansible.builtin.copy:
|
||||
src: static/kubectl.conf
|
||||
dest: /root/kubectl-config
|
||||
owner: root
|
||||
group: root
|
||||
mode: '0644'
|
||||
|
||||
- name: Copying kubeconfig file
|
||||
ansible.builtin.shell:
|
||||
cmd: |
|
||||
mkdir -p $HOME/.kube
|
||||
cp -f /root/kubectl-config $HOME/.kube/config
|
||||
chown $(id -u):$(id -g) $HOME/.kube/config
|
||||
Reference in New Issue
Block a user