diff --git a/docs/op/upgrade.md b/docs/op/upgrade.md index e46b4ac..8216d06 100644 --- a/docs/op/upgrade.md +++ b/docs/op/upgrade.md @@ -7,9 +7,23 @@ ### 备份etcd数据 +- 升级前对 etcd数据做镜像备份 +``` bash +# snapshot备份 +$ ETCDCTL_API=3 etcdctl snapshot save backup.db +# 查看备份 +$ ETCDCTL_API=3 etcdctl --write-out=table snapshot status backup.db +``` +- 从备份恢复可以参考[官方说明](https://github.com/coreos/etcd/blob/master/Documentation/op-guide/recovery.md) + ### 升级步骤 -+ 1.下载最新项目代码 `git pull origin master` -+ 2.下载新的二进制解压并覆盖 `/etc/ansible/bin/` 目录下文件 -+ 3.更新集群 `ansible-playbook -t upgrade_k8s 22.upgrade.yml` -注:上述步骤升级过程中不会中断集群已有业务,如果同时需要升级docker版本,可以在每个node节点手工重启docker服务(docker服务重启会中断业务,可以结合`kubectl cordon`和`kubectl drain`命令实现零中断升级) +- 1.下载最新项目代码 `git pull origin master` +- 2.下载新的二进制解压并覆盖 `/etc/ansible/bin/` 目录下文件 +- 3a.如果可以接受短暂业务中断,执行 `ansible-playbook -t upgrade_k8s,restart_dockerd 22.upgrade.yml` 即可 +- 3b.如果要求零中断升级集群 + - 首先执行 `ansible-playbook -t upgrade_k8s 22.upgrade.yml` (该步骤不会影响k8s上的业务应用) + - 然后逐个升级重启每个node节点的dockerd服务 + - 待重启节点,先应用`kubectl cordon`和`kubectl drain`命令 + - 待重启节点执行 `systemctl restart docker` + - 恢复待重启节点可调度 `kubectl uncordon` diff --git a/roles/docker/tasks/main.yml b/roles/docker/tasks/main.yml index 5d271ec..c231b41 100644 --- a/roles/docker/tasks/main.yml +++ b/roles/docker/tasks/main.yml @@ -26,6 +26,7 @@ - name: 创建docker的systemd unit文件 template: src=docker.service.j2 dest=/etc/systemd/system/docker.service + tags: upgrade_k8s - name: 开机启用docker 服务 shell: systemctl enable docker @@ -33,6 +34,7 @@ - name: 开启docker 服务 shell: systemctl daemon-reload && systemctl restart docker + tags: restart_dockerd ## 可选 ------安装docker查询镜像 tag的小工具---- # 先要安装轻量JSON处理程序‘jq’,已在 prepare 节点安装