Linux系统下批量升级LXD容器里的虚拟机的方法
August 29, 2017
本文将会讲述如何在linux 系统下自动升级LXD容器里的所有的虚拟机。
下面我们通过两种方法实现自动升级所有虚拟机:
Table of Contents
方法一:使用shell 脚本来升级
手动的升级命令是:
/usr/bin/lxc exec 虚拟机名 -- /usr/bin/apt-get -y upgrade (ubuntu系统) /usr/bin/lxcexec 虚拟机名 -- /usr/bin/yum -y update (centos 系统)
下面来创建bash shell 脚本来自动升级所有的虚拟机:
#!/bin/bash #脚本名:vmUpgrade.sh #-------------------------------- cmd="$@"for i in 虚机1 虚机2 虚机3 虚机4 do echo "[*** $i ***]" /usr/bin/lxc exec $i -- $cmd done
下面就可以调用脚本来升级vm了,执行下面的命令:
Ubuntu 系统:
$ ./vmUpgrade.sh /usr/bin/apt-get update $ ./vmUpgrade.sh /usr/bin/apt-get -y upgrade
Centos 系统:
$ ./vmUpgrade.sh /usr/bin/yum -y update
方法二:使用Ansible 自动化工具
1# 安装ansible 工具
执行命令:
$ sudo apt-get install ansible
命令输出:
正在读取软件包列表... 完成 正在分析软件包的依赖关系树 正在读取状态信息... 完成 下列软件包是自动安装的并且现在不需要了: gyp javascript-common libjs-inherits libjs-jquery libjs-node-uuid libjs-underscore libnvpair1linux libssl-dev libssl-doc libuutil1linux libuv1-dev libzfs2linux libzpool2linux zfs-doc zlib1g-dev 使用'apt autoremove'来卸载它(它们)。 将会同时安装下列软件: ieee-data libyaml-0-2 python-crypto python-ecdsa python-httplib2 python-jinja2 python-markupsafe python-netaddr python-paramiko python-selinux python-six python-yaml 建议安装: sshpass python-crypto-dbg python-crypto-doc python-jinja2-doc ipython python-netaddr-docs 下列【新】软件包将被安装: ansible ieee-data libyaml-0-2 python-crypto python-ecdsa python-httplib2 python-jinja2 python-markupsafe python-netaddr python-paramiko python-selinux python-six python-yaml 升级了 0 个软件包,新安装了 13 个软件包,要卸载 0 个软件包,有 5 个软件包未被升级。 需要下载 2,903 kB 的归档。 解压缩后会消耗 17.6 MB 的额外空间。 您希望继续执行吗? [Y/n] y 获取:1 http://archive.ubuntu.com/ubuntu xenial/main amd64 libyaml-0-2 amd64 0.1.6-3 [47.6 kB] 获取:2 http://archive.ubuntu.com/ubuntu xenial-updates/main amd64 python-crypto amd64 2.6.1-6ubuntu0.16.04.2 [246 kB] 获取:3 http://archive.ubuntu.com/ubuntu xenial/main amd64 python-markupsafe amd64 0.23-2build2 [15.5 kB] 获取:4 http://archive.ubuntu.com/ubuntu xenial/main amd64 python-jinja2 all 2.8-1 [109 kB] 获取:5 http://archive.ubuntu.com/ubuntu xenial/main amd64 python-six all 1.10.0-3 [10.9 kB] 获取:6 http://archive.ubuntu.com/ubuntu xenial/main amd64 python-ecdsa all 0.13-2 [34.0 kB] 获取:7 http://archive.ubuntu.com/ubuntu xenial/main amd64 python-paramiko all 1.16.0-1 [109 kB] 获取:8 http://archive.ubuntu.com/ubuntu xenial/main amd64 python-yaml amd64 3.11-3build1 [105 kB] 获取:9 http://archive.ubuntu.com/ubuntu xenial/main amd64 python-httplib2 all 0.9.1+dfsg-1 [34.2 kB] 获取:10 http://archive.ubuntu.com/ubuntu xenial/main amd64 ieee-data all 20150531.1 [830 kB] 获取:11 http://archive.ubuntu.com/ubuntu xenial/main amd64 python-netaddr all 0.7.18-1 [174 kB] 获取:12 http://archive.ubuntu.com/ubuntu xenial-updates/universe amd64 ansible all 2.0.0.2-2ubuntu1 [1,016 kB] 获取:13 http://archive.ubuntu.com/ubuntu xenial/universe amd64 python-selinux amd64 2.4-3build2 [173 kB] 已下载 2,903 kB,耗时 10秒 (287 kB/s) 正在选中未选择的软件包 libyaml-0-2:amd64。 (正在读取数据库 ... 系统当前共安装有 69061 个文件和目录。) 正准备解包 .../libyaml-0-2_0.1.6-3_amd64.deb ... 正在解包 libyaml-0-2:amd64 (0.1.6-3) ... 正在选中未选择的软件包 python-crypto。 正准备解包 .../python-crypto_2.6.1-6ubuntu0.16.04.2_amd64.deb ... 正在解包 python-crypto (2.6.1-6ubuntu0.16.04.2) ... 正在选中未选择的软件包 python-markupsafe。 正准备解包 .../python-markupsafe_0.23-2build2_amd64.deb ... 正在解包 python-markupsafe (0.23-2build2) ... 正在选中未选择的软件包 python-jinja2。 正准备解包 .../python-jinja2_2.8-1_all.deb ... 正在解包 python-jinja2 (2.8-1) ... 正在选中未选择的软件包 python-six。 正准备解包 .../python-six_1.10.0-3_all.deb ... 正在解包 python-six (1.10.0-3) ... 正在选中未选择的软件包 python-ecdsa。 正准备解包 .../python-ecdsa_0.13-2_all.deb ... 正在解包 python-ecdsa (0.13-2) ... 正在选中未选择的软件包 python-paramiko。 正准备解包 .../python-paramiko_1.16.0-1_all.deb ... 正在解包 python-paramiko (1.16.0-1) ... 正在选中未选择的软件包 python-yaml。 正准备解包 .../python-yaml_3.11-3build1_amd64.deb ... 正在解包 python-yaml (3.11-3build1) ... 正在选中未选择的软件包 python-httplib2。 正准备解包 .../python-httplib2_0.9.1+dfsg-1_all.deb ... 正在解包 python-httplib2 (0.9.1+dfsg-1) ... 正在选中未选择的软件包 ieee-data。 正准备解包 .../ieee-data_20150531.1_all.deb ... 正在解包 ieee-data (20150531.1) ... 正在选中未选择的软件包 python-netaddr。 正准备解包 .../python-netaddr_0.7.18-1_all.deb ... 正在解包 python-netaddr (0.7.18-1) ... 正在选中未选择的软件包 ansible。 正准备解包 .../ansible_2.0.0.2-2ubuntu1_all.deb ... 正在解包 ansible (2.0.0.2-2ubuntu1) ... 正在选中未选择的软件包 python-selinux。 正准备解包 .../python-selinux_2.4-3build2_amd64.deb ... 正在解包 python-selinux (2.4-3build2) ... 正在处理用于 man-db (2.7.5-1) 的触发器 ... 正在设置 libyaml-0-2:amd64 (0.1.6-3) ... 正在设置 python-crypto (2.6.1-6ubuntu0.16.04.2) ... 正在设置 python-markupsafe (0.23-2build2) ... 正在设置 python-jinja2 (2.8-1) ... 正在设置 python-six (1.10.0-3) ... 正在设置 python-ecdsa (0.13-2) ... 正在设置 python-paramiko (1.16.0-1) ... 正在设置 python-yaml (3.11-3build1) ... 正在设置 python-httplib2 (0.9.1+dfsg-1) ... 正在设置 ieee-data (20150531.1) ... 正在设置 python-netaddr (0.7.18-1) ... 正在设置 ansible (2.0.0.2-2ubuntu1) ... 正在设置 python-selinux (2.4-3build2) ... 正在处理用于 libc-bin (2.23-0ubuntu9) 的触发器 ...
2# 创建一个yml个格式的ansible playbook 文件(update.yml),加入下面的内容
# Update host running on Debian/Ubuntu - name: Updating host using apt apt: update_cache: yes upgrade: dist # # Now update VMs powered by Debian/Ubuntu Linux # - name: Run lxc to update debian/ubuntu vms repo command: /usr/bin/lxc exec {{ item }} -- /usr/bin/apt-get -y update with_items: - ubuntuvm1 - debianvm2 - ubuntuvm3 - name: Run lxc to upgrade debian/ubuntu vms pacakges command: /usr/bin/lxc exec {{ item }} -- /usr/bin/apt-get -y upgrade with_items: - ubuntuvm1 - debianvm2 - ubuntuvm3 # # Now update VMs powered by CentOS 7 Linux # - name: Run lxc to upgrade centos vms command: /usr/bin/lxc exec {{ item }} -- /usr/bin/yum -y update with_items: - centosvm4 - centosvm5 - centosvm6
3# 执行下面的ansible-playbook命令,执行升级操作
$ ansible-playbook -i /etc/ansible/hosts update.yml