feat: cluster rollout update playbook & use new cmd for taskfiles (#829)
This commit is contained in:
1 parent
fd1590efcc
commit
07eb228b34
4 files changed
+110
-37
No files matched your search
@@ -1,5 +1,5 @@
|
||||
---
|
||||
- name: Cluster Upgrade
|
||||
- name: Cluster kube-vip
|
||||
hosts: master
|
||||
become: true
|
||||
gather_facts: true
|
||||
@@ -0,0 +1,76 @@
|
||||
---
|
||||
# https://github.com/kevincoakley/ansible-role-k8s-rolling-update
|
||||
- name: Cluster rollout update
|
||||
hosts: all
|
||||
become: true
|
||||
gather_facts: true
|
||||
any_errors_fatal: true
|
||||
serial: 1
|
||||
pre_tasks:
|
||||
- name: Pausing for 5 seconds...
|
||||
ansible.builtin.pause:
|
||||
seconds: 5
|
||||
tasks:
|
||||
- name: Get the node's details
|
||||
ansible.builtin.command: |
|
||||
kubectl get node {{ inventory_hostname }} -o json
|
||||
register: kubectl_get_node
|
||||
delegate_to: "{{ groups['master'][0] }}"
|
||||
failed_when: false
|
||||
changed_when: false
|
||||
|
||||
- name: Update node
|
||||
when:
|
||||
# When status.conditions[x].type == Ready then check stats.conditions[x].status for True|False
|
||||
- kubectl_get_node['stdout'] | from_json | json_query("status.conditions[?type == 'Ready'].status")
|
||||
# If spec.unschedulable is defined then the node is cordoned
|
||||
- not (kubectl_get_node['stdout'] | from_json).spec.unschedulable is defined
|
||||
block:
|
||||
- name: Cordon node
|
||||
ansible.builtin.command: |
|
||||
kubectl cordon {{ inventory_hostname }}
|
||||
delegate_to: "{{ groups['master'][0] }}"
|
||||
changed_when: false
|
||||
|
||||
- name: Wait for node to cordon
|
||||
ansible.builtin.command: |
|
||||
kubectl get node {{ inventory_hostname }} -o json
|
||||
register: wait_for_cordon
|
||||
retries: 10
|
||||
delay: 10
|
||||
delegate_to: "{{ groups['master'][0] }}"
|
||||
changed_when: false
|
||||
until: (wait_for_cordon['stdout'] | from_json).spec.unschedulable
|
||||
|
||||
- name: Cordon & drain node
|
||||
ansible.builtin.command: |
|
||||
kubectl drain --ignore-daemonsets --delete-emptydir-data --force {{ inventory_hostname }}
|
||||
delegate_to: "{{ groups['master'][0] }}"
|
||||
changed_when: false
|
||||
|
||||
- name: Update all packages
|
||||
ansible.builtin.apt:
|
||||
upgrade: dist
|
||||
update_cache: true
|
||||
|
||||
- name: Reboot
|
||||
ansible.builtin.reboot:
|
||||
msg: Rebooting node
|
||||
post_reboot_delay: 60
|
||||
reboot_timeout: 3600
|
||||
|
||||
- name: Uncordon node
|
||||
ansible.builtin.command: |
|
||||
kubectl uncordon {{ inventory_hostname }}
|
||||
delegate_to: "{{ groups['master'][0] }}"
|
||||
changed_when: false
|
||||
|
||||
- name: Wait for node to uncordon
|
||||
ansible.builtin.command: |
|
||||
kubectl get node {{ inventory_hostname }} -o json
|
||||
register: wait_for_uncordon
|
||||
retries: 10
|
||||
delay: 10
|
||||
delegate_to: "{{ groups['master'][0] }}"
|
||||
changed_when: false
|
||||
until: not (kubectl_get_node['stdout'] | from_json).spec.unschedulable is defined
|
||||
Reference in new issue
Block a user