云服务器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初始化工具的使用与配置的主要内容,如果未能解决你的问题,请参考以下文章
在 Azure VM 上使用 cloud-init 挂载数据磁盘失败
如何在 Terraform 上使用 cloud-init 初始化实例