163 lines
4.6 KiB
YAML
Executable File
163 lines
4.6 KiB
YAML
Executable File
---
|
|
- name: Install K3s on Raspberries
|
|
hosts: kubernetes
|
|
roles:
|
|
- common
|
|
become: yes
|
|
gather_facts: yes
|
|
vars:
|
|
k3s_global_env:
|
|
- key: K3S_KUBECONFIG_MODE
|
|
value: 644
|
|
- key: INSTALL_K3S_EXEC
|
|
value: --disable traefik --disable servicelb
|
|
k3s_worker_env:
|
|
- key: K3S_URL
|
|
value: "https://{{ groups.kube_masters[0] }}:6443"
|
|
|
|
tasks:
|
|
|
|
# Make sure "cgroup_enable=cpuset cgroup_memory=1 cgroup_enable=memory" is added to the end
|
|
# of /boot/cmdline.txt before running this playbook
|
|
- name: Add install parameters for all nodes to /etc/environment
|
|
ansible.builtin.lineinfile:
|
|
dest: /etc/environment
|
|
state: present
|
|
regexp: "^{{ item.key }}="
|
|
line: "{{ item.key }}={{ item.value }}"
|
|
with_items: "{{ k3s_global_env }}"
|
|
when: ('kube_masters' in group_names)
|
|
|
|
- name: Reset SSH connection to make new environment variables available
|
|
ansible.builtin.meta: reset_connection
|
|
|
|
- name: Download K3s install script
|
|
ansible.builtin.get_url:
|
|
url: https://get.k3s.io
|
|
dest: ./install-k3s.sh
|
|
mode: '0755'
|
|
|
|
- name: Install K3s on master node
|
|
ansible.builtin.command:
|
|
cmd: ./install-k3s.sh
|
|
become: no
|
|
when: ('kube_masters' in group_names)
|
|
|
|
- name: Save cluster token to file on master
|
|
ansible.builtin.shell: sudo cat /var/lib/rancher/k3s/server/node-token > token
|
|
when: ('kube_masters' in group_names)
|
|
register: token
|
|
|
|
- name: Copy token to local controller
|
|
ansible.builtin.fetch:
|
|
dest: buffer/
|
|
src: ./token
|
|
flat: yes
|
|
when: ('kube_masters' in group_names)
|
|
run_once: yes
|
|
|
|
- name: Copy token file to workers
|
|
ansible.builtin.copy:
|
|
src: buffer/token
|
|
dest: ./token
|
|
when: ('kube_workers' in group_names)
|
|
|
|
- name: Load token as host variable on workers
|
|
ansible.builtin.command:
|
|
cmd: cat token
|
|
register: token
|
|
when: ('kube_workers' in group_names)
|
|
|
|
- name: Add token to worker node's /etc/environment
|
|
ansible.builtin.lineinfile:
|
|
dest: "/etc/environment"
|
|
state: present
|
|
line: "K3S_TOKEN={{ token.stdout }}"
|
|
when: ('kube_workers' in group_names)
|
|
|
|
- name: Add install parameters for worker node to /etc/environment
|
|
ansible.builtin.lineinfile:
|
|
dest: "/etc/environment"
|
|
state: present
|
|
regexp: "^{{ item.key }}="
|
|
line: "{{ item.key }}={{ item.value }}"
|
|
with_items: "{{ k3s_worker_env }}"
|
|
when: ('kube_workers' in group_names)
|
|
|
|
- name: Reset SSH connection to make new environment variables available
|
|
ansible.builtin.meta: reset_connection
|
|
|
|
- name: Install K3s on worker nodes
|
|
ansible.builtin.command:
|
|
cmd: ./install-k3s.sh
|
|
become: no
|
|
when: ('kube_workers' in group_names)
|
|
|
|
- name: Cleanup install files
|
|
ansible.builtin.command:
|
|
cmd: rm install-k3s.sh token
|
|
|
|
- name: Fix permissions for config file on master node
|
|
ansible.builtin.file:
|
|
path: /etc/rancher/k3s/k3s.yaml
|
|
owner: "{{ ansible_user }}"
|
|
group: "{{ ansible_user }}"
|
|
when: ('kube_masters' in group_names)
|
|
|
|
- name: Generate config file in ~/.kube/config
|
|
ansible.builtin.shell: cat /etc/rancher/k3s/k3s.yaml > ~/.kube/config
|
|
become: no
|
|
when: ('kube_masters' in group_names)
|
|
|
|
- name: Fix permissions for config file on master node
|
|
ansible.builtin.file:
|
|
path: ~/.kube/config
|
|
mode: '0600'
|
|
become: no
|
|
when: ('kube_masters' in group_names)
|
|
|
|
- name: Replace localhost references in config file
|
|
ansible.builtin.replace:
|
|
path: ~/.kube/config
|
|
regexp: '(127\.0\.0\.1)'
|
|
replace: "{{ ansible_host }}"
|
|
become: no
|
|
when: ('kube_masters' in group_names)
|
|
|
|
- name: Get K3s service status
|
|
ansible.builtin.command:
|
|
cmd: sudo systemctl status k3s
|
|
register: status
|
|
when: ('kube_masters' in group_names)
|
|
|
|
- name: Print K3s service status
|
|
ansible.builtin.debug:
|
|
var: status.stdout_lines
|
|
when: ('kube_masters' in group_names)
|
|
|
|
- name: Pause for 10 seconds to allow cluster setup to complete
|
|
ansible.builtin.pause:
|
|
seconds: 10
|
|
|
|
- name: Get K3s cluster nodes
|
|
ansible.builtin.command:
|
|
cmd: kubectl get nodes
|
|
register: status
|
|
when: ('kube_masters' in group_names)
|
|
|
|
- name: Print K3s cluster nodes
|
|
ansible.builtin.debug:
|
|
var: status.stdout_lines
|
|
when: ('kube_masters' in group_names)
|
|
|
|
- name: Get K3s cluster status
|
|
ansible.builtin.command:
|
|
cmd: kubectl get all -A -o wide
|
|
register: status
|
|
when: ('kube_masters' in group_names)
|
|
|
|
- name: Print K3s cluster status
|
|
ansible.builtin.debug:
|
|
var: status.stdout_lines
|
|
when: ('kube_masters' in group_names)
|