LOADING

Follow me

【转载】将导入AWS中CentOS 7 AMI转换为“实例存储”类型的AMI
三月 25, 2017|DockerPaaS

【转载】将导入AWS中CentOS 7 AMI转换为“实例存储”类型的AMI

【转载】将导入AWS中CentOS 7 AMI转换为“实例存储”类型的AMI

之前介绍了如何将一个本地的CentOS7导入到AWS中国区并创建AMI(请翻阅历史文章)。
这个AMI的存储类型是EBS的,也就是说如果你用这个AMI启动EC2,那么只能挂载EBS硬盘。这本身也没什么问题,而且EBS还有很多优势。但是对于我们(相信也有很多其他人)的需求,EBS显得有些浪费了(主要考虑硬件成本)。
下面就要简单介绍一下我们的需求。我们基于AWS中国区搭建了一套Kubernetes集群。所有要采用这个AMI启动的EC2都是这个集群中的节点。说到这里相信大家就明白了,这种EC2是无状态的,随着系统的缩&扩容启动和终止,这也是它的整个生命周期。因此它不需要EBS持久化存储,而是配合EC2的user-data的初始化脚本做自动启动和终止。
因此,我们就需要将这个AMI转换为实例存储类型的AMI,这样就可以直接使用EC2提供的实例存储了(例如c3.2xlarge类型的EC2提供两个80GB的实例存储分区)。
因为CentOS7开始系统默认使用grub2,而不是grub了,所有网上找到的教程都建议使用ec2-bundle-vol,而这个不支持grub2。
经历了很多失败的尝试,加上AWS的技术支持的帮助,我们顺利成功了,下面直接分享过程。

用之前的AMI启动一个EBS类型的EC2,添加存储的时候不要勾选“终止时删除”,大小设置为8GB。等待启动后将这个EC2终止。目的是使得这个EC2创建的EBS卷in-available。 用AWS的默认镜像启动一个EBS类型的EC2,启动的时候根分区设置的大一点,差不多20G就够了。 启动后将刚刚那个in-available的EBS卷连接到这个EC2。 后面的操作都在这个EC2中:  mount /dev/xvdf /mnt #这里这个/dev/xvdf就是后来连接的那个EBS卷 rm -f /mnt/home/centos/.bash_history rm -f /mnt/home/centos/.ssh/authorized_keys rm -f /mnt/root/.bash_history rm -f /mnt/tmp/* umount /mnt/  dd if=/dev/xvdf of=/mnt/root.img bs=1M  创建好一个IAM账号,赋予EC2与S3全部权限,并且配置好x509证书,保存好访问密钥。  ec2-bundle-image -c ./certificate.pem(x509证书) -k ./private-key.pem(x509key) -u 000000000(你的aws账号的数字ID) -i /mnt/root.img --ec2cert /opt/aws/amitools/ec2/etc/ec2/amitools/cert-ec2-cn-north-1.pem --block-device-mapping ami=sda1,root=/dev/sda1  等待成功后会看到你这个EC2上的/tmp目录下多了很多文件和一个root.img.manifest.xml  去S3创建一个存储桶,假设名字叫做:centos7-ami-bucket  ec2-upload-bundle -b centos7-ami-bucket -a 访问密钥ID -s 私有访问密钥 -m /tmp/root.img.manifest.xml --region cn-north-1  等待成功后你刚刚创建的那些文件就都上传到这个S3中去了。下面最后一步:  ec2-register wxhost-ami/root.img.manifest.xml -n CentOS7-S3-Store --aws-access-key 访问密钥ID --aws-secret-key 私有访问密钥 --region cn-north-1 --virtualization-type hvm  成功以后会直接显示一个AMI的ID,过一会儿就能在web console里看到了。
no comments
Share

发表评论