-
Notifications
You must be signed in to change notification settings - Fork 2.3k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Adds a separate playbook for Docker 1.10 upgrade that can be run standalone on a pre-existing 3.2 cluster. The upgrade will take each node out of rotation, and remove *all* containers and images on it, as this is reportedly faster and more storage efficient than performing the in place 1.10 upgrade. This process is integrated into the 3.1 to 3.2 upgrade process. Normal config playbooks now become 3.2 only, and require Docker 1.10. Users of older environments will have to use an appropriate openshift-ansible version. Config playbooks no longer are in the business of upgrading or downgrading docker.
- Loading branch information
Showing
11 changed files
with
199 additions
and
75 deletions.
There are no files selected for viewing
105 changes: 105 additions & 0 deletions
105
playbooks/byo/openshift-cluster/upgrades/docker/docker_upgrade.yml
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,105 @@ | ||
|
||
- name: Check for appropriate Docker versions for 1.9.x to 1.10.x upgrade | ||
hosts: oo_masters_to_config:oo_nodes_to_config:oo_etcd_to_config | ||
roles: | ||
- openshift_facts | ||
tasks: | ||
- name: Determine available Docker version | ||
script: ../../../../common/openshift-cluster/upgrades/files/rpm_versions.sh docker | ||
register: g_docker_version_result | ||
when: not openshift.common.is_atomic | bool | ||
|
||
- name: Check if Docker is installed | ||
command: rpm -q docker | ||
register: pkg_check | ||
failed_when: pkg_check.rc > 1 | ||
changed_when: no | ||
when: not openshift.common.is_atomic | bool | ||
|
||
- set_fact: | ||
g_docker_version: "{{ g_docker_version_result.stdout | from_yaml }}" | ||
when: not openshift.common.is_atomic | bool | ||
|
||
- name: Set fact if docker requires an upgrade | ||
set_fact: | ||
docker_upgrade: true | ||
when: not openshift.common.is_atomic | bool and pkg_check.rc == 0 and g_docker_version.curr_version | version_compare('1.10','<') | ||
|
||
- fail: | ||
msg: This playbook requires access to Docker 1.10 or later | ||
when: g_docker_version.avail_version | default(g_docker_version.curr_version, true) | version_compare('1.10','<') | ||
|
||
# If a node fails, halt everything, the admin will need to clean up and we | ||
# don't want to carry on, potentially taking out every node. The playbook can safely be re-run | ||
# and will not take any action on a node already running 1.10+. | ||
- name: Evacuate and upgrade nodes | ||
hosts: oo_masters_to_config:oo_nodes_to_config:oo_etcd_to_config | ||
serial: 1 | ||
any_errors_fatal: true | ||
tasks: | ||
- debug: var=docker_upgrade | ||
|
||
- name: Prepare for Node evacuation | ||
command: > | ||
{{ openshift.common.admin_binary }} manage-node {{ openshift.common.hostname | lower }} --schedulable=false | ||
delegate_to: "{{ groups.oo_first_master.0 }}" | ||
when: docker_upgrade is defined and docker_upgrade | bool and inventory_hostname in groups.oo_nodes_to_config | ||
|
||
# TODO: skip all node evac stuff for non-nodes (i.e. separate containerized etcd hosts) | ||
- name: Evacuate Node for Kubelet upgrade | ||
command: > | ||
{{ openshift.common.admin_binary }} manage-node {{ openshift.common.hostname | lower }} --evacuate --force | ||
delegate_to: "{{ groups.oo_first_master.0 }}" | ||
when: docker_upgrade is defined and docker_upgrade | bool and inventory_hostname in groups.oo_nodes_to_config | ||
|
||
- name: Stop containerized services | ||
service: name={{ item }} state=stopped | ||
with_items: | ||
- "{{ openshift.common.service_type }}-master" | ||
- "{{ openshift.common.service_type }}-master-api" | ||
- "{{ openshift.common.service_type }}-master-controllers" | ||
- "{{ openshift.common.service_type }}-node" | ||
- etcd | ||
- openvswitch | ||
failed_when: false | ||
when: docker_upgrade is defined and docker_upgrade | bool and openshift.common.is_containerized | bool | ||
|
||
- name: Remove all containers and images | ||
script: files/nuke_images.sh docker | ||
register: nuke_images_result | ||
when: docker_upgrade is defined and docker_upgrade | bool | ||
|
||
- name: Upgrade Docker | ||
command: "{{ ansible_pkg_mgr}} update -y docker" | ||
register: docker_upgrade_result | ||
when: docker_upgrade is defined and docker_upgrade | bool | ||
|
||
- name: Restart containerized services | ||
service: name={{ item }} state=started | ||
with_items: | ||
- etcd | ||
- openvswitch | ||
- "{{ openshift.common.service_type }}-master" | ||
- "{{ openshift.common.service_type }}-master-api" | ||
- "{{ openshift.common.service_type }}-master-controllers" | ||
- "{{ openshift.common.service_type }}-node" | ||
failed_when: false | ||
when: docker_upgrade is defined and docker_upgrade | bool and openshift.common.is_containerized | bool | ||
|
||
- name: Wait for master API to come back online | ||
become: no | ||
local_action: | ||
module: wait_for | ||
host="{{ inventory_hostname }}" | ||
state=started | ||
delay=10 | ||
port="{{ openshift.master.api_port }}" | ||
when: docker_upgrade is defined and docker_upgrade | bool and inventory_hostname in groups.oo_masters_to_config | ||
|
||
- name: Set node schedulability | ||
command: > | ||
{{ openshift.common.admin_binary }} manage-node {{ openshift.common.hostname | lower }} --schedulable=true | ||
delegate_to: "{{ groups.oo_first_master.0 }}" | ||
when: openshift.node.schedulable | bool | ||
when: docker_upgrade is defined and docker_upgrade | bool and inventory_hostname in groups.oo_nodes_to_config and openshift.node.schedulable | bool | ||
|
23 changes: 23 additions & 0 deletions
23
playbooks/byo/openshift-cluster/upgrades/docker/files/nuke_images.sh
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,23 @@ | ||
#!/bin/bash | ||
|
||
# Stop any running containers | ||
running_container_count=`docker ps -q | wc -l` | ||
if test $running_container_count -gt 0 | ||
then | ||
docker stop $(docker ps -q) | ||
fi | ||
|
||
# Delete all containers | ||
container_count=`docker ps -a -q | wc -l` | ||
if test $container_count -gt 0 | ||
then | ||
docker rm -f -v $(docker ps -a -q) | ||
fi | ||
|
||
# Delete all images (forcefully) | ||
image_count=`docker images -q | wc -l` | ||
if test $image_count -gt 0 | ||
then | ||
# Taken from: https://gist.github.com/brianclements/f72b2de8e307c7b56689#gistcomment-1443144 | ||
docker rmi $(docker images | grep "$2/\|/$2 \| $2 \|$2 \|$2-\|$2_" | awk '{print $1 ":" $2}') 2>/dev/null || echo "No images matching \"$2\" left to purge." | ||
fi |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
../../../../../roles |
29 changes: 29 additions & 0 deletions
29
playbooks/byo/openshift-cluster/upgrades/docker/upgrade.yml
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,29 @@ | ||
# Playbook to upgrade Docker to the max allowable version for an OpenShift cluster. | ||
# | ||
# Currently only supports upgrading 1.9.x to >= 1.10.x. | ||
- hosts: localhost | ||
connection: local | ||
become: no | ||
gather_facts: no | ||
tasks: | ||
- include_vars: ../../cluster_hosts.yml | ||
- add_host: | ||
name: "{{ item }}" | ||
groups: l_oo_all_hosts | ||
with_items: g_all_hosts | default([]) | ||
changed_when: false | ||
|
||
- hosts: l_oo_all_hosts | ||
gather_facts: no | ||
tasks: | ||
- include_vars: ../../cluster_hosts.yml | ||
|
||
- include: ../../../../common/openshift-cluster/evaluate_groups.yml | ||
vars: | ||
# Do not allow adding hosts during upgrade. | ||
g_new_master_hosts: [] | ||
g_new_node_hosts: [] | ||
openshift_cluster_id: "{{ cluster_id | default('default') }}" | ||
openshift_deployment_type: "{{ deployment_type }}" | ||
|
||
- include: docker_upgrade.yml |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
15 changes: 0 additions & 15 deletions
15
playbooks/common/openshift-cluster/upgrades/v3_1_to_v3_2/docker_upgrade.yml
This file was deleted.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters