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

news/2024/9/20 8:17:15/ 标签: linux, ubuntu, 服务器, 深度学习

文章目录

      • 前言
      • 配置宿主机网络
      • 固定内核版本
      • 安装 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后端开发中,性能监控是确保系统稳定和高效运行的关键。…

【Qt网络编程】Tcp多线程并发服务器和客户端通信

目录 一、编写思路 1、服务器 (1)总体思路widget.c(主线程) (2)详细流程widget.c(主线程) (1)总体思路chat_thread.c(处理聊天逻辑线程&…

stable diffusion 神经网络插件 controlnet 的安装,很详细

stable diffusion 神经网络插件 controlnet 的安装,很详细 一、前言二、下载1、方式一2、方式二 一、前言 学到 stable diffusion 的 controlnet 插件,安装也略微曲折,这里做个记录。 下载前保证 github 能正常访问。 二、下载 1、方式一…

golang学习笔记30——golang 中代码仓库的 h1 和 go.mod h1 不一致的修正方法

推荐学习文档 golang应用级os框架,欢迎stargolang应用级os框架使用案例,欢迎star案例:基于golang开发的一款超有个性的旅游计划app经历golang实战大纲golang优秀开发常用开源库汇总想学习更多golang知识,这里有免费的golang学习笔…

易语言源码用键盘按键代替小键盘写法教程

相信大家都有遇到过一些难题 比方说想用一些软件 但是发现一些软件需要有小键盘的用户才能使用 那么这样就对于一些无小键盘用户造成了困扰! 今天就给大家分享一个用易语言写的利用软键盘方法 当按下一个按键启动其他热键的方法 以下为源码写法 .版本 2 .支持库 she…

电气设备施工现场风险状态判断ai模型训练数据集

电气设备施工现场风险状态判断ai模型训练数据集 id:18 电气设备施工现场工人人工智能学习数据和工作环境安全数据,建立系统化管理体系,改变全球EHS范式,预防工业事故。数据集记录了387709例子电力设施建设以及施工现场相关的灾害安全环境数据…

发现的一种很简单的set/get封装办法

参考&#xff1a; C 中简化set/get 函数封装的 方式_c get set-CSDN博客 定义一个模板类 你可以创建一个模板类Property&#xff0c;用于封装设置和获取功能&#xff1a; template<typename T> class Property { private:T value;public:void set(const T& v) {va…

代码随想录算法训练营43期 | Day 21 —— 108.将有序数组转换为二叉搜索树、 538.把二叉搜索树转换为累加树

代码随想录算法训练营 代码随想录算法训练营43期 | Day108.将有序数组转换为二叉搜索树538.把二叉搜索树转换为累加树 代码随想录算法训练营43期 | Day 108.将有序数组转换为二叉搜索树 class Solution { private:TreeNode* traversal(vector<int>& nums, int left…

Java项目实战II基于Java+Spring Boot+MySQL的房屋租赁管理系统的设计与实现

目录 一、前言 二、技术介绍 三、系统实现 四、论文参考 五、核心代码 六、源码获取 全栈码农以及毕业设计实战开发&#xff0c;CSDN平台Java领域新星创作者&#xff0c;专注于大学生项目实战开发、讲解和毕业答疑辅导。获取源码联系方式请查看文末 一、前言 随着城市租…

OpenAIAPI报错和ATL延迟优化

Open AI API报错&#xff1a; ————————————————加更———————————————————— 1.API Error: {“error”:{“message”:“无效的令牌”,“type”:“one_api_error”}}/报错403 调用接口不对&#xff0c;openkey的调用需要对应使用https://open…

C#和数据库高级:抽象类和抽象方法

文章目录 一、为什么使用抽象类和抽象方法&#xff1f;1.1、父类与子类的相互转换 二、抽象类和抽象方法2.1、抽象类的定义和方法声明规范2.2、使用继承多态的机制解决问题 三、抽象类的概念和使用特点总结 一、为什么使用抽象类和抽象方法&#xff1f; 1.1、父类与子类的相互…

二十种编程语言庆祝中秋节

二十种编程语言庆祝中秋节 文章目录 二十种编程语言庆祝中秋节中秋快乐&#xff01;家人们 &#x1f973;一 Python二 C三 C四 Java五 C#六 Perl七 Go八 Asp九 PHP十 JavaScript十一 JavaScript HTML十二 Visual Basic十三 早期 VB十四 Visual C十五 Delphi十六 Shell十七 Cobo…

在设计开发中,如何提高网站的用户体验?

在网站设计开发中&#xff0c;提高用户体验是至关重要的。良好的用户体验不仅能提升用户的满意度和忠诚度&#xff0c;还能增加转化率和用户留存率。以下是一些有效的方法和策略&#xff1a; 优化页面加载速度 减少HTTP请求&#xff1a;合并CSS和JavaScript文件以减少HTTP请求…