143 lines
4.0 KiB
YAML
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
|
|
|