ECS镜像(三)UserData最佳实践及Troubleshooting

本文涉及的产品
云服务器 ECS,u1 2核4GB 3个月
云服务器 ECS,u1 4核8GB 1个月
云服务器 ECS,每月免费额度200元 3个月
简介: 前言 前文在介绍镜像生态的时候对用户数据即UserData(下文将统一使用UserData)进行了简短对介绍,UserData的价值主要在于ECS启动时做一些个性化配置或者数据下发等。UserData在云产品和终端用户都有着非常广泛的应用场景,同时在实践中也会遇到一些比较棘手的问题,比如UserData数据超过16k怎么办?UserData没有执行或者执行失败了怎么排查?本文将从两个方面进行讲述: UserData典型实践场景,比如执行脚本,Cloud-config等。

前言

前文在介绍镜像生态的时候对用户数据即UserData(下文将统一使用UserData)进行了简短对介绍,UserData的价值主要在于ECS启动时做一些个性化配置或者数据下发等。UserData在云产品和终端用户都有着非常广泛的应用场景,同时在实践中也会遇到一些比较棘手的问题,比如UserData数据超过16k怎么办?UserData没有执行或者执行失败了怎么排查?
本文将从两个方面进行讲述:

  1. UserData典型实践场景,比如执行脚本,Cloud-config等。
  2. UserData典型问题排查,比如查看UserData内容及UserData执行日志,分析Cloud-Init执行日志等。

术语表

UserData:用户数据,是阿里云 ECS 提供的一种自定义实例启动行为及传入数据的功能。
Cloud-Init:开源项目,本质上是一系列python脚本及组件用来在云主机启动时配置ECS。

一、最佳实践

Script

最典型的使用场景,通常用于在ECS启动时通过UserData来初始化环境。

举个例子,我们通过UserData在ECS启动时配置 DNS、yum、NTP等。

#!/bin/sh
# Modify DNS
echo "nameserver 8.8.8.8" | tee /etc/resolv.conf
# Modify yum repo and update
rm -rf /etc/yum.repos.d/*
touch myrepo.repo
echo "[base]" | tee /etc/yum.repos.d/myrepo.repo
echo "name=myrepo" | tee -a /etc/yum.repos.d/myrepo.repo
echo "baseurl=http://mirror.centos.org/centos" | tee -a /etc/yum.repos.d/myrepo.repo
echo "gpgcheck=0" | tee -a /etc/yum.repos.d/myrepo.repo
echo "enabled=1" | tee -a /etc/yum.repos.d/myrepo.repo
yum update -y
# Modify NTP Server
echo "server ntp1.aliyun.com" | tee /etc/ntp.conf
systemctl restart ntpd.services

登录ecs进行验证:

image.png | left | 747x683

Cloud Config

是UserData格式里面最简单,最友好的一种,通常我们可以使用它来配置主机名,sshkey,安装软件包等。
举个例子,用Cloud Config配置主机名:

#cloud-config
hostname: yzq

登录ECS,可以看到主机名已经配置成功。

image.png | left | 747x201

Cloud Config的特性非常丰富,它以一种配置的形式完成非常多实例初始化工作,更多Cloud Config 例子可以参考 Cloud Config Examples

Include File

上文提到了UserData一种简单常用的方式是直接指定脚本下发,如果有多个脚本已经部署在了公网/局域网这种是不是需要把脚本内容合并后作为整体传入呢?

不用这么麻烦,我们有更优雅的解决方案,这就是Include File的用法,Include File允许指定URL列表,Cloud-Init会获取File列表并且将其作为一个脚本执行,__脚本支持gzip压缩__。

举个例子,将一个经过gzip压缩过的脚本放在oss上,ECS时将下载并解压文件同时执行脚本。

#include
http://yzq-test.oss-cn-shanghai.aliyuncs.com/demo.sh.gz?Expires=1524773334&OSSAccessKeyId=TMP.AQG1m7buBorVTB8qgnhD8L6TI8SQbrZAoQf_OvUGBSb3WxZLO765vZyp-xzuMC4CFQCnLZG0pwrPJiksdtjeUz1vwYIZswIVAMl88BlMJTt0wnQuMeh4iTiRBp84&Signature=cmRTL3LVkPn2FivhwMiK7q34Spk%3D

其它

前文提到的三种是比较常用的格式,同时Cloud-Init还支持 Upstart Job、Cloud Boothook以及自定义格式等多做方式,有兴趣的同学可以直接查看官方社区了解。

实践建议

  • 优先使用Cloud Config及Script的方式。
  • 不要使用UserData传递敏感数据,如密码,证书等。

二、问题排查

排查流程

  1. 校验UserData是否与传入的匹配。

curl 100.100.100.200/latest/user-data 将返回Cloud-Init执行的UserData数据。

  1. 查看机器上UserData数据是否匹配。

/var/lib/cloud/instance 目录时Cloud-Init的应用目录,该目录下有Cloud-Init相关的数据包括UserData。
UserData的目录通常在/var/lib/cloud/instance/user-data.txt

  1. 机器上执行脚本,判断是否是脚本内容问题。
  2. 查看Cloud-Init执行日志找问题。

/var/log/cloud-init*log 是Cloud-Init的日志目录,所有Cloud-Init相关的日志包括UserData都可以在里面查到,搜索关键字error/ERROR/userdata等进行过滤。

  1. 删除/var/lib/cloud目录重启ECS,观察UserData是否配置正常。

排查技巧

  • 善用Cloud-Init目录,Cloud-Init文件目录包含了非常多的数据包括user-data、cloud-config等,通过查看该目录下的文件内容可以判断数据是否与预期匹配,做初步判断。

image.png | left | 747x428

  • 善用Cloud-Init日志, 通过分析 /var/log/cloudinit.log 定位问题。

FAQ

UserData超过16k怎么解决?

__Q:__Cloud-Init官方社区闲置了UserData的大小是16k,那么超过16k的数据是不是无法通过UserData方式传入ECS呢?

__A: __上文我们提到了Include File的方式可以从URL执行脚本,同时该脚本是可以通过gzip压缩过的,那么通过这种方式是可以解决大文件传输问题的。

UserData如何重新执行?

Q: UserData执行过下次重启便不会执行,如果在排查问题或者有特殊需求需要再次重启该怎么办?

A: 删除 /var/lib/cloud, 重启机器。

参考文献

相关实践学习
ECS云服务器新手上路
本实验会自动创建一台ECS实例。首先,远程登陆ECS实例,并部署应用。然后,登陆管理控制台,并对这台ECS实例进行管理操作。
7天玩转云服务器
云服务器ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,可降低 IT 成本,提升运维效率。本课程手把手带你了解ECS、掌握基本操作、动手实操快照管理、镜像管理等。了解产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
23天前
|
缓存 监控 Java
Java Socket编程最佳实践:优化客户端-服务器通信性能
【6月更文挑战第21天】Java Socket编程优化涉及识别性能瓶颈,如网络延迟和CPU计算。使用非阻塞I/O(NIO)和多路复用技术提升并发处理能力,减少线程上下文切换。缓存利用可减少I/O操作,异步I/O(AIO)进一步提高效率。持续监控系统性能是关键。通过实践这些策略,开发者能构建高效稳定的通信系统。
|
2月前
|
弹性计算 数据安全/隐私保护
【阿里云服务器镜像】雾锁王国(Enshrouded)自动部署教程
本文将为您提供极简部署雾锁王国服务器的指引,「仅需轻点三次鼠标,即可完成开服」,和自己的朋友一起畅玩雾锁王国。雾锁王国(Enshrouded)作为一款热门多人在线游戏,为了给玩家提供稳定、流畅的联机体验,阿里云提供了高效便捷的快速部署解决方案,本文将为大家分享阿里云一键部署雾锁王国联机服务器详细教程。
 【阿里云服务器镜像】雾锁王国(Enshrouded)自动部署教程
|
2月前
|
弹性计算 安全 关系型数据库
ECS实例问题之更新镜像后实例启动失败如何解决
ECS(Elastic Compute Service,弹性计算服务)是云计算服务提供商提供的一种基础云服务,允许用户在云端获取和配置虚拟服务器。以下是ECS服务使用中的一些常见问题及其解答的合集:
|
2月前
|
弹性计算 运维 Java
最佳实践:阿里云倚天ECS在千寻位置时空智能服务的规模化应用
阿里云、平头哥及安谋科技联合举办的飞天技术沙龙探讨了倚天Arm架构在业务创新中的应用。活动中,千寻位置运维专家分享了将核心业务迁移到倚天处理器ECS实例的成功案例,强调了倚天处理器的高能效比和降本增效优势。迁移过程涉及操作系统、CICD系统和监控系统的适配,以及业务系统的性能测试。目前,千寻已迁移了上千台ECS实例到倚天处理器,实现了成本和效率的显著提升。未来计划继续扩展倚天处理器在核心业务和K8S中的应用。
|
18天前
|
网络协议 安全 数据挖掘
F5《企业DNS建设白皮书》中的DNS解析服务器最佳实践
F5《企业DNS建设白皮书》中的DNS解析服务器最佳实践
19 0
F5《企业DNS建设白皮书》中的DNS解析服务器最佳实践
|
2月前
|
弹性计算 运维 安全
最佳实践分享,如何体系化提升ECS安全性
阿里云弹性计算团队十三位产品专家和技术专家共同分享云上运维深度实践,详细阐述如何利用CloudOps工具实现运维提效、弹性降本。
129040 88
最佳实践分享,如何体系化提升ECS安全性
|
2月前
|
弹性计算 Java 关系型数据库
最佳实践:阿里云倚天ECS在千寻位置时空智能服务的规模化应用
当前,千寻已有上千台倚天ECS实例在支撑线上核心业务。
|
27天前
|
弹性计算 安全 Linux
云服务器 ECS产品使用问题之自制镜像如何下载
云服务器ECS(Elastic Compute Service)是各大云服务商阿里云提供的一种基础云计算服务,它允许用户租用云端计算资源来部署和运行各种应用程序。以下是一个关于如何使用ECS产品的综合指南。
|
2月前
|
存储 固态存储 NoSQL
阿里云企业级云服务器实例、云盘、带宽、镜像选择参考
对于许多初次接触云服务的用户来说,在购买阿里云服务器的时候,并不清楚应该如何选择适合自己的实例规格、云盘、带宽和镜像等配置,因为很多用户以往只用过物理服务器,对于阿里云企业级服务器的实例规格、云盘和带宽等不知道如何选择,本文为大家简单介绍一下阿里云企业级服务器应该如何选择这些参数。
阿里云企业级云服务器实例、云盘、带宽、镜像选择参考
|
2月前
|
存储 弹性计算 安全
阿里云服务器镜像类型怎么选?公共镜像、自定义镜像等镜像区别及选择参考
阿里云服务器镜像包括公共镜像、云市场镜像、自定义镜像、社区镜像、共享镜像,镜像可以满足各类型用户对于应用环境的快速部署、灵活管理的需求。不过有的新手用户并不知道这些镜像之间的区别,因此不知道应该怎么选择,本文为大家介绍一下阿里云服务器各个镜像之间的区别及选择参考。
阿里云服务器镜像类型怎么选?公共镜像、自定义镜像等镜像区别及选择参考

相关产品

  • 云服务器 ECS