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. win10 配置git 环境变量

    'git' 不是内部或外部命令,也不是可运行的程序 或批处理文件. 解决办法: 去百度大概搜了一下,是因为没有配置Git环境变量的原因,但是没有具体的解决步骤,特此记录一下. 右键查看git安装目录: ...

  2. 查找k8s版jenkins-slave官方镜像

    官方镜像非常多,如果查找某个单词没有找到的话,可以换一个词查找,总之各种非常的多,带maven.djk.kubectl工具的镜像,都去试试吧, 从下面查找结果中可以看到,还有centos版的jenki ...

  3. 【Shell常用命令一】echo bash alias history 输出重定向 快捷键

    echo输出命令 echo [选项] [输出内容] -e : 支持反斜线控制的字符转换 赋予执行权限 直接运行 chmond 755 hello.sh ./hello.sh 通过bash调用执行脚本 ...

  4. .net core在Linux本地化Localization的一次填坑

    使用ABP框架开发.net core程序已经有一段时间了,因为之前部署在windows服务器上,使用一直很正常.自从前段时间切换服务器上了Linux的Centos服务器,发现之前中文的语言变成了英文, ...

  5. QT/C++ 类型转换

    "轻轻地我走了,正如我轻轻地来,我挥一挥衣袖,不带走一片云彩"------阿魔 1) int转为QString: QString::number(int) 2) std::stri ...

  6. eslint 验证vue文件 报错 unexpected token =解决方法

    解决方案:.eslintrc更改文件配置 { "extends": [ 'standard' ], "parserOptions": { "parse ...

  7. python 之 网络编程(基于TCP协议的套接字通信操作)

    第八章网络编程 8.1 基于TCP协议的套接字通信 服务端套接字函数 s.bind() 绑定(主机,端口号)到套接字 s.listen() 开始TCP监听 s.accept() 被动接受TCP客户的连 ...

  8. python中将已有链接的视频进行下载

    使用python爬取视频网站时,会得到一系列的视频链接,比如MP4文件.得到视频文件之后需要对视频进行下载,本文写出下载视频文件的函数. 首先导入requests库,安装库使用pip install ...

  9. PHP生成随机单词

    class GenRandWords { private static $_alphas = [ 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', ' ...

  10. SAS学习笔记61 set和union的区别

    好久没发博客了,水一篇,直接来代码 set的结果如下 union的结果如下