2016-12-09 18:44:52 +00:00
|
|
|
---
|
2021-01-18 07:53:43 +00:00
|
|
|
# Wait for upgrade
|
|
|
|
- name: Confirm node upgrade
|
|
|
|
pause:
|
|
|
|
echo: yes
|
|
|
|
prompt: "Ready to upgrade node ?"
|
|
|
|
when:
|
|
|
|
- upgrade_node_confirm
|
|
|
|
|
|
|
|
- name: Wait before upgrade node
|
|
|
|
pause:
|
|
|
|
seconds: "{{ upgrade_node_pause_seconds }}"
|
|
|
|
when:
|
|
|
|
- not upgrade_node_confirm
|
|
|
|
- upgrade_node_pause_seconds != 0
|
|
|
|
|
2018-02-09 15:39:21 +00:00
|
|
|
# Node Ready: type = ready, status = True
|
|
|
|
# Node NotReady: type = ready, status = Unknown
|
2017-03-22 13:19:27 +00:00
|
|
|
- name: See if node is in ready state
|
2018-02-09 15:39:21 +00:00
|
|
|
shell: >-
|
2020-07-13 14:18:40 +00:00
|
|
|
{{ bin_dir }}/kubectl get node {{ kube_override_hostname|default(inventory_hostname) }}
|
2020-06-29 19:39:59 +00:00
|
|
|
-o jsonpath='{ range .status.conditions[?(@.type == "Ready")].status }{ @ }{ end }'
|
2018-02-09 15:39:21 +00:00
|
|
|
register: kubectl_node_ready
|
2021-03-24 00:26:05 +00:00
|
|
|
delegate_to: "{{ groups['kube_control_plane'][0] }}"
|
2018-02-09 15:39:21 +00:00
|
|
|
failed_when: false
|
2018-11-08 00:31:29 +00:00
|
|
|
changed_when: false
|
2018-02-09 15:39:21 +00:00
|
|
|
|
|
|
|
# SchedulingDisabled: unschedulable = true
|
|
|
|
# else unschedulable key doesn't exist
|
|
|
|
- name: See if node is schedulable
|
|
|
|
shell: >-
|
2020-07-13 14:18:40 +00:00
|
|
|
{{ bin_dir }}/kubectl get node {{ kube_override_hostname|default(inventory_hostname) }}
|
2020-06-29 19:39:59 +00:00
|
|
|
-o jsonpath='{ .spec.unschedulable }'
|
2018-02-09 15:39:21 +00:00
|
|
|
register: kubectl_node_schedulable
|
2021-03-24 00:26:05 +00:00
|
|
|
delegate_to: "{{ groups['kube_control_plane'][0] }}"
|
2017-03-24 15:29:28 +00:00
|
|
|
failed_when: false
|
2018-11-08 00:31:29 +00:00
|
|
|
changed_when: false
|
2017-03-22 13:19:27 +00:00
|
|
|
|
2019-05-16 07:27:43 +00:00
|
|
|
- name: Set if node needs cordoning
|
|
|
|
set_fact:
|
2017-03-22 13:19:27 +00:00
|
|
|
needs_cordoning: >-
|
2021-08-30 17:56:09 +00:00
|
|
|
{% if (kubectl_node_ready.stdout == "True" and not kubectl_node_schedulable.stdout) or upgrade_node_always_cordon -%}
|
2017-03-22 13:19:27 +00:00
|
|
|
true
|
2017-06-21 23:56:31 +00:00
|
|
|
{%- else -%}
|
2017-03-22 13:19:27 +00:00
|
|
|
false
|
2017-06-21 23:56:31 +00:00
|
|
|
{%- endif %}
|
2016-12-09 18:44:52 +00:00
|
|
|
|
2020-08-20 11:25:36 +00:00
|
|
|
- name: Node draining
|
|
|
|
block:
|
|
|
|
- name: Cordon node
|
|
|
|
command: "{{ bin_dir }}/kubectl cordon {{ kube_override_hostname|default(inventory_hostname) }}"
|
2021-03-24 00:26:05 +00:00
|
|
|
delegate_to: "{{ groups['kube_control_plane'][0] }}"
|
2016-12-09 18:44:52 +00:00
|
|
|
|
2020-08-20 11:25:36 +00:00
|
|
|
- name: Check kubectl version
|
|
|
|
command: "{{ bin_dir }}/kubectl version --client --short"
|
|
|
|
register: kubectl_version
|
2021-03-24 00:26:05 +00:00
|
|
|
delegate_to: "{{ groups['kube_control_plane'][0] }}"
|
2020-08-20 11:25:36 +00:00
|
|
|
run_once: yes
|
|
|
|
changed_when: false
|
|
|
|
when:
|
|
|
|
- drain_nodes
|
|
|
|
- drain_pod_selector
|
2018-09-11 11:57:19 +00:00
|
|
|
|
2020-08-20 11:25:36 +00:00
|
|
|
- name: Ensure minimum version for drain label selector if necessary
|
|
|
|
assert:
|
|
|
|
that: "kubectl_version.stdout.split(' ')[-1] is version('v1.10.0', '>=')"
|
|
|
|
when:
|
|
|
|
- drain_nodes
|
|
|
|
- drain_pod_selector
|
2018-09-11 11:57:19 +00:00
|
|
|
|
2020-08-20 11:25:36 +00:00
|
|
|
- name: Drain node
|
|
|
|
command: >-
|
|
|
|
{{ bin_dir }}/kubectl drain
|
|
|
|
--force
|
|
|
|
--ignore-daemonsets
|
|
|
|
--grace-period {{ drain_grace_period }}
|
|
|
|
--timeout {{ drain_timeout }}
|
2021-10-14 09:25:19 +00:00
|
|
|
--delete-emptydir-data {{ kube_override_hostname|default(inventory_hostname) }}
|
2020-08-20 11:25:36 +00:00
|
|
|
{% if drain_pod_selector %}--pod-selector '{{ drain_pod_selector }}'{% endif %}
|
2021-01-26 19:10:31 +00:00
|
|
|
when: drain_nodes
|
|
|
|
register: result
|
|
|
|
until: result.rc == 0
|
|
|
|
retries: "{{ drain_retries }}"
|
|
|
|
delay: "{{ drain_retry_delay_seconds }}"
|
2020-08-20 11:25:36 +00:00
|
|
|
rescue:
|
|
|
|
- name: Set node back to schedulable
|
2021-09-23 17:19:13 +00:00
|
|
|
command: "{{ bin_dir }}/kubectl --kubeconfig {{ kube_config_dir }}/admin.conf uncordon {{ inventory_hostname }}"
|
2021-01-26 19:10:31 +00:00
|
|
|
when: upgrade_node_uncordon_after_drain_failure
|
2020-08-20 11:25:36 +00:00
|
|
|
- name: Fail after rescue
|
|
|
|
fail:
|
|
|
|
msg: "Failed to drain node {{ inventory_hostname }}"
|
2021-01-26 19:10:31 +00:00
|
|
|
when: upgrade_node_fail_if_drain_fails
|
2021-03-24 00:26:05 +00:00
|
|
|
delegate_to: "{{ groups['kube_control_plane'][0] }}"
|
2018-09-11 11:57:19 +00:00
|
|
|
when:
|
|
|
|
- needs_cordoning
|