专栏首页johnnyxsu技术交流分享玩转CVM之Cloud-Init排障
原创

玩转CVM之Cloud-Init排障

Cloud-Init 是一个纯开源的工具,它是虚拟机内部的一个服务,在开机启动的时候会被执行,非常驻服务,执行完就会退出。腾讯云的 Linux 公有镜像都预安装了 Cloud-Init 服务,主要用于实现对 CVM 实例的初始化操作,以及执行一些用户在创建 CVM 实例的时候指定首次开机启动要执行的自定义脚本。

Cloud-Init 是腾讯云唯一一个与虚拟机通信的桥梁, 二者之间主要通过 ConfigDrive 的方式进行通信,腾讯云的后台服务会把实例的初始化配置信息放到 CD-ROM 里面,然后挂载给实例,在实例首次启动的时候会拉起 Cloud-Init 服务,该服务就会从 CD-ROM 里面读取出实例的初始化配置信息,并对实例进行初始化操作。

Cloud-Init主要是实现对云主机hostname,/etc/hosts,DNS,软件源,NTP,密码,秘钥绑定和网络等内容的初始化。在控制台修改IP,密码以及绑定和解绑秘钥也是依靠Cloud-Init 来实现的。用户在自定义镜像后启动,经常就会出现一些基本配置异常,或者修改密码,IP不生效,一般大部分的问题都是和Cloud-Init 有关,本文将详细介绍排查Cloud-Init的相关步骤。

排查步骤

重新初始化Cloud-Init

执行以下操作看下是否有报错,任何一个步骤报错,可以根据报错信息处理。

1、登录实例

2、rm -rf /var/lib/cloud

3、cloud-init init --local

4、cloud-init init

5、cloud-init modules --mode=config

6、cloud-init modules --mode=final

查看Cloud-Init是否开机自启动

1、对于sysctl服务管理的系统查看方式:

chkconfig --list|grep cloud

查看Cloud-Init是否开机自启动

2、对于systemd服务管理的系统查看方式:

systemctl status cloud-init-local

systemctl status cloud-init

systemctl status cloud-config

systemctl status cloud-final

查看Cloud-Init日志

查看文件 /var/log/cloud-init.log,确认是否有报错

常见的内部操作导致cloud-init执行失败

1、用户卸载了cloud-init 的依赖包

问题现象

按照 “排查方案” 里面的步骤进行排查的时候,会报一个如下错误:

Cloud-Init排查报错

原因与解决方案

“pkg_resources.DistributionNotFound: xxxxx ” 表示 cloud-init的安装的依赖包被卸载了,解决方案就是安装下该依赖包,然后再重新执行“排查方案” 里面的步骤,直至全部执行完无错误为止。

安装Cloud-Init的具体方法参见文档 https://cloud.tencent.com/document/product/213/12587

2、用户修改了默认python解释器

问题现象

cloud-init服务是预安装在公共镜像内部的,cloud-init安装的时候,python解释默认使用的是python2(即:/usr/bin/python 与 /bin/python 这两个软连是链接向 python2的),当用户有业务需要的时候

可能会在实例内部把python的默认解释器改为python3(即:修改 /usr/bin/python 与 /bin/python 这两个软连使其指向 python3),如此在开机启动执行cloud-init的时候就会报一些奇奇怪怪的错误,主要体现在python2 与 python3的兼容性上。

原因与解决方案

解决方案就是,修改/usr/bin/cloud-init文件里面指定的python解释器,把 #/usr/bin/python 或 #/bin/python 改为#/usr/bin/python2.7 。 不要使用软连接,直接指向具体的解释器。然后在重新执行“排查方案” 里面的步骤,直至全部执行完无错误为止。

Windows Cloud-Init 排障思路

确认Windows Server内部 cloudbase-init 服务是正常运行

1、登录虚拟机(如果忘记密码或者因为cloudbase-init 服务异常重置密码失败了,可以通过以下工具进行密码重置)。

2、打开: 控制面板 --> 管理工具 --> 服务 --> 找到 cloudbase-init 服务 --> 右击属性如下图:

  1)查看“启动类型”是否是“自动”,如果不是改为如下图所示

查看是否为自启动

  2)查看“登录身份”是否是“本地系统账户”,如果不是改为如下图所示。

查看是否为本地用户

3、手工 启动 cloudbase-init 服务看看是否有相关报错,如果有报错需要解决(特别关注是否安装相关安全软件拦截cloudbase-init执行的相关操作)。

手动启动

4、打开“注册表”搜索并找到全部的“LocalScriptsPlugin”,确认其值是否为2,如果不是则改为2,如下图所示:

修改注册表

5、确认 CD-ROM 的加载是否被禁用,如下图应该要可以看到一个光驱设备,如果没看到的话就有可能是被禁用了需要取消禁用。

查看cd-rom是否被禁用

备注:

1) cloudbase-init 通过CD-ROM 获取数据源,来对虚拟机做初始化和重置密码等操作的。 如果禁用了CD-ROM 这些所有的操作都会失败,为了保证虚拟机正常的使用建议引导用户不要禁用CD-ROM。

2)CD-ROM 不一定要在D盘这个盘符, 如果用户对D这个盘符有特殊需求,建议引导用户通过修改把CD-ROM的盘符往后移,改为E、F等,都不会影响cloudbase-init的正常使用。

3)如果有特殊需求一定要禁用CD-ROM,需要把cloudbase-init 这个服务一起禁用掉。 要不然每次虚拟机启动的时候cloudbase-init 就会使用默认的参数初始化机器,比如虚拟机密码就会被随机分配一个,导致无法登陆。

6、如果以上多已经排查正常了,查看下cloudbase-init日志看看是否有异常:

查看日志是否有异常

从下往上慢慢翻看看是否有什么报错(重点关注出问题那次启动的时间)。

cloudbase-init 常见问题排查

问题1: 手工修改了cloudbase-init 账号密码导致cloudbase-init服务启动失败,从而使得初始化重置密码等操作失败。

背景原因: 在早期的 Windows 公有镜像里面 cloudbase-init 服务不是以 LocalSytem 服务存在的,因此会对应存在一个账号 cloudbase-init 账号,这个账号本身是安全的因为 cloudbase-init 服务在每次启动的时候都会把该账户的密码重置为一个随机数。当用户手工修改了改账号的密码的时候就会出现Windows 拉起 cloudbase-init 服务的时候用户名密码校验不通过导致 cloudbase-init 服务启动失败。

*解决方案:* 将 cloudbase-init 服务改为 LocalSystem 服务,具体操作方式详见: “如何确认子机内部的 cloudbase-init 服务是正常运行的-> 步骤2”。 备注:这个问题只针对部分存量的子机,最新的公有镜像已经全部将 cloudbase-init 服务改为 LocalSystem。

问题2:用户禁用了 cloudbase-init 服务,从而使得初始化重置密码等操作失败。

背景原因: 无。

解决方案: 将 cloudbase-init 服务启动类型改为 自动。 详见“如何确认子机内部的 cloudbase-init 服务是正常运行的-> 步骤2”。

问题3:用户安装了安全软件拦截了 cloudbase-init 服务重置密码的操作,从而使得重置密码流程返回成功但是是实际没重置上。

背景原因: 无。

解决方案: 卸载对应的安全软件, 或者在安全软件里面对 cloudbase-init 服务的相关操作加白。

问题4: 用户设置了不正确的PATH路径,导致找不到powershell命令,从而重置密码失败

** 解决方案 ** 恢复默认的PATH路径,保证path路径中包含powershell

问题5: 用户设置了过于严格的 Powershell 执行策略,导致powershell无法正常执行,从而重置密码失败

** 解决方案 ** 需要用户自行修改密码,此种情况下暂时无法支持。

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 玩转CVM之外网不通排查

    在用户使用CVM的过程中,经常会出现访问外网不通的情况。外网不通的原因从平台到系统都有可能会出现,在排查的时候涉及的方面有很多。基于此,本文提供详细的排查思路帮...

    苏欣
  • 主机迁移实践分享

    在云计算时代,不管是从IDC上云还是多云直接的迁移,都已经是常见的事宜。而在上云/迁移的方案中,也是有多种的方式能够将主机迁移到腾讯云中。

    腾讯云计算产品团队
  • 如何将源服务器数据在线迁移到腾讯云CVM

    在上云/迁云过程中,会面临客户的各种需求,如何将源服务器上的系统、应用程序等从自建机房(IDC)或云平台等源环境迁移至腾讯云,是目前常遇到的问题。腾讯云推出了在...

    DRRR
  • 【玩转腾讯云】盘点9款热门的腾讯云产品

    最近腾讯云推出了【玩转腾讯云】征文活动,为响应号召,皮皮兴致满满的来参加活动。点开腾讯云产品网页,被里边的产品惊艳到了,只要是你实名认证通过后,就可以免费试用腾...

    前端皮皮
  • 怎样用terraform管理现存资源

    通过阅读前面几篇文章,希望大家了解了基础架构及代码的基本概念,以及如何使用packer和terraform在腾讯云上进行新云资源的高效编排。但是在现实世界里,云...

    刘宇雷
  • 玩转CVM之部署Caddy

    这是一个Web Server的时代,apache与nginx争奇斗艳,在追求极致性能的路上,你追我赶,没有最高,只有更高。但这又是一个追求个性化的时代,有些We...

    苏欣
  • 玩转CVM之iPerf测试

    提起iPerf,想必大家都知道它是用来测试网络性能的命令。iPerf是美国伊利诺斯大学(University of Illinois)开发的一种开源的网络性能测...

    苏欣
  • 腾讯云服务器 CVM 相关概念

    用户6120120
  • 【玩转腾讯云】利用腾讯云硬盘给本地机房做数据备份方案

    同时支持虚拟环境和物理环境中的备份数据成功上云。覆盖主流虚拟机、数据库、邮件系统和非结构化文件。

    中云微迅
  • 如何将VRM 镜像导入 CVM 自定义镜像

    基于基础网络构建的 VDI 虚拟云桌面环境,考虑从现有环境迁移至 TCE 私有云环境,将 VDI 虚拟云桌面环境部署到 TCE 私有云环境中。客户...

    腾讯专有云TCE
  • 【玩转腾讯云】征文活动获奖名单公布

    由云+社区联合腾讯云免费体验馆及各产品团队举办【玩转腾讯云】征文活动,吸引入驻作者积极参加,非常感谢各位作者的参与。经过评委老师从产品创新性、实用性、可借鉴性、...

    云加社区
  • 玩转CVM之下载利器Transmission

    Transmission全称TransmissionBittorrent,由C开发而成,硬件资源消耗极少,界面极度精简,没有高级版与免费基础版等区别,完全免费。

    苏欣
  • 玩转CVM之搭建GRE隧道

    一种技术(协议)或者策略的两个或多个子网穿过另一种技术(协议)或者策略的网络实现互联,称之为overlay topology,这一技术是电信技术...

    苏欣
  • 玩转CVM之SSH反向代理

    大部分公司内部测试服务器是放在公司内网,一般来说,由于NAT的原因,这种访问是单向的。例如,我们借助电脑,手机登设备,可以访问百度的服务器,但是百度服务器是没法...

    苏欣
  • 玩转CVM之搭建Discuz! 论坛

    Discuz! 是全球成熟度最高、覆盖率最大的论坛网站软件系统之一,被200多万网站用户使用。本教程介绍在 LAMP(Linux + Apache + Mari...

    苏欣
  • 玩转CVM之搭建WordPress站点

    WordPress 是一款常用的搭建个人博客网站软件,该软件使用 PHP 语言开发。您可通过在腾讯云服务器的简单操作部署 WordPress,发布个人博客。

    苏欣
  • 【云存储小海曝】对象存储COS通过CSG支持文件访问,平滑接入企业应用场景。

    ? 某广电客户遇到技术挑战:如何能及时编辑已归档的媒资素材? COS归档支持高带宽及时回热,问题似乎迎刃而解,但深层问题暴露出来,客户编辑软件仅支持文件接口...

    云存储
  • 【玩转腾讯云】十.通过Web浏览器对CVM服务器运维管理

    ②选择自定义配置——计费模式为“按量付费”——地域选择“北京”——可用区选择“随机可用区”——网络选择“默认”即可

    一只特立独行的兔先生
  • 玩转CVM之tw_reuse和tw_recycle 罪与罚

    1.CVM ping测试正常,但使用TCP连接,偶尔出现超时或延时较大,而此时网络并没有发生抖动。

    苏欣

扫码关注云+社区

领取腾讯云代金券