云服务器cloud-init初始化工具的使用与配置

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了云服务器cloud-init初始化工具的使用与配置相关的知识,希望对你有一定的参考价值。

参考技术A

[TOC]

在云平台中,创建云主机的时候希望能够对主机进行一些初始化操作,如配置ip,主机名,密码,ssh登录等。openstack上可以使用cloud-init进行初始化。

OpenStack虚拟机镜像指南
cloud-init 原理(执行的整个过程)
Cloud-init的认识和应用

cloud-init 是 linux 的一个工具,当系统启动时,cloud-init 可从 nova metadata 服务或者 config drive 中获取 metadata,完成包括但不限于下面的定制化工作:

cloud-init官方文档
官方配置参数参考
阿里云官方文档 安装cloud-init

前提条件
• 准备一台KVM机器,用于制作初始的centos7镜像
• 已为Linux云服务器绑定弹性IP。
• 已登录Linux云服务器。
• Linux云服务器的网卡属性为DHCP方式。

网卡配置文件为动态IP获取

配置ssh文件

在需要免密码登录的机器上执行下面命令,产生密钥对(controller节点上)

编辑配置文件 /etc/cloud/cloud.cfg

用微秒生成随机密码的命令

如果希望能够修改 instance 的 hostname(默认 instance 每次重启后 cloud-init 都会重新将 hostname 恢复成初始值),将 cloud_init_modules 列表中下面两项删除或注释掉:

(可选配置)在 /etc/cloud/cloud.cfg 文件中自定义网络配置

在cloud.cfg文件增加该配置之后,cloud-init不会管理/etc/sysconfig/network-scripts/下网络配置,需要自行管理。
建议提前配置好网卡配置文件为dhcp获取,否则在私有云上创建的实例可能会导致获取不到IP地址;原因是cloud-init中的自动配置网卡文件可能会导致mac地址不一致。

(可选配置)设置root用户密码

修改以下配置使得镜像创建的云服务器主机名不带.novalocal后缀且主机名称中可以带点号。
a. 执行如下命令,修改 __init__.py 文件

执行如下命令进入cloudinit/sources文件夹。

执行以下命令编辑Cloud-Init日志输出路径配置文件,设置日志处理方式handlers

检查Cloud-Init工具相关配置是否成功

执行以下命令,无错误发生,说明Cloud-Init配置成功

设置完成后关闭虚拟机,准备下一阶段生成镜像

如果对接ceph存储。可以把qcow2格式转换为raw格式的镜像再上传
Ceph缺点是不支持从qcow2格式的镜像引导,所以需要转换raw格式的镜像

将镜像上传到openstack的glance节点上(在controller节点上)

在ceph上查看镜像和glance池的数据

创建实例并查看cloud-init配置是否成功

虚拟机镜像需要确保安装了 cloud-init
OpenStack 提供了命令行参数--config-drive 用于配置是否在创建虚拟机时使用 config drive 机制

在/etc/nova/nova.conf中配置,直接使OpenStack计算服务在创建虚拟机时默认使用config drive 机制

注意

腾讯云GPU服务器环境部署与连接配置

先前博主购买了腾讯云的GPU服务器后,发现上面预装的环境存在一些问题,因此便来重新部署一下。
为了操作方便,博主这里使用了一个远程控制端软件:Xshell
博主在初始化时已经安装过pytorch了,我们首先看看安装的路径

测试环境

import torch
print(torch.__file__)

修改源

这时博主也发现系统帮我们安装了minconda3,相较于anconda,其体积更小。我们在控制台输入conda测试一下,出现下面界面说明是正常的


添加清华源镜像,让其安装依赖包速度快些

conda config --add channels http://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
conda config --add channels http://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/r
conda config --add channels http://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/msys2

#显示检索路径
conda config --set show_channel_urls yes

#显示镜像通道
conda config --show channels

在配置时会提示没有权限

CondaError: Cannot write to condarc file at /home/ubuntu/.condarc
Caused by PermissionError(13, ‘Permission denied’)

修改一下:

sudo chown -R ubuntu /home/ubuntu/.condarc

ubuntu是用户名,后面是路径
然后我们再次运行:一切正常


这时我们像之前在window那样创建anconda环境即可

创建环境与安装pytorch

conda create -n yolo python=3.8

此时报错:

NoWritableEnvsDirError: No writeable envs directories configured.
  - /home/ubuntu/.conda/envs
  - /usr/local/miniconda3/envs

这是没有写入权限造成的,修改一下:

sudo chmod a+w .conda

再次创建环境:成功

查看安装的环境:


激活环境:source activate yolo


根据cuda版本为11.4安装对应的pytorch

conda install pytorch==1.11.0 torchvision==0.12.0 torchaudio==0.11.0 cudatoolkit=11.4 -c pytorch

运行却失败了,因此也只能使用原来的命令,安装成功

conda install pytorch==1.12.1 torchvision==0.13.1 torchaudio==0.12.1 cudatoolkit=11.3 -c pytorch

pycharm远程连接

我们再次在pycharm中配置


可以看到所需的依赖都加载完成了。
再次运行还是有问题

sudo+ssh://ubuntu@175.178.111.6:22/home/ubuntu/.conda/envs/yolo/bin/python3.8 -u /home/ubuntu/pythonfile/train.py
/home/ubuntu/.conda/envs/yolo/bin/python3.8: can't open file '/home/ubuntu/pythonfile/train.py': [Errno 2] No such file or directory

该问题是没有将本地代码映射到服务器上导致的,在网上找相关资料,配置了很久,看到说可能与映射路径相关,来来回回搞了很多次,发现在本地新建的文件是可以写入的,但先前的文件却无法写入。这说明我们的目录配置是没有问题的。
然后重新上传一下,整个项目右击

然后等着,这个过程会很漫长,慢慢来。博主晚上导入的,早晨醒过来搞定了

此时我们可以看到,项目已经映射到服务器上了,此时我们再次运行一下:

提示我们缺少包了,我们只需要将所需要的包配置好即可了。

添加依赖包

sudo apt-get install python3-matplotlib

当然也可以使用pip install matplotlib命令或者使用pycharm中安装。


OK了


查看一下利用率

不得不说比博主笔记本的性能强太多了。
奈斯
最终,项目大约训练了4个小时便完成了,相较博主原本的笔记本快了不知多少倍,而且每次运行时风扇的呼呼声以及由于系统cpu,内存的占用而导致无法完成其他的事情,可以说真的非常棒,比起之前在谷歌白嫖的colab速度也快了不少,记得当时博主运行12小时也没完成,想必虽然两者是相同的显卡,但后者cpu的调用竞争激烈造成了一些瓶颈。

以上是关于云服务器cloud-init初始化工具的使用与配置的主要内容,如果未能解决你的问题,请参考以下文章

在本地KVM中使用cloud-init

在 Azure VM 上使用 cloud-init 挂载数据磁盘失败

cloud-init 执行分析

如何在 Terraform 上使用 cloud-init 初始化实例

cloud-init 工作原理 - 每天5分钟玩转 OpenStack(171)

cloud-init 工作原理 - 每天5分钟玩转 OpenStack(171)