一、前言
在 LXD 虚拟化平台(1):简介 初步介绍了 LXD 虚拟化平台的基本概念与初始化装置,接下来的会具体解说 LXD 平台的各项性能。
本文聚焦在 LXD 镜像治理治理性能上。
二、镜像治理
和容器镜像相似,LXD 也有镜像治理的性能。但 LXD 自身没有镜像仓库的机制,每一个 LXD Server 自身就提供镜像仓库的性能,能够通过拜访 LXD 服务端的 HTTPS 端口(上一章提到的 lxd init
时是否容许 LXD 通过 HTTPS 提供 API 接口)来查问和上传、下载镜像。
2.1 镜像源
在 LXD 平台中,镜像源就是远端服务器,治理远端服务器的命令是 remote 指令,remote 指令的阐明如下:
参数 | 应用阐明 | 案例阐明 |
---|---|---|
add | 增加远端的 LXD 服务器(如果 LXD 服务器设置验证,须要提供验证信息才容许拜访) | lxc remote add remote_server https://192.168.1.1:8443 |
get-default | 以后默认应用的远端服务器,默认是 local(本地) | lxc remote get-default |
list | 查问以后远端服务器列表 | lxc remote list |
remove | 移除远端服务器 | lxc remote remove remote_server |
rename | 批改远端服务器的名称 | lxc remote rename remote_server remote_server_new_name |
set-url | 批改远端服务器的地址 | lxc remote set-url remote_server https://192.168.1.1:8443 |
switch | 切换默认的远端服务器 | lxc remote switch remote_server |
LXD 初始化结束后,曾经内置好了一些官网镜像源,能笼罩大部分的 Linux 发行版本,内置的远端服务器列表信息如下:
远端名称 | 远端阐明 |
---|---|
local | 本地服务器,代指 LXD Server 自身,也是默认的 LXD remote |
images | LXD 社区镜像源,由 LXD 团队保护,能够下载大部分的开源 Linux 发行版镜像 |
ubuntu 和 ubuntu-daily | Ubuntu 官网镜像源 |
因而,当须要创立虚拟机时,个别先查问一下远端服务器可用的镜像信息,例如查问远端服务器 images 的可用镜像列表:
root@easyops:~# lxc image list images:
+------------------------------------------+--------------+--------+----------------------------------------------+--------------+-----------------+-----------+-------------------------------+
| ALIAS | FINGERPRINT | PUBLIC | DESCRIPTION | ARCHITECTURE | TYPE | SIZE | UPLOAD DATE |
+------------------------------------------+--------------+--------+----------------------------------------------+--------------+-----------------+-----------+-------------------------------+
| almalinux/8 (3 more) | 27376a416044 | yes | Almalinux 8 amd64 (20230611_02:25) | x86_64 | CONTAINER | 128.47MB | Jun 11, 2023 at 12:00am (UTC) |
+------------------------------------------+--------------+--------+----------------------------------------------+--------------+-----------------+-----------+-------------------------------+
| almalinux/8 (3 more) | bba99c11b237 | yes | Almalinux 8 amd64 (20230611_02:25) | x86_64 | VIRTUAL-MACHINE | 722.59MB | Jun 11, 2023 at 12:00am (UTC) |
+------------------------------------------+--------------+--------+----------------------------------------------+--------------+-----------------+-----------+-------------------------------+
| almalinux/8/arm64 (1 more) | 66161cf07508 | yes | Almalinux 8 arm64 (20230611_01:14) | aarch64 | CONTAINER | 124.99MB | Jun 11, 2023 at 12:00am (UTC) |
+------------------------------------------+--------------+--------+----------------------------------------------+--------------+-----------------+-----------+-------------------------------+
| ......
+------------------------------------------+--------------+--------+----------------------------------------------+--------------+-----------------+-----------+-------------------------------+
社区保护的镜像列表,可查问:https://images.linuxcontainers.org/。
创立虚拟机的指令如下:
# lxc launch [远端地址]:[远端镜像] [虚拟机名称] [其余参数]
lxc launch images:almalinux/8 my-test-container -c limits.cpu=1 -c limits.memory=64MiB
该指令执行后,LXD Daemon 会向远端服务器发送镜像下载申请,下载到本地后解压该镜像并且创立虚拟机。
launch 指令将会在后续的实例治理章节中具体解说,在此不开展。
2.2 制作与公布镜像
在企业生产应用的场景下,须要对以后企业应用的根底镜像制作打包和公布应用,LXD 制作镜像的根本流程如下:
- (可选)应用 distrobuilder 来创立镜像;
- 应用镜像创立虚拟机实例,或者对已有的虚拟机创立快照;
- 应用虚拟机或者虚拟机快照公布镜像。
2.2.1(可选)应用 distrobuilder 制作镜像
首先,须要初始化一个 LXD 环境来制作镜像,初始化 LXD 环境已在以往的章节中提及,这里不开展形容(LXD 虚拟化平台(1):简介)。
而后下载 distrobuilder 工具包,地址是 https://linuxcontainers.org/distrobuilder/downloads/,也能够执行以下的指令装置:
go get -v -x github.com/lxc/distrobuilder/distrobuilder
接下来,本文以 CentOS-8 镜像制作过程作为根本的示例。
a). 设置 rpm 命令操作的根目录
mkdir /tmp/centos8/my_rootfs
rpm --root /tmp/centos8/my_rootfs/ --initdb
b). 下载并解压 CentOS-8 的 release 包
wget http://mirrors.aliyun.com/centos-vault/8.5.2111/BaseOS/x86_64/os/Packages/centos-linux-release-8.5-1.2111.el8.noarch.rpm
rpm -ivh --nodeps --root /tmp/centos8/my_rootfs/ --package ./centos-linux-release-8.5-1.2111.el8.noarch.rpm
c). 配置镜像的 YUM 源
mkdir /tmp/centos8/my_rootfs/etc/yum.repos.d
wget -O /tmp/centos8/my_rootfs/etc/yum.repos.d/Centos-Base.repo https://mirrors.aliyun.com/repo/Centos-vault-8.5.2111.repo
d). 通过 YUM 装置必须的软件包
# 装置 yum 以及其余软件包
yum --installroot=/tmp/centos8/my_rootfs/ \
install systemd
yum --installroot=/tmp/centos8/my_rootfs/ \
install `cat rpm.list|xargs echo`
# 留神:这里的 rpm.list 是从一个 lxd centos8 stream 官网镜像生成的零碎中获取的,须要执行 rpm -qa 转为须要的包名:
cat centos8-stream.rpm.list |sed -r 's/(.*)-(.*)-(.*).(x86_64|noarch)/\1/' > rpm.list
e). 执行镜像文件的打包操作
tar -cvzf rootfs.tar.gz -C /tmp/centos8/my_rootfs .
f). 制作 metadata.tar.gz
编辑文件 metadata.yaml
,增加以下的内容:
architecture: x86_64
creation_date: 1646190387 # `date +%s`
properties:
architecture: x86_64
description: Centos 8.5 x86_64
os: centos
release: 8
name: centos8_base
variant: default
templates:
/etc/hosts:
when:
- create
- copy
create_only: false
template: hosts.tpl
properties: {}
/etc/sysconfig/network:
when:
- create
- copy
create_only: false
template: network.lxd.tpl
properties: {}
/etc/sysconfig/network-scripts/ifcfg-eth0:
when:
- create
- copy
create_only: false
template: ifcfg-eth0.lxd.tpl
properties: {}
编辑文件 templates/hosts.tpl
,增加以下内容:
127.0.1.1 {{container.name}}
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
编辑文件 templates/ifcfg-eth0.lxd.tpl,增加以下内容:
DEVICE=eth0
BOOTPROTO=dhcp
ONBOOT=yes
HOSTNAME={{container.name}}
NM_CONTROLLED=no
TYPE=Ethernet
DHCP_HOSTNAME={{container.name}}
编辑文件 templates/network.lxd.tpl,增加以下内容:
NETWORKING=yes
HOSTNAME={{container.name}}
最初把文件都打包为 metadata.tar.gz:
tar -cvzf metadata.tar.gz metadata.yaml templates
g). 导入镜像文件和 metadata 文件
lxc image import metadata.tar.gz rootfs.tar.gz --alias centos8
# 查看镜像确认导入后果
lxc image ls
h). 创立实例验证镜像的可用性
# 应用镜像创立虚拟机实例
lxc launch centos8 test-1
# 进入虚拟机配置网络,验证网络的连通性
lxc exec test-1 -- /bin/bash
# 配置网卡文件 /etc/sysconfig/network-scripts/ifcfg-eth0,增加以下的内容
DEVICE=eth0
BOOTPROTO=static
ONBOOT=yes
HOSTNAME=c1
NM_CONTROLLED=no
TYPE=Ethernet
IPADDR=172.30.0.25
GATEWAY=172.30.0.1
NETMASK=255.255.255.0
DNS1=114.114.114.114
# 重启网络服务
/etc/init.d/network restart
# 查看 eth0 网卡 IP 是否显示失常
ifconfig
2.2.2 应用 lxc publish 公布镜像
应用 distrobuilder 制作镜像后,能够通过 lxc publish
来公布镜像。当然,如果感觉应用 distrobuilder 制作镜像比拟麻烦,也能够跳过该步骤,应用 lxc publish
把以后实例或者实例的快照制作为镜像并且进行公布。
publish 指令的根本办法如下:
Description:
Publish instances as images
Usage:
lxc publish [<remote>:]<instance>[/<snapshot>] [<remote>:] [flags] [key=value...]
Flags:
--alias New alias to define at target
--compression none Compression algorithm to use (none for uncompressed)
--expire Image expiration date (format: rfc3339)
-f, --force Stop the instance if currently running
--public Make the image public
提供以下的例子作为应用的参考:
# 案例 1:把本地虚拟机 test-container 制作名为 test-image 的本地镜像
lxc publish local:test-container local:test-image
# 案例 2:把本地虚拟机 test-container 制作名为 test-image 的镜像,并且上传到远端服务器 test-remote-server
lxc publish local:test-container test-remote-server:test-image
# 案例 3:把本地虚拟机 test-container 的快照 test-01 制作名为 test-image 的本地镜像
lxc publish local:test-container/test-01 local:test-image
比拟罕用的做法就是通过 images、ubuntu 等官网社区源,创立好虚拟机,而后启动虚拟机进行企业的本地化裁剪后,通过 lxc publish
公布为外部镜像进行推广应用。