介绍

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

  1. 安装vim(非必需) apt install vim

  2. 编辑文件

    vim /etc/ssh/sshd_config
    修改 PermitRootLogin 为 PermitRootLogin yes ,有#号的话删除#号。
    Esc :wq 保存退出
  3. 重启ssh service ssh restart

centos模板的LXC

  1. 下载安装openssh-server yum install openssh-server

  2. 启动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下阿里云盘的挂载

注意该项目只能读取,不能写入: [github author="messense" project="aliyundrive-fuse"][/github]

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特性不生效解决办法

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

  1. 下载SMB组件 apt install cifs-utils -y

  2. 创建挂载目录 mkdir /mnt/smb1

  3. 创建账号密码文件

    vim ~/.smbcredentials
    username=smb_share
    password=share_password
  4. 修改挂载文件

    vim /etc/fstab
    //127.0.0.1/share /mnt/smb1 cifs credentials=/root/.smbcredentials,iocharset=utf8 0 0
  5. 重启LXC容器 reboot重启完成后查看smb1路径是否已经成功挂载。

参考

挂载远程smb