118 lines
3.4 KiB
YAML
118 lines
3.4 KiB
YAML
---
|
|
- name: Check if k3s is already installed
|
|
stat:
|
|
path: /usr/local/bin/k3s
|
|
register: k3s_binary
|
|
|
|
- name: Download k3s installation script
|
|
get_url:
|
|
url: https://get.k3s.io
|
|
dest: /tmp/k3s-install.sh
|
|
mode: '0755'
|
|
|
|
# Initialize the first master node (cm4-01)
|
|
- name: Install or upgrade k3s server (Primary Master)
|
|
block:
|
|
- name: Install k3s on primary master
|
|
shell: |
|
|
INSTALL_K3S_VERSION="{{ k3s_version }}" \
|
|
INSTALL_K3S_EXEC="server --cluster-init {{ extra_server_args }}" \
|
|
sh /tmp/k3s-install.sh
|
|
register: k3s_install_result
|
|
changed_when: "'installed' in k3s_install_result.stdout or 'upgraded' in k3s_install_result.stdout"
|
|
|
|
- name: Wait for k3s to be ready
|
|
wait_for:
|
|
port: 6443
|
|
delay: 10
|
|
timeout: 300
|
|
|
|
- name: Wait for node-token file to be created
|
|
wait_for:
|
|
path: /var/lib/rancher/k3s/server/node-token
|
|
state: present
|
|
timeout: 300
|
|
|
|
- name: Read node token
|
|
slurp:
|
|
src: /var/lib/rancher/k3s/server/node-token
|
|
register: node_token
|
|
|
|
- name: Store master node token
|
|
set_fact:
|
|
k3s_node_token: "{{ node_token.content | b64decode | trim }}"
|
|
|
|
- name: Add node token to dummy host
|
|
add_host:
|
|
name: "k3s_token_holder"
|
|
token: "{{ k3s_node_token }}"
|
|
run_once: true
|
|
|
|
when: k3s_server_init | default(false) | bool
|
|
|
|
# Join additional master nodes to the cluster
|
|
- name: Install or upgrade k3s server (Additional Masters)
|
|
block:
|
|
- name: Wait for primary master to be ready
|
|
wait_for:
|
|
host: "{{ hostvars[groups['master'][0]]['ansible_host'] }}"
|
|
port: 6443
|
|
delay: 10
|
|
timeout: 300
|
|
|
|
- name: Get cluster credentials
|
|
set_fact:
|
|
k3s_url: "https://{{ hostvars[groups['master'][0]]['ansible_host'] }}:6443"
|
|
k3s_token: "{{ hostvars['k3s_token_holder']['token'] }}"
|
|
|
|
- name: Install k3s on additional master
|
|
shell: |
|
|
INSTALL_K3S_VERSION="{{ k3s_version }}" \
|
|
INSTALL_K3S_EXEC="server --server {{ k3s_url }} --token '{{ k3s_token }}' {{ extra_server_args }}" \
|
|
sh /tmp/k3s-install.sh
|
|
register: k3s_install_result
|
|
changed_when: "'installed' in k3s_install_result.stdout or 'upgraded' in k3s_install_result.stdout"
|
|
|
|
- name: Wait for additional master to be ready
|
|
wait_for:
|
|
path: /var/lib/rancher/k3s/agent/kubelet.kubeconfig
|
|
state: present
|
|
timeout: 300
|
|
|
|
when: not (k3s_server_init | default(false) | bool)
|
|
|
|
# Common tasks for all master nodes
|
|
- name: Create .kube directory for user
|
|
file:
|
|
path: "/home/{{ ansible_user }}/.kube"
|
|
state: directory
|
|
owner: "{{ ansible_user }}"
|
|
group: "{{ ansible_user }}"
|
|
mode: '0755'
|
|
|
|
- name: Copy k3s kubeconfig to user home
|
|
copy:
|
|
src: /etc/rancher/k3s/k3s.yaml
|
|
dest: "/home/{{ ansible_user }}/.kube/config"
|
|
owner: "{{ ansible_user }}"
|
|
group: "{{ ansible_user }}"
|
|
mode: '0600'
|
|
remote_src: yes
|
|
|
|
- name: Replace localhost with master IP in kubeconfig
|
|
replace:
|
|
path: "/home/{{ ansible_user }}/.kube/config"
|
|
regexp: '127.0.0.1'
|
|
replace: "{{ ansible_host }}"
|
|
|
|
- name: Fetch kubeconfig from primary master only
|
|
fetch:
|
|
src: "/home/{{ ansible_user }}/.kube/config"
|
|
dest: "{{ playbook_dir }}/kubeconfig"
|
|
flat: yes
|
|
when: k3s_server_init | default(false) | bool
|
|
|
|
- name: Display success message
|
|
debug:
|
|
msg: "K3s server installed successfully on {{ inventory_hostname }}"
|