为openstack制作CoreOS虚拟机镜像(基于CoreOS官方提供镜像)
OpenStack源码交流群: 538850354
1.下载CoreOS镜像(633.1.0版本)
CoreOS官网已经有openstack使用的虚拟机镜像,可以直接下载,然后进行修改
http://stable.release.core-os.net/amd64-usr/current/coreos_production_openstack_image.img.bz2
#如果需要使用iso文件制作镜像,可以参考我的博客:http://www.isjian.com/2014/12/iso_openstack_coreos_images/
2.guestfish修改CoreOS镜像
2.1 安装guestfish工具
yum install libguestfs-tools-c-1.20.-.el6.x86_64
2.2 使用guestfish挂载CoreOS镜像
guestfish -a coreos_production_openstack_image.img -i #挂载相应分区
mount /dev/sda9 /
mkdir /cloudinit
mount /dev/sda6 /cloudinit #cloud-config.yml是系统提供的开机配置文件,我们可以把需要开机执行的服务,或者对系统的修改定制以一定语法写入这个文件(下文中设置sshd),如果此文件语法没有错误,CoreOS会在每次开机时执行它
#cloujd-config.yml位于系统的/usr/share/oem目录下,sda6分区上, 本次是临时挂载在/cloudinit目录下
2.3 开启root账户
默认情况下,CoreOS禁用root账户,所以需要修改/etc/shadow文件,修改root用户那行,把第二字段置为空即可

2.4 设置sshd
#编辑/cloudinit/cloud-init.yml文件,设置sshd_config文件,允许root用户登录,允许密码认证
#cloud-config
coreos:
units:
- name: user-configdrive.service
mask: yes
- name: user-configvirtfs.service
mask: yes
write_files:
- path: /etc/ssh/sshd_config
permissions:
owner: root:root
content: |
UsePrivilegeSeparation sandbox
Subsystem sftp internal-sftp
PermitRootLogin yes
AllowUsers root
PasswordAuthentication yes
ChallengeResponseAuthentication no
3 启动虚拟机
上面步骤使用guestfish工具修改了CoreOS镜像,现在可以使用这个镜像启动虚拟机,使用root账号无需密码登录系统(上面/etc/shadow中设置)
- 如果你使用libvirt方式管理虚拟机,那么需要定义xml文件,然后使用virsh命令启动虚拟机
- 如果直接使用命令行启动虚拟机,那么使用 qemu-kvm -m 1024 coreos_production_openstack_image.img 启动
4 设置cloudinit.sh脚本
4.1 新建/etc/cloud-init.sh脚本
#需要编写一个cloud-init.sh脚本,此脚本在系统开机时从metadata服务器获取数据, 完成修改主机名,修改root密码,ssh密钥注入
#!/bin/bash
#cloud-init.sh
#author:xxx
#date:-- #get the env
export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/opt/bin STATUS_CODE=`curl -I -m -o /dev/null -s -w %{http_code} http://169.254.169.254/latest`
if [ ! "$STATUS_CODE" -eq "" ]; then
/bin/sleep
fi # set the root password using user data
STATUS_CODE=`curl -I -m -o /dev/null -s -w %{http_code} http://169.254.169.254/latest/user-data`
if [ "$STATUS_CODE" -eq "" ]; then
PASS=`curl -m -s http://169.254.169.254/latest/user-data | awk -F '"' '{for(i=1;i<=NF;i++){if($i ~ /password/) print $(i+2)}}'`
if [ "$PASS" != " " ]; then
/usr/bin/echo "root:${PASS}" > tmp.txt
/usr/sbin/chpasswd < tmp.txt
rm -f tmp.txt
fi
fi # set the hostname using the meta-data service
STATUS_CODE=`curl -I -m -o /dev/null -s -w %{http_code} http://169.254.169.254/latest/meta-data/hostname`
if [ "$STATUS_CODE" -eq "" ]; then
curl -f http://169.254.169.254/latest/meta-data/hostname > /tmp/metadata-hostname 2>/dev/null
if [ $? -eq ]; then
TEMP_HOST=`cat /tmp/metadata-hostname | awk -F '.novalocal' '{print $1}'`
/usr/bin/hostnamectl set-hostname ${TEMP_HOST}
/usr/bin/hostname $TEMP_HOST
rm -f /tmp/metadata-hostname
fi
fi # get the user ssh key using the meta-data service
STATUS_CODE=`curl -I -m -o /dev/null -s -w %{http_code} http://169.254.169.254/latest/meta-data/public-keys/0/openssh-key`
if [ "$STATUS_CODE" -eq "" ]; then
mkdir -p /root/.ssh
/usr/bin/echo >> /root/.ssh/authorized_keys
curl -m -s http://169.254.169.254/latest/meta-data/public-keys/0/openssh-key | grep 'ssh-rsa' >> /root/.ssh/authorized_keys
chmod /root/.ssh
chmod /root/.ssh/authorized_keys
fi
4.2 设置开机启动
新建一个配置单元cloudinit.service, 此配置单元用来在开机时执行cloud-init.sh脚本
#cat /etc/systemd/system/cloudinit.service
[Unit]
Description=OpenStack nova
Requires=coreos-setup-environment.service
After=coreos-setup-environment.service
Before=user-config.target
[Service]
Type=oneshot
RemainAfterExit=yes
EnvironmentFile=-/etc/environment
ExecStart=/usr/bin/bash /etc/cloud-init.sh #执行的脚本文件cloud-init.sh
[Install]
WantedBy=multi-user.target
4.3 设置cloudinit.service开机启动
#开机启动
systemctl enable cloudinit.service
#检测是否生效
systemctl is-enabled cloudinit
5 设置网络
5.1 使用dhcp方式
在/etc/systemd/network/目录下新建eth0.network文件,文件内容如下
[Match]
Name=eth0
[Network]
DHCP=yes
5.2 使用固定IP方式
cat eth0.network
[Match]
Name=eth0
[Network]
Address=192.168.1.15/
Gateway=192.168.1.1
DNS=223.5.5.5
6 设置时间同步,时区
6.1设置ntpd
#查看ntpd状态, 启用
systemctl status ntpd
systemctl enable ntpd
6.2修改ntp time servers
#ntp servers 可以通过修改/etc/ntp.conf配置文件,格式如下
server .pool.example.com
server .pool.example.com
6.3 设置时区
#查看当前状态
timedatectl status
#查看可用时区
timedatectl list-timezones
#修改时区
timedatectl set-timezone Asia/ShangHai
#再次查看当前状态
timedatectl status
为openstack制作CoreOS虚拟机镜像(基于CoreOS官方提供镜像)的更多相关文章
- Dockerfile简介及基于centos7的jdk镜像制作
Dockerfile简介 dockerfile 是一个文本格式的配置文件, 用户可以使用 Dockerfile 来快速创建自定义的镜像, 另外,使用Dockerfile去构建镜像好比使用pom去构建m ...
- 使用Dockerfile文件制作centos6.8基础镜像,基于centos基础镜像的ssh远程登录镜像,jdk1.8镜像,tomcat镜像,elasticsearch镜像等等
一.首先制作一个centos6.8的裸机镜像 创建一个干净的目录: [root@docker centos6.]# ls c68-docker.tar.xz Dockerfile Dockerfile ...
- 基于url-to-pdf-api构建docker镜像,制作一个网页另存服务
基于url-to-pdf-api构建docker镜像,制作一个网页另存服务 业务背景: 需要根据一个url路径打印这个网页的内容 解决方案: 1.使用wkhtml2pdf 2.使用puppeteer ...
- openstack 制作镜像以及windows向Linux中通过xshell传文件
慢慢的也要把openstack一些相关的笔记整理上来了 之前由于主要是在看horizon 实验室搭建的openstack平台并没有怎么实际的用起来,前几天别的同学要用来测试大数据的相关服务,才把这些内 ...
- OpenStack Nova 高性能虚拟机之 NUMA 架构亲和
目录 文章目录 目录 写在前面 计算平台体系结构 SMP 对称多处理结构 NUMA 非统一内存访问结构 MPP 大规模并行处理结构 Linux 上的 NUMA 基本对象概念 NUMA 调度策略 获取宿 ...
- openstack创建一个虚拟机的过程
为什要用云? 一.简单的说就是对资源更加合理的分配,使用,比如硬件的数量,带宽等等这些,因为你不能机器买来不需要了再卖掉(当然也可以),带宽跟机房签合同得来一年的,中间不够了也不能加,超了也不退钱 ...
- OpenStack Nova 高性能虚拟机之 CPU 绑定
目录 文章目录 目录 前文列表 KVM KVM 的功能列表 KVM 工具集 KVM 虚拟机的本质是什么 vCPU 的调度与性能问题 Nova 支持的 vCPU 绑定 vcpu\_pin\_set 配置 ...
- VMware 接入 Openstack — 使用 Openstack 创建 vCenter 虚拟机
目录 目录 软件环境 前言 Openstack 接口驱动 使用 KVM 在 Compute Node 上创建虚拟机的流程 使用 VCDirver 在 vCenter 上创建虚拟机的流程 配置 vCen ...
- 微服务架构 - 基于Harbor构建本地镜像仓库
之前写过<搭建docker本地镜像仓库并提供权限校验及UI界面>文章,然后有同仁评论道这样做太复杂了,如果Harbor来搭建会更简单同时功能也更强大.于是抽时间研究了基于Harbor构建本 ...
随机推荐
- 伟程君解决端口被占用问题(接口jmeter 本地端口被占用完了,jmeter报错的问题)(亲测是可以的)
1.在目录下创建文件local.conf(没有就创建目录和文件) touch /etc/sysctl.d/local.conf mkdir(创建文件夹) touch(创建文件) 2.往local.co ...
- LODOP表格table简短问答及相关博文
LODOP打印表格超文本输出表格:ADD_PRINT_HTML.ADD_PRINT_HTM.ADD_PRINT_TABLE.ADD_PRINT_TBURL打印表格带页头页尾 参考样例15 http:/ ...
- easyui datagrid 中序列化后的日期格式化
1.在easyui datagrid 中序列化后的日期显示为:/Date(1433377800000)/ 2.格式化后的显示为: 2015-06-04 08:30:00 3.使用代码如下: 3.1. ...
- 【c++基础】C与C++接口相互调用
前言 编译程序的时候出现错误,入口程序如果是cpp文件可以编译成功,如果是c程序则出错.一般这个问题是c与c++之间接口相互调用出现的问题. 出现的错误是undefined reference to ...
- [LeetCode] 237. Delete Node in a Linked List 删除链表的节点
Write a function to delete a node (except the tail) in a singly linked list, given only access to th ...
- Markdown 测试用例
标题 # 一级标题 ## 二级标题 ### 三级标题 #### 四级标题 ##### 五级标题 ###### 六级标题 一级标题 二级标题 三级标题 四级标题 五级标题 六级标题 字体 *斜体文本* ...
- Windows下mysql安装配置问题
下载最新版的mysql: https://dev.mysql.com/downloads/mysql/ 下载完成后解压打开安装包如下 打开cmd以管理员身份运行(一定要以管理员身份运行) 然后输入命令 ...
- Python-10-迭代器
一.定义 1. 迭代的概念 迭代器即迭代的工具,那什么是迭代呢?迭代是一个重复的过程,每次重复即一次迭代,并且每次迭代的结果都是下一次迭代的初始值 while True: #只是单纯地重复,因而不是迭 ...
- day31——recv工作原理、高大上版解决粘包方式、基于UDP协议的socket通信
day31 recv工作原理 源码解释: Receive up to buffersize bytes from the socket. 接收来自socket缓冲区的字节数据, For the opt ...
- JQuery 总结篇
一.基础知识 1.jq的使用 在script块中: 方式1:$(function(){ $("[使用选择器] ...