# WARNNING: this playbook will clean the kube_master node {{ NODE_TO_DEL }} - hosts: localhost tasks: - fail: msg="you CAN NOT delete the last member of kube_master!" when: "groups['kube_master']|length < 2 and NODE_TO_DEL in groups['kube_master']" - name: 注册变量 K8S 主版本 shell: echo {{ K8S_VER }}|awk -F. '{print $1"."$2}' register: K8S_VER_MAIN - name: 设置kubectl drain 参数 set_fact: DRAIN_OPT="--delete-emptydir-data --ignore-daemonsets --force" when: "K8S_VER_MAIN.stdout|float > 1.19" - name: 设置kubectl drain 参数 set_fact: DRAIN_OPT="--delete-local-data --ignore-daemonsets --force" when: "K8S_VER_MAIN.stdout|float < 1.20" - name: debug info debug: var="DRAIN_OPT" - name: get the node name to delete shell: "{{ base_dir }}/bin/kubectl get node -owide|grep ' {{ NODE_TO_DEL }} '|awk '{print $1}'" register: NODE_NAME - debug: var="NODE_NAME.stdout" - name: run kubectl drain @{{ NODE_NAME.stdout }} shell: "{{ base_dir }}/bin/kubectl drain {{ NODE_NAME.stdout }} {{ DRAIN_OPT }}" #ignore_errors: true - name: clean node {{ NODE_TO_DEL }} shell: "cd {{ base_dir }} && ansible-playbook -i clusters/{{ CLUSTER }}/hosts \ roles/clean/clean_node.yml \ -e NODE_TO_CLEAN={{ NODE_TO_DEL }} \ -e DEL_MASTER=yes \ -e DEL_NODE=yes \ -e DEL_LB=yes >> /tmp/ansible-`date +'%Y%m%d%H%M%S'`.log 2>&1 \ || echo 'data not cleaned on {{ NODE_TO_DEL }}'" register: CLEAN_STATUS - debug: var="CLEAN_STATUS" - name: run kubectl delete node {{ NODE_NAME.stdout }} shell: "{{ base_dir }}/bin/kubectl delete node {{ NODE_NAME.stdout }}" ignore_errors: true # lineinfile is inadequate to delete lines between some specific line range - name: remove the master's entry in hosts shell: 'sed -i "/^\[kube_master/,/^\[harbor/ {/^{{ NODE_TO_DEL }}$/d}" {{ base_dir }}/clusters/{{ CLUSTER }}/hosts' # lineinfile is inadequate to delete lines between some specific line range - name: remove the master's entry in hosts shell: 'sed -i "/^\[kube_master/,/^\[harbor/ {/^{{ NODE_TO_DEL }} /d}" {{ base_dir }}/clusters/{{ CLUSTER }}/hosts'