歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> 為OpenStack制作CoreOS虛擬機鏡像(基於CoreOS官方提供鏡像)

為OpenStack制作CoreOS虛擬機鏡像(基於CoreOS官方提供鏡像)

日期:2017/2/28 14:01:52   编辑:Linux教程

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.linuxidc.com/Linux/2015-05/117025.htm

2.guestfish修改CoreOS鏡像

2.1 安裝guestfish工具

yum install libguestfs-tools-c-1.20.11-11.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: 0600
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:2015-4-15

#get the env
export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/opt/bin

STATUS_CODE=`curl -I -m 10 -o /dev/null -s -w %{http_code} http://169.254.169.254/latest`
if [ ! "$STATUS_CODE" -eq "200" ]; then
/bin/sleep 3
fi

# set the root password using user data
STATUS_CODE=`curl -I -m 10 -o /dev/null -s -w %{http_code} http://169.254.169.254/latest/user-data`
if [ "$STATUS_CODE" -eq "200" ]; then
PASS=`curl -m 10 -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 10 -o /dev/null -s -w %{http_code} http://169.254.169.254/latest/meta-data/hostname`
if [ "$STATUS_CODE" -eq "200" ]; then
curl -f http://169.254.169.254/latest/meta-data/hostname > /tmp/metadata-hostname 2>/dev/null
if [ $? -eq 0 ]; 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 10 -o /dev/null -s -w %{http_code} http://169.254.169.254/latest/meta-data/public-keys/0/openssh-key`
if [ "$STATUS_CODE" -eq "200" ]; then
mkdir -p /root/.ssh
/usr/bin/echo >> /root/.ssh/authorized_keys
curl -m 10 -s http://169.254.169.254/latest/meta-data/public-keys/0/openssh-key | grep 'ssh-rsa' >> /root/.ssh/authorized_keys
chmod 0700 /root/.ssh
chmod 0600 /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/24
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 0.pool.example.com
server 1.pool.example.com

6.3 設置時區

#查看當前狀態
timedatectl status
#查看可用時區
timedatectl list-timezones
#修改為上海市區
timedatectl set-timezone Asia/ShangHai
#再次查看當前狀態
timedatectl status

在Ubuntu 12.10 上安裝部署Openstack http://www.linuxidc.com/Linux/2013-08/88184.htm

Ubuntu 12.04 OpenStack Swift單節點部署手冊 http://www.linuxidc.com/Linux/2013-08/88182.htm

OpenStack雲計算快速入門教程 http://www.linuxidc.com/Linux/2013-08/88186.htm

企業部署OpenStack:該做與不該做的事 http://www.linuxidc.com/Linux/2013-09/90428.htm

CentOS 6.5 x64bit 快速安裝OpenStack http://www.linuxidc.com/Linux/2014-06/103775.htm

Copyright © Linux教程網 All Rights Reserved