1. 程式人生 > >OpenStack Nova:虛擬機器初始化user-data & Cloud-init

OpenStack Nova:虛擬機器初始化user-data & Cloud-init

    有的時候我們希望在boot虛擬機器的時候能夠對虛擬機器做些配置, 比如配置網路, 寫入檔案, 下載一些包並安裝等等, openstack中提供了實現這些的方法, 就是user-data 和Cloud-init。

user-data

    在說user-data之前, 要先說下nova 的metadata api, 所謂metadata就是關於虛擬機器的元資料,提供這個api主要是為了能夠在虛擬機器啟動的時候能夠實現一些資訊的初始化。

    在虛擬機器內部使用curl命令, 可以得到如下結果,  它們是表示不同版本, 每個版本中包含meta-data和user-data, meta-data 中是包括虛擬機器的各種基本資訊, 如ip,磁碟,記憶體,hostname,public key, 安全組等設定, user-data主要是做一些引數設定, 和一些指令碼, 如python指令碼, 當用heat boot虛擬機器,可以看到這樣的user-data例子, user-data是能夠實現instance個性化定製的基礎, 它書寫的格式有很多, 詳細看cloud-init章節。

$ curl 169.254.169.254
1.0
2007-01-19
2007-03-01
2007-08-29
2007-10-10
2007-12-15
2008-02-01
2008-09-01
2009-04-04
latest
    關於metadata的相關資訊, 也可以詳細看EC2 文件  Instance Metadata and User Data

Cloud-init

    資料準備好, 完成最後action的工作就必須cloud-init出馬了, 它能夠把這些資料在虛擬機器boot的時候執行起來。關於cloud-init相關介紹與其所使用的user-data格式, 請看Ubuntu Cloudinit

接下來將實際使用這些技術做個測試。

保證能夠與nova metadata api連通

    回到OpneStack本身,要把user-data使用起來,要先保證能夠在建立的虛擬機器內部能夠連線到nova的metadata api IP 地址,metadata app IP 沿用了亞馬遜所用的169.254.169.254.  在OpenStack生產環境中, 我們是沒有這個IP的, 需要利用以下命令把到169.254.169.254的請求路由到nova的metadata api實際的監聽IP和埠上, 如下所示

sudo iptables -t nat -A PREROUTING -d 169.254.169.254/32 -p tcp -m tcp--dport 80 -j DNAT --to-destination 10.11.0.16:8775
10.11.0.16  是metadata api listen ip address

注意兩個相關的配置項

/etc/nova/nova.conf

metadata_listen=10.11.0.16

/etc/neutron/metadata_agent.ini

nova_metadata_ip = 10.11.0.16

Nova boot :上傳user-data,並cloud-init注入資料

    把我們需要的指令碼、引數配置等等寫入文字檔案, 通過--user-data 上傳到nova metadata server上,然後利用映象的cloud init注入資料, nova中語法為:

nova boot  --user-data /filepath/filename ...
   首先找個已安裝cloud init包的映象,本文使用Fedora 20, 可以在http://cloud.fedoraproject.org/ 下載,

   第一步:glance 建立image

glance image-create --name F20 --disk-format=qcow2 --container-format=bare --is-public=true --file=Fedora-x86_64-20-20131211.1-sda.qcow2

    第二步:建立user-data file

   下面為user-data的一個例子, 為一段指令碼,其他格式可參見文章末尾的參考資料

#!/bin/bash
echo "one test about user data" >>userdata
chmod 777 userdata
useradd -m me
echo -e 'me\tALL=(ALL)\tNOPASSWD: ALL' >> /etc/sudoers

     第三步:boot虛擬機器, 注入初始化資料

                     注意:本例中利用--key-name引數傳入公鑰, 實現無密碼ssh, 使用者名稱為fedora,本例中root_key為一keypair,用nova keypair-add 新增。

nova boot --key-name root_key  --user-data ./user-data.txt --flavor 2 --image aad51d83-6398-4d18-89c8-5302993363b5 test_f20

     第四步:ssh 進入虛擬機器進行驗證

[[email protected] ~]# ssh [email protected]
Last login: Thu Apr  3 02:07:24 2014 from 10.20.1.3
[[email protected] ~]$ curl 169.254.169.254/latest/user-data
#!/bin/bash
echo "one test about user data" >>userdata
chmod 777 userdata
useradd -m me
echo -e 'me\tALL=(ALL)\tNOPASSWD: ALL' >> /etc/sudoers
[[email protected] ~]$ cat /userdata
one test about user data
[[email protected] ~]$ ll /userdata
-rwxrwxrwx. 1 root root 25 Apr  3 02:07 /userdata
[[email protected] ~]$ su me
Password:
            也可以check下/etc/sudoers

 其他相關參考資料:

相關推薦

OpenStack Nova虛擬機器初始user-data & Cloud-init

    有的時候我們希望在boot虛擬機器的時候能夠對虛擬機器做些配置, 比如配置網路, 寫入檔案, 下載一些包並安裝等等, openstack中提供了實現這些的方法, 就是user-data 和Cloud-init。 user-data     在說user-data之前

openstack-nova原始碼虛擬機器建立流程

nova-api接收到訊息後,呼叫nova\api\openstack\compute\servers.py 中ServersController類的create()方法, 部分程式碼: try:             inst_type = flavors.get_f

Qemu-KVM虛擬機器初始及建立過程原始碼簡要分析(一)

    我們知道,Qemu-KVM實際上包括Qemu和KVM兩部分,那麼在建立以及初始化虛擬機器時,實際上也是在這兩部分進行的。     KVM實際上就是kvm核心模組,包括kvm.ko、kvm-intel.ko、kvm-amd.ko三部分,後兩部分分別對應Intel體系的

Qemu-KVM虛擬機器初始及建立過程原始碼簡要分析(二)

    前面我們講了KVM核心層建立及初始化虛擬機器的一些工作過程,現在講一下Qemu層的流程以及與KVM核心層的配合過程。         Qemu層是從vl.c中的main()函式開始的,這裡通過在程式碼中新增一些註釋的方式來進行講解,中間省略了很多不重要或者我也沒有搞

lua API 小記——— lua虛擬機器初始)

1. 建立lua虛擬機器 lua_State *lua_newstate (lua_Alloc f, void *ud) 建立一個新的獨立的lua虛擬機器. 引數指定了記憶體分配策略及其引數, 注意, 讓使用者可以定製記憶體分配策略是十分有用的, 比如在遊戲伺服器端使用lu

OpenStack Nova 高效能虛擬機器之 NUMA 架構親和

目錄 寫在前面 最近太忙了,筆者實在懶得畫圖,文章的圖片大多來源於網際網路,感謝創作者們(可惜找不到源出處)。 這篇博文與其說是介紹 OpenStack Nova 的高效能虛擬機器,倒不如說是介紹 CPU 相關的硬體架構與應用程式之間的愛恨情仇更

OpenStack部署應用第七篇虛擬機器建立流程(轉)

1、虛擬機器建立流程 2、深入理解虛擬機器的磁碟、網路及Metadata 3、OpenStack虛擬機器生產映象構建實踐 1.建立虛擬機器硬碟 qemu-img create -f qcow2 /tmp/centos.qcow2 10G 2.建立虛擬機器 virt-install --virt-type

nova】centos7下libety版本openstack動態遷移虛擬機器

openstack虛擬機器動態遷移有兩個方式,塊遷移和共享儲存遷移。 前提條件: 目標物理伺服器是有足夠的記憶體,虛擬CPU,磁碟。cpu同類型 說明: 本文用nfs用作共享儲存演示,共有四個節點controller、 computer1

tensorflow 1.0 學習參數初始(initializer)

正交矩陣 算子 smi esc one tor pytho ops ride CNN中最重要的就是參數了,包括W,b。 我們訓練CNN的最終目的就是得到最好的參數,使得目標函數取得最小值。參數的初始化也同樣重要,因此微調受到很多人的重視,那麽tf提供了哪些初始化參數的方法呢

復習設備初始配置命令

內容 ace 方式 加密 nihao name ip add dom outer 設備初始化配置命令:Router> //剛開始進入設備,處於用戶模式Router>enable //通過該命令進入到“特權模

5.NFV場景下的風河Openstack實戰虛擬機創建

mage abc stack tex sta log ima ext ffffff 5.NFV場景下的風河Openstack實戰:虛擬機創建

Spring Core Container 源碼分析三Spring Beans 初始流程分析

turn raw time -c rri add 步驟 引用 lin 前言 本文是筆者所著的 Spring Core Container 源碼分析系列之一; 本篇文章主要試圖梳理出 Spring Beans 的初始化主流程和相關核心代碼邏輯; 本文轉載自本人的私人博客,傷神

Angular在應用初始時運行代碼

return none 方法 audio then 分享圖片 ini AR 資料 想象一下,您的應用需要一些動態配置信息,這些信息在應用啟動之前需要動態獲取,並在應用運行中使用。 顯然不能直接寫道靜態配置文件中,但是從客戶端發出的請求又是一個異步請求,如何協調這個問題呢?

深入理解Java對象的創建過程類的初始與實例

fcm 創建過程 this 創作 alt sso sdn 限定 知識 轉載自:https://blog.csdn.net/justloveyou_/article/details/72466416 摘要:   在Java中,一個對象在可以被使用之前必須要被正確地初始化,這一

CAS源碼追蹤系列一Filter的初始

引入 委托 ppi 假設 文檔 client 通過 tomcat容器 發現 目錄 代碼跟蹤 Spring-web:DelegatingFilterProxy CAS:AuthenticationFilter 總結 最近研究了一下SSO(Single Sign On:單

Introduction to 3D Game Programming with DirectX 12 學習筆記之 --- 第四章Direct 3D初始

學習目標 對Direct 3D程式設計在3D硬體中扮演的角色有基本瞭解; 理解COM在Direct 3D中扮演的角色; 學習基本的圖形學概念,比如儲存2D影象、頁面切換,深度緩衝、多重紋理對映和CPU與GPU如何互動; 學習如何使用效能計數函式讀取高精度時間;

OpenStack之管理虛擬機器(七)

OpenStack的三個元件(四個節點)已安全搭建完成,本篇博文為大家帶來基本管理,使平臺化管理更為方便、有效。 一、映象管理 1、掛載/上傳映象到控制節點 mkdir /abcmount.cifs //192.168.37.1/rhel7/KVM/CentOS-7-x86_64-DVD

CAS原始碼追蹤系列一Filter的初始

目錄 程式碼跟蹤 Spring-web:DelegatingFilterProxy CAS:AuthenticationFilter 總結 最近研究了一下SSO(Single Sign On:單點登入)原理。 於是想借助CAS(基於SSO原理的實現框架)加深一下

最新天貓3輪面試題目虛擬機器+併發鎖+Sql防注入+Zookeeper

一面 自我介紹、專案介紹 Spring攔截器、實現了哪些方法?底層原理 AOP如何配置,底層原理、2種動態代理,aop註解實現,xml定義切面 Bean的作用域,單例模式是否執行緒安全?惡漢模式是否執行緒安全?bean如何結束生命週期? Spring事務種類,如

2018年天貓3輪面試題目虛擬機器+併發鎖+Sql防注入+Zookeeper

一面 自我介紹、專案介紹 Spring攔截器、實現了哪些方法?底層原理 AOP如何配置,底層原理、2種動態代理,aop註解實現,xml定義切面 Bean的作用域,單例模式是否執行緒安全?惡漢模式是否執行緒安全?bean如何結束生命週期? Spring事務種