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官方提供镜像)的更多相关文章

  1. Dockerfile简介及基于centos7的jdk镜像制作

    Dockerfile简介 dockerfile 是一个文本格式的配置文件, 用户可以使用 Dockerfile 来快速创建自定义的镜像, 另外,使用Dockerfile去构建镜像好比使用pom去构建m ...

  2. 使用Dockerfile文件制作centos6.8基础镜像,基于centos基础镜像的ssh远程登录镜像,jdk1.8镜像,tomcat镜像,elasticsearch镜像等等

    一.首先制作一个centos6.8的裸机镜像 创建一个干净的目录: [root@docker centos6.]# ls c68-docker.tar.xz Dockerfile Dockerfile ...

  3. 基于url-to-pdf-api构建docker镜像,制作一个网页另存服务

    基于url-to-pdf-api构建docker镜像,制作一个网页另存服务 业务背景: 需要根据一个url路径打印这个网页的内容 解决方案: 1.使用wkhtml2pdf 2.使用puppeteer ...

  4. openstack 制作镜像以及windows向Linux中通过xshell传文件

    慢慢的也要把openstack一些相关的笔记整理上来了 之前由于主要是在看horizon 实验室搭建的openstack平台并没有怎么实际的用起来,前几天别的同学要用来测试大数据的相关服务,才把这些内 ...

  5. OpenStack Nova 高性能虚拟机之 NUMA 架构亲和

    目录 文章目录 目录 写在前面 计算平台体系结构 SMP 对称多处理结构 NUMA 非统一内存访问结构 MPP 大规模并行处理结构 Linux 上的 NUMA 基本对象概念 NUMA 调度策略 获取宿 ...

  6. openstack创建一个虚拟机的过程

      为什要用云? 一.简单的说就是对资源更加合理的分配,使用,比如硬件的数量,带宽等等这些,因为你不能机器买来不需要了再卖掉(当然也可以),带宽跟机房签合同得来一年的,中间不够了也不能加,超了也不退钱 ...

  7. OpenStack Nova 高性能虚拟机之 CPU 绑定

    目录 文章目录 目录 前文列表 KVM KVM 的功能列表 KVM 工具集 KVM 虚拟机的本质是什么 vCPU 的调度与性能问题 Nova 支持的 vCPU 绑定 vcpu\_pin\_set 配置 ...

  8. VMware 接入 Openstack — 使用 Openstack 创建 vCenter 虚拟机

    目录 目录 软件环境 前言 Openstack 接口驱动 使用 KVM 在 Compute Node 上创建虚拟机的流程 使用 VCDirver 在 vCenter 上创建虚拟机的流程 配置 vCen ...

  9. 微服务架构 - 基于Harbor构建本地镜像仓库

    之前写过<搭建docker本地镜像仓库并提供权限校验及UI界面>文章,然后有同仁评论道这样做太复杂了,如果Harbor来搭建会更简单同时功能也更强大.于是抽时间研究了基于Harbor构建本 ...

随机推荐

  1. pytorch中调用C进行扩展

    pytorch中调用C进行扩展,使得某些功能在CPU上运行更快: 第一步:编写头文件 /* src/my_lib.h */ int my_lib_add_forward(THFloatTensor * ...

  2. 通过Onvif设备探索获取EasyNVR网页无插件播放所需要的摄像机硬盘录像机NVR的RTSP地址

    想实现网络监控摄像头进行视频直播的朋友门应该知道,方法其实非常简单,你不需要使用支持直播的网络摄像机,只需要经过一套流媒体服务器将监控摄像头的RTSP视频流转为RTMP\HLS\HTTP-FLV视频流 ...

  3. Vue 引入 .md 文件,解析markdown语法

    module.exports = { chainWebpack: config => { config.module .rule('md') .test(/\.md$/) .use('html- ...

  4. notepad++删除某关键字所在的行内容

    例如,我要删除zhao这个字符串所在的行 打开notepad++的ctrl+f窗口 点击替换选项,在查找目标输入^.*bp.*$ 其中替换为那里留空,查找模式选择正则表达式,建议也勾选匹配大小写,同时 ...

  5. maven dependency中provided和compile的区别

    重点:这个项目打成war包时,scope=provided的jar包,不会出现在WEB-INFO/lib目录下,而scope=compile的jar包,会放到WEB-INFO/lib目录 scope= ...

  6. c++基础(三)——容器

    1. 顺序容器 vector和string将元素保存在连续的内存空间中.由于元素是连续存储的,由元素的下标来计算其地址是非常快速的.但是在这两种容器的中间位置添加或删除元素就非常耗时 list和for ...

  7. 前端 html篇

    web开发本质: html是一个标准,规定了大家怎么写网页 1.浏览器输入网址回车发生了什么事 1. 浏览器 给服务端 发送了一个消息2. 服务端拿到消息3. 服务端返回消息4. 浏览器展示页面 se ...

  8. 14.Python略有小成(自由模块)

    Python(模块) 一.模块定义与分类 ​ 我们说一个函数就是一个功能,那么把一些常用的函数放在一个py文件中,这个文件就称之为模块,模块,就是一些列常用功能的集合体,模块就是文件,存放一堆常用的函 ...

  9. CORS和CSRF

    CORS和CSRF 什么是CORS?CORS是一个W3C标准,全称是"跨域资源共享",他允许浏览器向夸源服务器,发出XMLHTTPRequest请求,从而克服了AJAX只能同源使用 ...

  10. nRF24L01P数据传输速率

    项目要用nRF24L01P做语音的传输,数据量可想而知. 发送端按照8KHz/s采样率,每次采样双声道,16位深度(2Bytes). 数据量算一下就是8000x2x2=32000(Bytes) nRF ...