8becd905b8
Uses correct flag for draining with a pod selector Verifies minimum kubectl version for compatibility
65 lines
1.9 KiB
YAML
65 lines
1.9 KiB
YAML
---
|
|
# Node Ready: type = ready, status = True
|
|
# Node NotReady: type = ready, status = Unknown
|
|
- name: See if node is in ready state
|
|
shell: >-
|
|
{{ bin_dir }}/kubectl get node {{ inventory_hostname }}
|
|
-o jsonpath='{ range .status.conditions[?(@.type == "Ready")].status }{ @ }{ end }'
|
|
register: kubectl_node_ready
|
|
delegate_to: "{{ groups['kube-master'][0] }}"
|
|
failed_when: false
|
|
|
|
# SchedulingDisabled: unschedulable = true
|
|
# else unschedulable key doesn't exist
|
|
- name: See if node is schedulable
|
|
shell: >-
|
|
{{ bin_dir }}/kubectl get node {{ inventory_hostname }}
|
|
-o jsonpath='{ .spec.unschedulable }'
|
|
register: kubectl_node_schedulable
|
|
delegate_to: "{{ groups['kube-master'][0] }}"
|
|
failed_when: false
|
|
|
|
- set_fact:
|
|
needs_cordoning: >-
|
|
{% if kubectl_node_ready.stdout == "True" and kubectl_node_schedulable.stdout == "" -%}
|
|
true
|
|
{%- else -%}
|
|
false
|
|
{%- endif %}
|
|
|
|
- name: Cordon node
|
|
command: "{{ bin_dir }}/kubectl cordon {{ inventory_hostname }}"
|
|
delegate_to: "{{ groups['kube-master'][0] }}"
|
|
when: needs_cordoning
|
|
|
|
- name: Check kubectl version
|
|
command: kubectl version --client --short
|
|
register: kubectl_version
|
|
delegate_to: "{{ groups['kube-master'][0] }}"
|
|
run_once: yes
|
|
when:
|
|
- drain_nodes
|
|
- needs_cordoning
|
|
- 'drain_pod_selector != ""'
|
|
|
|
- name: Ensure minimum version for drain label selector if necessary
|
|
assert:
|
|
that: "kubectl_version.stdout.split(' ')[-1] | version_compare('v1.10.0', '>=')"
|
|
when:
|
|
- drain_nodes
|
|
- needs_cordoning
|
|
- 'drain_pod_selector != ""'
|
|
|
|
- name: Drain node
|
|
command: >-
|
|
{{ bin_dir }}/kubectl drain
|
|
--force
|
|
--ignore-daemonsets
|
|
--grace-period {{ drain_grace_period }}
|
|
--timeout {{ drain_timeout }}
|
|
--delete-local-data {{ inventory_hostname }}
|
|
{% if drain_pod_selector != "" %}--pod-selector '{{ drain_pod_selector }}'{% endif %}
|
|
delegate_to: "{{ groups['kube-master'][0] }}"
|
|
when:
|
|
- drain_nodes
|
|
- needs_cordoning
|