Files
semaphore/kube.yml

143 lines
4.0 KiB
YAML

---
- name: Main playbook for Kubernetes cluster
hosts: all
become: true
# #
# # @author Stéphane Gratias (2023).
# #
# Use hostname node and control_plane to join the kubernetes cluster
pre_tasks:
- name: >-
Show target servers -> Hostname : OS - IP
debug:
msg: "{{ ansible_hostname }} : {{ ansible_distribution }} {{ ansible_distribution_version }} - {{ ansible_default_ipv4.address }}"
tags:
- always
- test
- name: Add the overlay and br_netfilter modules and make sure it is loaded after reboots
community.general.modprobe:
name: "{{ item }}"
state: present
persistent: present
loop:
- overlay
- br_netfilter
tags:
- kubernetes
- name: Set ipv4 forwarding on kubernetes node only
ansible.posix.sysctl:
name: net.ipv4.ip_forward
value: '1'
sysctl_set: true
when: kubernetes_role == 'node'
tags:
- kubernetes
roles:
- { role: geerlingguy.containerd, tags: [kubernetes, containerd] }
- { role: geerlingguy.kubernetes, tags: kubernetes }
tasks:
# labeled worker
- name: Labeled workers from master
command: "kubectl label node {{ item }} node-role.kubernetes.io/worker={{ item }}"
loop: "{{ groups['workers'] }}"
when:
- kubernetes_role == 'control_plane'
- groups['workers'] is defined
tags:
- kubernetes
- alias
- name: Add kubectl alias and completion
ansible.builtin.lineinfile:
path: "{{ item.path }}"
regexp: "{{ item.regexp }}"
state: "{{ item.state|default('present') }}"
line: "{{ item.line|default(omit) }}"
loop: "{{ kubernetes_alias_bashrc }}"
tags:
- kubernetes
- alias
- name: create kubernetes app base dir
file:
path: "{{ item }}"
state: directory
mode: 0755
owner: root
group: root
with_items:
- "{{ kubernetes_tree_base_dir | last }}"
- "{{ kubernetes_tree_base_dir | last }}/{{ kubernetes_service }}"
tags:
- test
#kubectl label node <node name> node-role.kubernetes.io/<role name>=<key
# - name: Allow pods on control plane (if configured).
# command: "kubectl taint nodes --all node-role.kubernetes.io/control-plane-"
# when:
# - kubernetes_allow_pods_on_control_plane | bool
# - not kubernetes_init_stat.stat.exists
# need pip kubernetes to use k8s module
- name: Create all k8s namespace
kubernetes.core.k8s:
name: "{{ item.namespace }}"
api_version: v1
kind: Namespace
state: present
loop: "{{ kubernetes_namespaces }}"
when: kubernetes_role == 'control_plane'
tags:
- test
# Download and apply manifest
- name: Download all manifests to the cluster.
ansible.builtin.get_url:
url: "{{ item.url| default(omit) }}"
dest: "{{ kubernetes_tree_base_dir | last }}/{{ kubernetes_service }}/{{ item.namespace }}_{{ item.file }}.yaml"
mode: '0664'
loop: "{{ kubernetes_namespaces }}"
when:
- kubernetes_role == 'control_plane'
tags:
- test
- name: Apply all manifests to the cluster.
kubernetes.core.k8s:
state: present
namespace: "{{ item.namespace }}"
src: "{{ kubernetes_tree_base_dir | last }}/{{ kubernetes_service }}/{{ item.namespace }}_{{ item.file }}.yaml"
loop: "{{ kubernetes_namespaces }}"
when:
- kubernetes_role == 'control_plane'
tags:
- test
# - name: Remove file (delete file)
# ansible.builtin.file:
# path: /etc/foo.txt
# state: absent
- name: Create all k8s objects needed
kubernetes.core.k8s:
namespace: "{{ item.namespace }}"
kind: "{{ item.kind }}"
definition: "{{ item.definition }}"
state: present
loop: "{{ kubernetes_traefik_objects }}"
tags:
- test
- last