前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >玩转CVM之Cloud-Init排障

玩转CVM之Cloud-Init排障

原创
作者头像
苏欣
发布2019-07-16 18:37:09
6.3K0
发布2019-07-16 18:37:09
举报

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是否开机自启动
查看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排查报错
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是否被禁用
查看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无法正常执行,从而重置密码失败

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

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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 排查步骤
    • 重新初始化Cloud-Init
      • 查看Cloud-Init是否开机自启动
        • 查看Cloud-Init日志
        • 常见的内部操作导致cloud-init执行失败
        • Windows Cloud-Init 排障思路
          • 确认Windows Server内部 cloudbase-init 服务是正常运行
            • cloudbase-init 常见问题排查
            相关产品与服务
            云服务器
            云服务器(Cloud Virtual Machine,CVM)提供安全可靠的弹性计算服务。 您可以实时扩展或缩减计算资源,适应变化的业务需求,并只需按实际使用的资源计费。使用 CVM 可以极大降低您的软硬件采购成本,简化 IT 运维工作。
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档