Browse Source
Add graceful upgrade process
Add graceful upgrade process
Based on #718 introduced by rsmitty. Includes all roles and all options to support deployment of new hosts in case they were added to inventory. Main difference here is that master role is evaluated first so that master components get upgraded first. Fixes #694pull/1029/head
Matthew Mosesohn
7 years ago
5 changed files with 96 additions and 22 deletions
Split View
Diff Options
-
15.gitlab-ci.yml
-
16docs/upgrades.md
-
2roles/upgrade/post-upgrade/tasks/main.yml
-
4roles/upgrade/pre-upgrade/tasks/main.yml
-
81upgrade-cluster.yml
@ -1,5 +1,5 @@ |
|||
--- |
|||
|
|||
- name: Uncordon node |
|||
command: kubectl uncordon {{ ansible_hostname }} |
|||
command: "{{ bin_dir }}/kubectl uncordon {{ ansible_hostname }}" |
|||
delegate_to: "{{ groups['kube-master'][0] }}" |
@ -1,11 +1,11 @@ |
|||
--- |
|||
|
|||
- name: Cordon node |
|||
command: kubectl cordon {{ ansible_hostname }} |
|||
command: "{{ bin_dir }}/kubectl cordon {{ ansible_hostname }}" |
|||
delegate_to: "{{ groups['kube-master'][0] }}" |
|||
|
|||
- name: Drain node |
|||
command: kubectl drain --force --ignore-daemonsets --grace-period 30 --delete-local-data {{ ansible_hostname }} |
|||
command: "{{ bin_dir }}/kubectl drain --force --ignore-daemonsets --grace-period 30 --delete-local-data {{ ansible_hostname }}" |
|||
delegate_to: "{{ groups['kube-master'][0] }}" |
|||
|
|||
- name: Sleep for grace period for draining |
|||
|
@ -1,33 +1,92 @@ |
|||
--- |
|||
- hosts: all |
|||
- hosts: localhost |
|||
gather_facts: False |
|||
roles: |
|||
- bastion-ssh-config |
|||
tags: [localhost, bastion] |
|||
|
|||
- hosts: k8s-cluster:etcd:calico-rr |
|||
any_errors_fatal: true |
|||
gather_facts: false |
|||
vars: |
|||
# Need to disable pipelining for bootstrap-os as some systems have requiretty in sudoers set, which makes pipelining |
|||
# fail. bootstrap-os fixes this on these systems, so in later plays it can be enabled. |
|||
ansible_ssh_pipelining: false |
|||
roles: |
|||
- bootstrap-os |
|||
tags: |
|||
- bootstrap-os |
|||
|
|||
- hosts: k8s-cluster:etcd:calico-rr |
|||
any_errors_fatal: true |
|||
vars: |
|||
ansible_ssh_pipelining: true |
|||
gather_facts: true |
|||
|
|||
- hosts: all:!network-storage |
|||
- hosts: k8s-cluster:etcd:calico-rr |
|||
any_errors_fatal: true |
|||
roles: |
|||
- { role: kernel-upgrade, tags: kernel-upgrade, when: kernel_upgrade is defined and kernel_upgrade } |
|||
- { role: kubernetes/preinstall, tags: preinstall } |
|||
- { role: docker, tags: docker } |
|||
- role: rkt |
|||
tags: rkt |
|||
when: "'rkt' in [etcd_deployment_type, kubelet_deployment_type, vault_deployment_type]" |
|||
|
|||
- hosts: etcd:k8s-cluster:vault |
|||
any_errors_fatal: true |
|||
roles: |
|||
- { role: vault, tags: vault, vault_bootstrap: true, when: "cert_management == 'vault'" } |
|||
|
|||
- hosts: etcd:!k8s-cluster |
|||
any_errors_fatal: true |
|||
serial: 1 |
|||
roles: |
|||
- { role: etcd, tags: etcd } |
|||
|
|||
- hosts: kube-node |
|||
- hosts: k8s-cluster |
|||
any_errors_fatal: true |
|||
serial: 1 |
|||
roles: |
|||
- { role: etcd, tags: etcd } |
|||
- { role: upgrade/pre-upgrade, tags: upgrade/pre-upgrade } |
|||
- { role: kubernetes/node, tags: node } |
|||
- { role: network_plugin, tags: network } |
|||
- { role: upgrade/post-upgrade, tags: upgrade/post-upgrade } |
|||
|
|||
- hosts: etcd:k8s-cluster:vault |
|||
any_errors_fatal: true |
|||
roles: |
|||
- { role: vault, tags: vault, when: "cert_management == 'vault'"} |
|||
|
|||
#Handle upgrades to master components first to maintain backwards compat. |
|||
- hosts: kube-master |
|||
any_errors_fatal: true |
|||
serial: 1 |
|||
roles: |
|||
- { role: etcd, tags: etcd } |
|||
- { role: upgrade/pre-upgrade, tags: pre-upgrade } |
|||
- { role: kubernetes/node, tags: node } |
|||
- { role: kubernetes/master, tags: master } |
|||
- { role: kubernetes/master, tags: master } |
|||
- { role: network_plugin, tags: network } |
|||
- { role: upgrade/post-upgrade, tags: post-upgrade } |
|||
|
|||
#Finally handle worker upgrades, based on given batch size |
|||
- hosts: kube-node:!kube-master |
|||
any_errors_fatal: true |
|||
serial: "{{ serial | default('20%') }}" |
|||
roles: |
|||
- { role: upgrade/pre-upgrade, tags: pre-upgrade } |
|||
- { role: kubernetes/node, tags: node } |
|||
- { role: network_plugin, tags: network } |
|||
- { role: upgrade/post-upgrade, tags: post-upgrade } |
|||
- { role: kubernetes-apps/network_plugin, tags: network } |
|||
|
|||
- hosts: calico-rr |
|||
any_errors_fatal: true |
|||
roles: |
|||
- { role: network_plugin/calico/rr, tags: network } |
|||
|
|||
- hosts: k8s-cluster |
|||
any_errors_fatal: true |
|||
roles: |
|||
- { role: dnsmasq, when: "dns_mode == 'dnsmasq_kubedns'", tags: dnsmasq } |
|||
- { role: kubernetes/preinstall, when: "dns_mode != 'none' and resolvconf_mode == 'host_resolvconf'", tags: resolvconf } |
|||
|
|||
- hosts: kube-master[0] |
|||
any_errors_fatal: true |
|||
roles: |
|||
- { role: kubernetes-apps, tags: apps } |
Write
Preview
Loading…
Cancel
Save