From 6786d45f3cee03639e0c3e835d4eb33bdb5fd44f Mon Sep 17 00:00:00 2001 From: gjmzj Date: Tue, 26 Oct 2021 19:24:25 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20kubectl=20drain=20=E5=8F=82=E6=95=B0?= =?UTF-8?q?=E7=89=88=E6=9C=AC=E5=B7=AE=E5=BC=82=E5=AF=BC=E8=87=B4=E5=A4=B1?= =?UTF-8?q?=E8=B4=A5=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- example/config.yml | 2 ++ ezctl | 6 ++++-- playbooks/32.delnode.yml | 17 ++++++++++++++++- playbooks/33.delmaster.yml | 17 ++++++++++++++++- roles/cluster-addon/files/traefik-9.12.3.tgz | Bin 16263 -> 0 bytes 5 files changed, 38 insertions(+), 4 deletions(-) delete mode 100644 roles/cluster-addon/files/traefik-9.12.3.tgz diff --git a/example/config.yml b/example/config.yml index 5dfa4d8..97bbe9b 100644 --- a/example/config.yml +++ b/example/config.yml @@ -29,6 +29,8 @@ CERT_EXPIRY: "438000h" CLUSTER_NAME: "cluster1" CONTEXT_NAME: "context-{{ CLUSTER_NAME }}" +# k8s version +K8S_VER: "__k8s_ver__" ############################ # role:etcd diff --git a/ezctl b/ezctl index 5cbd5f9..e22c305 100755 --- a/ezctl +++ b/ezctl @@ -140,7 +140,8 @@ function new() { sed -i "s/_cluster_name_/$1/g" "clusters/$1/hosts" cp example/config.yml "clusters/$1/config.yml" - logger debug "set version of common plugins" + logger debug "set versions" + k8sVer=$(grep 'K8S_BIN_VER=v' ezdown|cut -d'v' -f2) calicoVer=$(grep 'calicoVer=' ezdown|cut -d'=' -f2) ciliumVer=$(grep 'ciliumVer=' ezdown|cut -d'=' -f2) flannelVer=$(grep 'flannelVer=' ezdown|cut -d'=' -f2) @@ -160,7 +161,8 @@ function new() { grep registry-mirrors /etc/docker/daemon.json > /dev/null 2>&1 || { logger debug "disable registry mirrors"; registryMirror=false; } - sed -i -e "s/__flannel__/$flannelVer/g" \ + sed -i -e "s/__k8s_ver__/$k8sVer/g" \ + -e "s/__flannel__/$flannelVer/g" \ -e "s/__calico__/$calicoVer/g" \ -e "s/__cilium__/$ciliumVer/g" \ -e "s/__kube_ovn__/$kubeOvnVer/g" \ diff --git a/playbooks/32.delnode.yml b/playbooks/32.delnode.yml index 855cdcf..fe0701c 100644 --- a/playbooks/32.delnode.yml +++ b/playbooks/32.delnode.yml @@ -5,8 +5,23 @@ - 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: run kubectl drain @{{ NODE_TO_DEL }} - shell: "{{ base_dir }}/bin/kubectl drain {{ NODE_TO_DEL }} --ignore-daemonsets --delete-emptydir-data --force" + shell: "{{ base_dir }}/bin/kubectl drain {{ NODE_TO_DEL }} {{ DRAIN_OPT }}" #ignore_errors: true - name: clean node {{ NODE_TO_DEL }} diff --git a/playbooks/33.delmaster.yml b/playbooks/33.delmaster.yml index 17d25f7..9016288 100644 --- a/playbooks/33.delmaster.yml +++ b/playbooks/33.delmaster.yml @@ -5,8 +5,23 @@ - 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: run kubectl drain @{{ NODE_TO_DEL }} - shell: "{{ base_dir }}/bin/kubectl drain {{ NODE_TO_DEL }} --ignore-daemonsets --delete-emptydir-data --force" + shell: "{{ base_dir }}/bin/kubectl drain {{ NODE_TO_DEL }} {{ DRAIN_OPT }}" #ignore_errors: true - name: clean node {{ NODE_TO_DEL }} diff --git a/roles/cluster-addon/files/traefik-9.12.3.tgz b/roles/cluster-addon/files/traefik-9.12.3.tgz deleted file mode 100644 index de1859d61b98fe0670e3904c28786cdae718167b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16263 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