桥接网络设置多用户lxd容器

news/2024/11/13 9:35:09/

文章目录

      • 前言
      • 配置宿主机网络
      • 固定内核版本
      • 安装 lxd、zfs 及 bridge-utils
      • 安装宿主机显卡驱动
      • lxd 初始化
      • 创建容器模板
      • 安装容器显卡驱动
      • 复制容器

前言

使用桥接网络配置 lxd 有个好处,就是每个用户都可以在该局域网下有一个自己独立的 IP,该 IP 的端口可以由用户自己设置和使用,无需进行端口转发的操作。

配置宿主机网络

  • 进入 /etc/netplan/ 目录有一个 yaml 配置文件,下面的命令需要根据自己的 yaml 文件名称自行修改:
    sudo cp /etc/netplan/01-netcfg.yaml /etc/netplan/01-netcfg.yaml.bak
    sudo vim /etc/netplan/01-netcfg.yaml
    
    修改内容如下:
    # This file describes the network interfaces available on your system
    # For more information, see netplan(5).
    network:version: 2renderer: networkdethernets:eno1:dhcp4: nodhcp6: nobridges:br0:dhcp4: nodhcp6: nointerfaces:- eno8303addresses: [ 192.168.23.115/24 ]gateway4: 192.168.23.1nameservers:addresses:- 114.114.114.114- 8.8.8.8parameters:stp: falseforward-delay: 0
    
    其中:
    • addresses: [ 192.168.23.115/24 ] 为任意网络无人占用的 IP 即可。
    • gateway4: 192.168.23.1 为网关地址。
    • eno8303 为网卡名称,可以使用 ip a 命令查看。
  • 应用网络配置:
    sudo netplan --debug apply
    

固定内核版本

sudo apt-mark hold linux-image-generic linux-headers-generic

安装 lxd、zfs 及 bridge-utils

sudo snap install lxd
sudo apt install zfsutils-linux bridge-utils

安装宿主机显卡驱动

  • 安装依赖:
    sudo apt install gcc g++ make
    
  • 安装驱动:
    sudo bash ./NVIDIA-Linux-x86_64-550.90.07.run
    
  • 查看显卡:
    nvidia-smi
    
    在这里插入图片描述

lxd 初始化

  • 初始化 lxd:
    sudo lxd init
    
    在初始化过程中,不要创建新的网桥,已存在的网桥名为 br0,其他设置默认即可.
    Would you like to use LXD clustering? (yes/no) [default=no]:
    Do you want to configure a new storage pool? (yes/no) [default=yes]:
    Name of the new storage pool [default=default]: lxd
    Name of the storage backend to use (btrfs, ceph, dir, lvm, zfs) [default=zfs]:
    Create a new ZFS pool? (yes/no) [default=yes]:
    Would you like to use an existing block device? (yes/no) [default=no]:
    Size in GB of the new loop device (1GB minimum) [default=100GB]: 1200
    Would you like to connect to a MAAS server? (yes/no) [default=no]:
    Would you like to create a new local network bridge? (yes/no) [default=yes]: no
    Would you like to configure LXD to use an existing bridge or host interface? (yes/no) [default=no]: yes
    Name of the existing bridge or host interface: br0
    Would you like LXD to be available over the network? (yes/no) [default=no]:
    Would you like stale cached images to be updated automatically? (yes/no) [default=yes]
    Would you like a YAML "lxd init" preseed to be printed? (yes/no) [default=no]:
    

创建容器模板

  • 创建的容器版本最好与宿主机版本相同:

    sudo lxc launch ubuntu:22.04
    
  • 为方便后续使用,修改容器名:

    sudo lxc stop equipped-locust
    sudo lxc rename equipped-locust template
    sudo lxc start template
    
  • 为容器添加设备和权限:

    sudo lxc config device add template gpu gpu
    sudo lxc config set template security.nesting true
    sudo lxc config set template security.privileged true
    
  • 如果宿主机有多张显卡,一定要指定 GPU 的索引号:

    sudo lxc config device add template gpu-tmp0 gpu id=0
    sudo lxc config device add template gpu-tmp1 gpu id=1
    

    使用 nvidia-smi 查看 GPU 的索引号:
    在这里插入图片描述

  • 启动容器:

    lxc start template
    
  • 进入容器:

    sudo lxc exec template bash
    

    其中 template 为容器名。

  • 和宿主机一样,进入 /etc/netplan/ 目录有一个 yaml 配置文件,下面的命令需要根据自己的 yaml 文件名称自行修改:
    编辑 yaml 配置文件:

    mv /etc/netplan/50-cloud-init.yaml /etc/netplan/50-cloud-init.yaml.bak
    vim /etc/netplan/50-cloud-init.yaml
    

    修改内容如下:

    network:version: 2ethernets:eth0:dhcp4: nodhcp6: noaddresses:- 192.168.23.150/24gateway4: 192.168.23.1nameservers:addresses:- 114.114.114.114- 8.8.8.8
    

    其中:

    • addresses 为容器模板的 IP,与宿主机在同一网段下。
    • gateway4 为网关地址。
  • 应用网络配置:

    netplan --debug apply
    
  • 更改容器用户名和密码:
    容器默认用户名为 ubuntu,这里想把他改成 tmp,命令如下:

    usermod -l tmp -d /home/tmp -m ubuntu
    groupmod -n tmp ubuntu
    

    此时 /home 文件夹下只剩下 tmp 目录。
    更改 tmp 用户密码和 root 密码:

    passwd tmp
    passwd root
    
  • 配置容器 ssh 连接:
    安装 ssh :

    sudo apt install openssh-server
    

    安装完后,使用 systemctl 启动 ssh 服务:

    sudo systemctl enable --now ssh
    

    然后检查 ssh 服务运行状态,确保服务正常运行并且没有错误输出(显示 active running 表示服务正常):

    sudo systemctl status ssh
    

    在这里插入图片描述

    编辑 ssh 配置文件:

    vim /etc/ssh/sshd_config
    

    将其中以下内容进行修改:

    Port 22
    PubkeyAuthentication no
    PasswordAuthentication yes
    KbdInteractiveAuthentication yes
    

    重启 ssh 服务:

    systemctl restart sshd
    

    此时可以用 exit 命令退出到宿主机中,用 SSH 命令远程连接容器:

    sudo ssh ubuntu22-tmp@10.22.118.222
    

    输入密码,能登录则没问题。

  • 配置容器软件源:
    备份原来的源:

    sudo mv /etc/apt/sources.list /etc/apt/sources.list.bak
    

    将源的内容设置为清华镜像:

    sudo apt install vim
    sudo rm /etc/apt/sources.list
    sudo vim /etc/apt/sources.list
    

    将其中内容改为:

    # 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释
    deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy main restricted universe multiverse
    # deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy main restricted universe multiverse
    deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-updates main restricted universe multiverse
    # deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-updates main restricted universe multiverse
    deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-backports main restricted universe multiverse
    # deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-backports main restricted universe multiverse
    deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-security main restricted universe multiverse
    # deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-security main restricted universe multiverse# 预发布软件源,不建议启用
    # deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-proposed main restricted universe multiverse
    # deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-proposed main restricted universe multiverse 作者:贝拉的海 https://www.bilibili.com/read/cv17891624?spm_id_from=333.999.0.0 出处:bilibili
    

    更新软件列表:

    sudo apt update
    sudo apt upgrade
    
  • 设置 pip 清华源:

    sudo apt install python3-pip
    pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
    

安装容器显卡驱动

容器和宿主机的显卡驱动必须保持一致,因此需要将宿主机的驱动文件传输到容器中。 因为刚安好了 ssh,因此可以选择 scp 传输。在宿主机中输入以下命令:

scp ./NVIDIA-Linux-x86_64-550.90.07.run yhl@192.168.23.151:/home/yhl/

传输后通过 ssh 进入容器,输入以下命令安装显卡驱动:

sudo bash ./NVIDIA-Linux-x86_64-418.56.run --no-kernel-module

由于容器和宿主机共享内核,所以在安装容器的显卡驱动时需要添加 --no-kernel-module 参数。

复制容器

lxc copy template yhl

新复制的容器用于与容器模板相同的配置,但需要另行安装显卡驱动。


http://www.ppmy.cn/news/1527933.html

相关文章

玩转RabbitMQ声明队列交换机、消息转换器

♥️作者:小宋1021 🤵‍♂️个人主页:小宋1021主页 ♥️坚持分析平时学习到的项目以及学习到的软件开发知识,和大家一起努力呀!!! 🎈🎈加油! 加油&#xff01…

【自动驾驶】控制算法(九)深度解析车辆纵向控制 | 从算法基础到 Carsim 仿真实践

写在前面: 🌟 欢迎光临 清流君 的博客小天地,这里是我分享技术与心得的温馨角落。📝 个人主页:清流君_CSDN博客,期待与您一同探索 移动机器人 领域的无限可能。 🔍 本文系 清流君 原创之作&…

Leetcode面试经典150题-79.搜索单词

题目比较简单,回溯最基础的题,记得除非覆盖,否则一定要恢复现场就行 解法都在代码里,不懂就留言或者私信 class Solution {public boolean exist(char[][] board, String word) {int m board.length; int n board[0].length;i…

JavaScript如何判断输入的是空格

1、JavaScript如何判断输入的是空格 1.1. 使用trim()方法和length属性 trim() 方法可以移除字符串两端的空白字符(包括空格、制表符、换行符等),然后检查处理后的字符串长度是否为0。 function isOnlySpaces(str) {return str.trim().lengt…

es由一个集群迁移到另外一个集群es的数据迁移

迁移es的数据 改下index的索引 就可以了。 查询 用curl -u就可以查询了

C# 中Faker

在 C# 中,Faker 类通常用于生成模拟数据(也称为虚拟数据、测试数据),这对于开发、测试以及演示应用程序非常有用。一个流行的库叫做 Faker,它提供了一种简单的方式来生成各种随机数据。 安装 Faker 库 要使用 Faker …

VMware安装飞牛私有云fnOS并挂载小雅Alist实现异地远程访问

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

Java后端性能监控:使用JMX与Java Mission Control的深入解析

Java后端性能监控:使用JMX与Java Mission Control的深入解析 大家好,我是微赚淘客返利系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿!在Java后端开发中,性能监控是确保系统稳定和高效运行的关键。…