如何在 shell 脚本中使用 LXD(Linux 容器)在云实例启动时创建 VM
我的云提供商允许我在创建新的 Ubuntu Linux 16.04 LTS 机器时运行 shell 脚本。我想安装 LXD 服务并使用 shell 脚本创建一个具有特定私有 IP 的 VM?如何在云服务器启动时创建 LXD VM?
我假设您使用的是 Ubuntu 16.04 LTS 云 VM 或裸机服务器。您可以使用 apt-get 安装 lxd,并使用 lxc 命令创建 LXD VM。
Amazon AWS EC2也可以使用 shell 脚本:
我假设您使用的是 Ubuntu 16.04 LTS 云 VM 或裸机服务器。您可以使用 apt-get 安装 lxd,并使用 lxc 命令创建 LXD VM。
示例 bshell 脚本
以下是安装 LXD CentOS 7 vm 的 shell 脚本:
#!/bin/bash # Author: Vivek Gite # Purpose: Create an LXD CentOS 7 VM on top of Ubuntu 16.04 LTS server # License: GPL v2.0+ # ---------------------------------------------------------------------- ## Set defaults ## if_net="eth0" # vm interface br_net="lxdbr0" # host bridge if_net_sub="10.105.28.1/24" # subnet for br_net if_net_ip="10.105.28.2" # IP for vm ## VM name ## vm_name="www-server" ## Vm distro. I am using CentOS ## ## You can use Gentoo, Arch, OpenSuse, Ubuntu, Debian and more ## vm_distro="centos/7/amd64" ## bin path ## _apt="/usr/bin/apt-get" _lxd="/usr/bin/lxd" _lxc="/usr/bin/lxc" ## Update base host ## $_apt update $_apt -y upgrade ## Install LXD on base os ## $_apt -y install lxd $_lxd init --auto ## Create new networking bridge ## $_lxc network create ${br_net} ipv6.address=none ipv4.address=${if_net_sub} ipv4.nat=true ## Create vm ## $_lxc init images:${vm_distro} ${vm_name} ## Config vm networking ## $_lxc network attach ${br_net} ${vm_name} ${if_net} $_lxc config device set ${vm_name} ${if_net} ipv4.address ${if_net_ip} ## Start vm ## $_lxc start ${vm_name} ## Make sure vm boot after host reboots ## $_lxc config set ${vm_name} boot.autostart true ## Install updates in CentOS 7 VM ## $_lxc exec ${vm_name} -- /usr/bin/yum -y update $_lxc exec ${vm_name} -- /usr/bin/yum -y upgrade ## Install package (optional) ## $_lxc exec ${vm_name} -- /usr/bin/yum -y install epel-release $_lxc exec ${vm_name} -- /usr/bin/yum -y install httpd htop
我该如何调用这个脚本?
调用脚本取决于您的托管/云提供商系统。例如,Linode 用户可以使用StackScripts:
StackScripts 为 Linode 用户提供了在我们默认的 Linux 发行版映像上自动部署自定义系统的能力。使用 StackScript 部署的 Linode 会在首次启动过程中运行该脚本。
以下是 Linode 云提供商的一个示例:
图 01:StackScripts – 在 Linode 云上运行 Shell 脚本
在 Amazon EC2 中启动实例时,您可以选择将用户数据传递给实例,这些数据可用于执行常见的自动配置任务,甚至在实例启动后运行脚本。您可以将两种类型的用户数据传递给 Amazon EC2:shell 脚本和 cloud-init 指令
另一种选择是使用在云实例启动时执行的 cloud-init 指令。
本篇是LXD 教程系列中的第 9 篇(共22 篇)。继续阅读本系列的其余部分:
- 在 Ubuntu 16.04 LTS 上安装 LXD 容器管理程序
- 如何在 Fedora Linux 26 上安装和设置 LXC(Linux 容器)
- 在KVM或Xen虚拟机下设置LXD容器
- 列出 LXD(Linux 容器)中的 VM 映像
- 升级由 Ubuntu/Debian 或 CentOS Linux 驱动的 LXD 容器
- 在 Linux 启动时自动启动 LXD 容器
- 重命名 LXD / LXC 容器的命令
- 在配置启动时在 Linux 容器 (LXD) 实例上运行命令
- 在云实例启动时,使用 shell 脚本中的 LXD(Linux 容器)创建 VM
- 将 LXD VM 移动/迁移到 Linux 上的另一台主机
- Fedora 安装并设置 LXD
- CentOS 7.x 安装并设置 LXD 服务器
- 在 Ubuntu 18.04 LTS 上安装 LXD 纯容器管理程序
- 使用 lxc 命令为 LXD 创建快照
- 在 CentOS/RHEL 8 上设置并安装 LXD
- Ubuntu 20.04 LTS 安装并设置 LXD
- 完整备份和恢复 LXD 容器
- 禁用 LXD 桥上的防火墙和 NAT 规则
- 使用 lxc 删除或移除 LXD 容器
- Linux 文件系统错误:事务失败解决方案
- Ubuntu 22.04 LTS 设置 LXD
- Debian 11 设置 LXD