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和埠上, 如下所示
10.11.0.16 是metadata api listen ip addresssudo 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
注意兩個相關的配置項
/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事務種