|
|
@ -32,19 +32,64 @@ |
|
|
|
stat: |
|
|
|
path: /etc/kubernetes/manifests/kube-apiserver.manifest |
|
|
|
register: kube_apiserver_manifest |
|
|
|
when: secret_changed|default(false) or etcd_secret_changed|default(false) |
|
|
|
|
|
|
|
- name: "Pre-upgrade | Write invalid image to kube-apiserver manifest if secrets were changed" |
|
|
|
- name: "Pre-upgrade | etcd3 upgrade | see if old config exists" |
|
|
|
command: "{{ bin_dir }}/etcdctl --peers={{ etcd_access_addresses }} ls /registry/minions" |
|
|
|
environment: |
|
|
|
ETCDCTL_API: 2 |
|
|
|
register: old_data_exists |
|
|
|
delegate_to: "{{groups['kube-master'][0]}}" |
|
|
|
when: kube_apiserver_storage_backend == "etcd3" |
|
|
|
failed_when: false |
|
|
|
|
|
|
|
- name: "Pre-upgrade | etcd3 upgrade | see if data was already migrated" |
|
|
|
command: "{{ bin_dir }}/etcdctl --endpoints={{ etcd_access_addresses }} get --limit=1 --prefix=true /registry/minions" |
|
|
|
environment: |
|
|
|
ETCDCTL_API: 3 |
|
|
|
register: data_migrated |
|
|
|
delegate_to: "{{groups['etcd'][0]}}" |
|
|
|
when: kube_apiserver_storage_backend == "etcd3" |
|
|
|
failed_when: false |
|
|
|
|
|
|
|
- name: "Pre-upgrade | etcd3 upgrade | set needs_etcd_migration" |
|
|
|
set_fact: |
|
|
|
needs_etcd_migration: "{{ kube_apiserver_storage_backend == 'etcd3' and data_migrated.stdout_lines|length == 0 and old_data_exists.rc == 0 }}" |
|
|
|
|
|
|
|
- name: "Pre-upgrade | Write invalid image to kube-apiserver manifest if necessary" |
|
|
|
replace: |
|
|
|
dest: /etc/kubernetes/manifests/kube-apiserver.manifest |
|
|
|
regexp: '(\s+)image:\s+.*?$' |
|
|
|
replace: '\1image: kill.apiserver.using.fake.image.in:manifest' |
|
|
|
register: kube_apiserver_manifest_replaced |
|
|
|
when: (secret_changed|default(false) or etcd_secret_changed|default(false)) and kube_apiserver_manifest.stat.exists |
|
|
|
when: (secret_changed|default(false) or etcd_secret_changed|default(false) or needs_etcd_migration|bool) and kube_apiserver_manifest.stat.exists |
|
|
|
|
|
|
|
- name: "Pre-upgrade | Pause while waiting for kubelet to delete kube-apiserver pod" |
|
|
|
pause: |
|
|
|
seconds: 20 |
|
|
|
when: (secret_changed|default(false) or etcd_secret_changed|default(false)) and kube_apiserver_manifest.stat.exists |
|
|
|
when: kube_apiserver_manifest_replaced.changed |
|
|
|
tags: kube-apiserver |
|
|
|
|
|
|
|
- name: "Pre-upgrade | etcd3 upgrade | stop etcd" |
|
|
|
service: |
|
|
|
name: etcd |
|
|
|
state: stopped |
|
|
|
delegate_to: "{{item}}" |
|
|
|
with_items: "{{groups['etcd']}}" |
|
|
|
when: needs_etcd_migration|bool |
|
|
|
|
|
|
|
- name: "Pre-upgrade | etcd3 upgrade | migrate data" |
|
|
|
command: "{{ bin_dir }}/etcdctl migrate --data-dir=\"{{ etcd_data_dir }}\" --wal-dir=\"{{ etcd_data_dir }}/member/wal\"" |
|
|
|
environment: |
|
|
|
ETCDCTL_API: 3 |
|
|
|
delegate_to: "{{item}}" |
|
|
|
with_items: "{{groups['etcd']}}" |
|
|
|
register: etcd_migrated |
|
|
|
when: needs_etcd_migration|bool |
|
|
|
|
|
|
|
- name: "Pre-upgrade | etcd3 upgrade | start etcd" |
|
|
|
service: |
|
|
|
name: etcd |
|
|
|
state: started |
|
|
|
delegate_to: "{{item}}" |
|
|
|
with_items: "{{groups['etcd']}}" |
|
|
|
when: needs_etcd_migration|bool |