介绍
LXC其实就是一种Linux的容器技术,容器则可共享同一个操作系统内核,将应用进程与系统其他部分隔离开。例如:ARM Linux 系统运行 ARM Linux 容器,x86 Linux 系统运行 x86 Linux 容器,x86 Windows 系统运行 x86 Windows 容器。Linux 容器具有极佳的可移植性,但前提是它们必须与底层系统兼容。注意这和虚拟化的区别,虚拟化是虚拟出对应的硬件,并不是共享同一个操作内核。
本文都是介绍PVE下LXC的使用。
优缺点
PVE下的一些优缺点:
优点:
- 简单方便,直接通过模板即可创建系统。
- 运行内存并不是直接划分给容器独占,而是使用多少就占用多少
- 可以创建不同的发行版linux
缺点:
- 内核使用同一个,导致一些发行版linux无法创建。比如基于debian11的pve就不能创建centos7,只能创建centos8
- 不能创建windows容器
总的来说,其实LXC容器和虚拟机是两者互补的关系,经常用linux的话用LXC还是很香的,从使用来看和普通的linux基本没有区别。
PVE创建LXC
通过local下下载对应的CT模板后即可创建对应的LXC容器,这里注意因为是共用一个操作内核,所以模板会出出现不兼容的情况,比如pve7.2-7就不能创建centos7的模板。
选择模板创建也很简单,指定下核心数和内存与网络即可创建成功。
LXC容器开启核显
因为LXC和宿主机使用同一个内核,所以只要宿主机的核显正常使用,就能很方便的给LXC容器开启核显。
-
编辑对应ID编号的容器:
vim /etc/pve/lxc/容器ID.conf
-
文件末尾直接追加如下内容:
lxc.cgroup2.devices.allow: c 226:0 rwm lxc.cgroup2.devices.allow: c 226:128 rwm lxc.cgroup2.devices.allow: c 29:0 rwm lxc.mount.entry: /dev/dri dev/dri none bind,optional,create=dir lxc.mount.entry: /dev/fb0 dev/fb0 none bind,optional,create=file lxc.apparmor.profile: unconfined
-
进入lxc查看dev/dri/目录下包含by-path、card0、renderD128即成功开启核显。
LXC容器开启SSH访问
debian模板的LXC
-
安装vim(非必需)
apt install vim
-
编辑文件
vim /etc/ssh/sshd_config 修改 PermitRootLogin 为 PermitRootLogin yes ,有#号的话删除#号。 Esc :wq 保存退出
-
重启ssh
service ssh restart
centos模板的LXC
-
下载安装openssh-server
yum install openssh-server
-
启动ssh
systemctl start sshd.service
LXC创建用户
我们会发现直接创建用户进入用户后,发现bash既没有显示用户名也没有自动的创建用户文件夹,这些都是需要我们手动去创建的。
# 新建demo用户组
groupadd demo
# 新建demo用户组的demo用户
useradd -r -g demo demo
# 新建demo的用户主目录
mkdir /home/demo
# 转移用户主目录所有权
chown -R demo:demo /home/demo
# 用户配置
cp /etc/skel/.bashrc /home/demo
cp /etc/skel/.bash_profile /home/demo
LXC磁盘挂载
pve节点执行下方命令,其中101表示虚拟机编号 mp0表示第一个挂载点 /mnt/sda1为lxc内部的挂载点:
pct set 101 -mp0 /dev/sda1,mp=/mnt/sda1
LXC下阿里云盘的挂载
注意该项目只能读取,不能写入:
1.下载项目
可以自己选择版本下载,编写该文章时版本最新为v0.1.14:
wget https://github.com/messense/aliyundrive-fuse/releases/download/v0.1.14/aliyundrive-fuse-v0.1.14.x86_64-unknown-linux-musl.tar.gz
2.解压
tar -xzvf aliyundrive-fuse-v0.1.14.x86_64-unknown-linux-musl.tar.gz
3.启动
比如将磁盘挂载到 /mnt/aliyundrive 目录:
mkdir -p /mnt/aliyundrive /var/run/aliyundrive-fuse
aliyundrive-fuse -r your-refresh-token -w /var/run/aliyundrive-fuse /mnt/aliyundrive
4.fush特性不生效解决办法
-
运行前先执行如下命令:
mknod -m 666 /dev/fuse c 10 229
5.systemd配置文件参考
[Unit]
cription=aliyundrive
After=network.target
Wants=network.target
[Service]
ExecStartPre=/usr/bin/mknod -m 666 /dev/fuse c 10 229
ExecStart=/root/aliyundrive-fuse -r your-refresh-token -w /var/run/aliyundrive-fuse /mnt/aliyundrive
Restart=on-abnormal
RestartSec=5s
KillMode=mixed
User=root
StandardOutput=null
StandardError=journal
[Install]
WantedBy=multi-user.target
LXC下挂载远程smb
-
下载SMB组件
apt install cifs-utils -y
-
创建挂载目录
mkdir /mnt/smb1
-
创建账号密码文件
vim ~/.smbcredentials username=smb_share password=share_password
-
修改挂载文件
vim /etc/fstab //127.0.0.1/share /mnt/smb1 cifs credentials=/root/.smbcredentials,iocharset=utf8 0 0
-
重启LXC容器
reboot
重启完成后查看smb1路径是否已经成功挂载。