容器技术-LXD/LXC ¶
#LXC #LXD
- LXC 是容器的一套基础工具,具有容器管理的一般能力,比如创建、运行、导入导出等
- LXD 是一套容器管理框架,除了这些基础工具,还具有一些其他能力,比如连接远程镜像库
- 安装了LXD 就不需要安装LXC了,不过在ubuntu下,LXD已经被放到SNAP的软件库中了
- LXD 安装后需要初始化
- snap install lxd
- lxd init
- snap start lxd
LXD 提供的是 lxc subcommand 系列工具,比如 lxc ls, lxc launch, lxc create 等
Linux发行版中,LXD 只支持了Ubuntu,因为只有ubuntu内置了SNAP包管理,其他平台的话要么安装snap,要么就只能使用原生的LXC了,不过很多平台都有自己的LXC管理工具。
注意⚠️
由于LXD已经完全由SNAP应用商店发行,LXD的发起人重新开源了一个项目 LNCUS 在 GITHUB上,用法和LXD差不多,如果用其他发行版的话,可以用这个工具管理容器。
LXD 的网络 💻 ¶
- 默认的 LXDBR0 , 使用
- LXC CREATE
- 💻LXC LAUNCH
- 会自动连接该网络并分配地址,算是比较方便的一种
- 该网络为NAT网络
- BRIDGE 网络桥,可以桥接物理网络,且可自由与宿主机通信
- lxc network create lxcbr1 --type bridged parent=br0
- lxc launch ubuntu:24.04 serv01 -n lxcbr1
- 注意需要将宿主机网卡 eth0 也连接到网桥 br0 上
- 网桥 br0 有可能需要自己创建,使用 brctl 工具🛠️
- MACVLAN,桥接物理网络,但与宿主机处于隔离状态,用于宿主机不需要与容器通信的场合以提高隔离性和安全性
- lxc network create macvlan --type=macvlan parent=eth0
- lxc launch ubuntu:22.04 serv02 -n macvlan
- 直接连接物理网卡,效果和macvlan差不多,都不能和宿主机通信
- lxc network ls 会显示一个类似 eth0 的物理网络,这个网络不受LXD管理,可以将容器连接到该网络
- lxc launch ubuntu:22.04 serv03 -n eth0
LXC LXD 与 DOCKER K8S 的最重要区别 💽 ¶
- 系统和应用的不可变性
- LXC 是可变的,其性质反而像一种轻量化虚拟机,备份时可以将容器一起打包带走
- K8S 这种容器在应用层是不可变的,这会强制你把数据和容器分离开来,但这也有个好处,只把数据打包走会更方便点,但使用习惯要改过来。
- LXC 只支持Linux容器,而Docker甚至可以虚拟化出 android 或者 windows,不过一般都虚拟机解决就是了。
CLOUD INIT 系统初始化🌥️ ¶
配置IP地址 ¶
编写一个网络配置文件,内容如下,地址和网关,DNS这些修改为真实的
# root@ub2404-lxc01:~# cat network.yaml network:
version: 2
renderer: networkd
ethernets: etho:
dhcp4: no
dhcp6: no
addresses:
- 192.168.60.12/24 # Your static IP address and CIDR
gateway4: 192.168.60.1 # Your network gateway
nameservers:
addresses:
- 202.115.192.33
- 114.114.114.114
- 创建容器 lxc init ubuntu:24.04 serv01
- 连接网络,其中第一个eth0是系统宿主机的上网网卡,第二个eth0是容器的网卡名称。 lxc network attach eth0 serv01 eth0
- 使用 ci 配置地址,注意后面的引号不能省略,否则配置文件内容会展开为多个参数,进而报错 lxc config set serv01 cloud-init.network-config "$(cat network.yaml)"
- 启动容器 lxc start serv01
在没使用网桥的情况下,直接连接物理网卡依然受内核隔离机制影响,不能和宿主机通信。
存储 STORAGE 🫙💽 ¶
常用的目录存储
- lxc storage create poolName dir source=/data/lxc
- lxc launch ubuntu:24.04 serv01 -s poolName -d root,size=40GiB
- -d 参数指定根文件系统的最大容量,默认和宿主机一样大小
其他存储用到了再说
备份和恢复 💻
快照 Snapshots
- 快照是基于容器的,容器被删除时快照基本上无法保留,因此快照只是基于防止用户误操作损坏容器后进行恢复,这个都在本地运行,但有两点
- 可以创建自动快照,到期失效
- 可以通过 --stateful 创建带状态的快照,以便恢复运行状态
- lxc snapshot serv01 snap-1
- lxc delete serv01/snap-1
- 在LXC中,删除快照不会改变当前运行状态,只是把用于恢复的数据进行了清除历史数据,恢复快照是丢弃变更,快照之后的变更被丢弃
- 这种快照依赖写时复制 CoW 技术, 变更数据快时,原数据块被备份到快照里,LVM卷也是采用这种技术
- 容器快照和虚拟机快照原理上有差异,虚拟机快照创建后,使用外部快照的情况下,原虚拟磁盘会立即冻结写操作,并新建一个虚拟磁盘保存变更。
- 在所有快照技术中,删除快照都是确认变更,恢复快照类似于丢弃变更
- 容器和LVM这种快照形式会在写入时发生很大负荷,但删除快照对系统基本没影响
- 虚拟机那种快照形式,在写入时性能损失不大,但在删除时会显著拖累系统性能(因为会把变更合并回原盘)
数据卷导出
- 冻结变更,暂停容器,然后将容器导出,最后恢复运行
- lxc pause serv01
- lxc export serv01 serv01.tar.gz
- lxc export serv01 serv01.tar.gz --instance-only
- lxc resume serv01
- 恢复
- lxc import serv01.tar.gz
- lxc start serv01
评论
请登录后发表评论。
暂无评论。成为第一个评论者!