Devstack 多節點自動化部署

本文爲minxihou的翻譯文章,轉載請註明出處Bob Hou: http://blog.csdn.net/minxihouphp

JmilkFan:minxihou的技術博文方向是 算法&Openstack自動化 ,寫得很好,值得推薦。html

這是個在多物理服務器上部署openstack例子:前端

目錄

1 先決條件Linux&網絡

1.1 最小化安裝系統

你須要一個剛安裝好的Linux系統。你能夠直接下載最小化的Ubuntu版本,devstack會下載安裝全部額外的依賴關係。一樣也支持網絡安裝Fedora,Centos/RHEL.安裝幾個包用於引導程序配置。node

apt-get install -y git sudo || yum install -y git sudo

1.2 網絡配置

在實驗中咱們只須要反覆的使用openstack的FlatDHCP網絡控制器因此咱們只須要一個單網絡。不使用DHCP,要保證網絡處在它本身的網段內。主機IP和前端IP池將會設在同一個網段內。以下設置了一個示例:mysql

* Gateway: 192.168.42.1
* Physical nodes: 192.168.42.11-192.168.42.99
* Floating IPs: 192.168.42.128-192.168.42.254

在每一個節點配置靜態IP。對於Ubuntu來講配置網絡須要編輯/etc/network/interfaceslinux

auto eth0
iface eth0 inet static
    address 192.168.42.11
    netmask 255.255.255.0
    gateway 192.168.42.1

對於Fedora,Centos/RHEL版本的Linux來講修改/etc/sysconfig/network-scripts/ifcfg-eth0:nginx

BOOTPROTO=static
IPADDR=192.168.42.11
NETMASK=255.255.255.0
GATEWAY=192.168.42.1

2 安裝shake和bake

2.1 添加devstack用戶

openstack運行須要使用非root用戶該用戶能夠經過sudo來訪問root,對於這個非root用戶來講用戶名沒有特別的限制。在這裏咱們使用stack來做爲用戶名。每一個節點都必須使用相同的用戶名(uuid也儘可能保持一致)來部署openstack。若是你在安裝系統的時候就設置了用戶那你能夠直接使用它,用sudo指令進入用戶。若是沒有建立stack用戶的話須要進系統把這個用戶建立出來。git

groupadd stack
useradd -g stack -s /bin/bash -d /opt/stack -m stack

在安裝部署openstack的時候stack用戶會修改不少系統的操做,這樣咱們須要stack用戶擁有sudo到root而且無需輸入密碼的特權。github

echo "stack ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers

從這裏開始使用stack用戶。登入和登出都使用stack用戶。web

2.2 設置ssh

在每一個節點上設置stack的祕鑰用於stack訪問每一個節點。

mkdir ~/.ssh; chmod 700 ~/.ssh
echo "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCyYjfgyPazTvGpd8OaAvtU2utL8W6gWC4JdRS1J95GhNNfQd657yO6s1AH5KYQWktcE6FO/xNUC2reEXSGC7ezy+sGO1kj9Limv5vrvNHvF1+wts0Cmyx61D2nQw35/Qz8BvpdJANL7VwP/cFI/p3yhvx2lsnjFE3hN8xRB2LtLUopUSVdBwACOVUmH2G+2BWMJDjVINd2DPqRIA4Zhy09KJ3O1Joabr0XpQL0yt/I9x8BVHdAx6l9U0tMg9dj5+tAjZvMAFfye3PJcYwwsfJoFxC8w/SLtqlFX7Ehw++8RtvomvuipLdmWCy+T9hIkl+gHYE4cS3OIqXH7f49jdJf jesse@spacey.local" > ~/.ssh/authorized_keys

2.3 下載devstack

找到devstack的最新版

git clone https://git.openstack.org/openstack-dev/devstack
cd devstack

到目前爲止以上的操做適用於你要部署集羣中的每一個節點。從如今開始在集羣控制節點(又名頭結點)和計算節點上配置有一些差別。

2.4 配置集羣控制節點

集羣控制節點上跑着全部openstack的服務。在集羣控制節點devstack的local.conf文件中作以下配置。

[[local|localrc]]
HOST_IP=192.168.42.11
FLAT_INTERFACE=eth0
FIXED_RANGE=10.4.128.0/20
FIXED_NETWORK_SIZE=4096
FLOATING_RANGE=192.168.42.128/25
MULTI_HOST=1
LOGFILE=/opt/stack/logs/stack.sh.log
ADMIN_PASSWORD=labstack
DATABASE_PASSWORD=supersecret
RABBIT_PASSWORD=supersecret
SERVICE_PASSWORD=supersecret

在多節點的配置文件中子網段前十個IP地址通常預留做爲虛機私網網段的IP地址。把以下命令加入到local.sh文件中,在每次stack.sh運行完以後運行local.sh。

for i in `seq 2 10`; do /opt/stack/nova/bin/nova-manage fixed reserve 10.4.128.$i; done

運行devstack的部署腳本。

./stack.sh

在一連串運行以後。當stack.sh部署完成的時候終端會輸出一個總結的信息,其中包括了各個端點使用的URL,帳戶和密碼信息。最近一次運行stack.sh腳本的日誌會被存放到stack.sh.log中。

2.5 配置計算節點

計算節點只運行openstack的計算服務。針對充當計算節點角色的機器,咱們須要添加一個local.conf文件在計算節點的devstack中,配置以下:

[[local|localrc]]
HOST_IP=192.168.42.12 # change this per compute node
FLAT_INTERFACE=eth0
FIXED_RANGE=10.4.128.0/20
FIXED_NETWORK_SIZE=4096
FLOATING_RANGE=192.168.42.128/25
MULTI_HOST=1
LOGFILE=/opt/stack/logs/stack.sh.log
ADMIN_PASSWORD=labstack
DATABASE_PASSWORD=supersecret
RABBIT_PASSWORD=supersecret
SERVICE_PASSWORD=supersecret
DATABASE_TYPE=mysql
SERVICE_HOST=192.168.42.11
MYSQL_HOST=$SERVICE_HOST
RABBIT_HOST=$SERVICE_HOST
GLANCE_HOSTPORT=$SERVICE_HOST:9292
ENABLED_SERVICES=n-cpu,n-net,n-api-meta,c-vol
NOVA_VNC_ENABLED=True
NOVNCPROXY_URL="http://$SERVICE_HOST:6080/vnc_auto.html"
VNCSERVER_LISTEN=$HOST_IP
VNCSERVER_PROXYCLIENT_ADDRESS=$VNCSERVER_LISTEN

注意:n-api-meta服務只是源數據服務api的一個版本。啓用這個服務是須要的由於計算節點不會建立到控制節點源數據服務的路由路徑。
以後咱們只須要運行./stack.sh

./stack.sh

2.6 部署完以後的清理工做

如今關閉openstack相應的服務已經變得很是簡單了,只須要運行 unstack.sh腳本。

./unstack.sh

更加深度的清除工做咱們可使用clean.sh腳本。這種模式清除能夠刪除掉一些明確有問題的包,而且修改掉原有部署的數據庫和消息隊列管理器。能夠理解爲深度清理。

./clean.sh

有些時候正在運行的實例可能沒法被清理,Devstack會嘗試清除正在運行的實例但有時候仍然須要手動來完成清除操做。

sudo rm -rf /etc/libvirt/qemu/inst*
sudo virsh list | grep inst | awk '{print $1}' | xargs -n1 virsh destroy

3 stack上增長其餘功能性選項

3.1 配置其餘用戶

devstack建立了兩個openstack帳號(一個是admin一個是demo)同時建立了兩個對應的project(命名依舊一個是admin一個是demo)。admin的做用就像admin字面意思上同樣,一個特權管理帳戶這個帳戶同時包含在了admin和demo的項目裏面。demo帳戶做爲一個普通用戶帳戶它只包含在了demo項目裏面。經過dashboard咱們能夠自定義的建立咱們所須要的openstack帳戶。有些時候在dashboard裏面建立帳戶會比在腳本里面定義建立會更快捷方便一些。尤爲你每次執行stack.sh腳本的時候這些設置的帳戶就會被再次更改。比較成熟的作法是遵循如下腳本配置:

# Get admin creds
. openrc admin admin

# List existing projects
openstack project list

# List existing users
openstack user list

# Add a user and project
NAME=bob
PASSWORD=BigSecret
PROJECT=$NAME
openstack project create $PROJECT
openstack user create $NAME --password=$PASSWORD --project $PROJECT
openstack role add Member --user $NAME --project $PROJECT
# The Member role is created by stack.sh
# openstack role list

3.2 Swift節點

Swift,openstack類儲存對象。swift須要大量的存儲資源,這個項目在devstack自動化部署的時候是默認禁止的。在devstack中支持swift的最小化安裝,這樣能夠用於測試swift功能。爲了真正測試多節點的swift,以下附加的參數設置是必要的。在local.conf文件中寫入儘量簡單的開啓swift配置參數。

enable_service s-proxy s-object s-container s-account

swift是openstack的類存儲對象服務,swift將會把它的數據文件存放到SWIFT_DATA_DIR中(設定的默認值/opt/stack/data/swift).劃分分區的數據大小由SWIFT_LOOPBACK_DISK_SZIE來肯定(這樣其實是掛載了一個本地文件夾供swift來使用)。swift的配置文件由SWIFT_CONF_DIR參數決定(默認值爲/ect/swift)。以上所說的這些配置均可以在local.conf文件中經過修改配置項來實現。

3.3 卷

devstack會自動使用現有stack-volumes的LVM捲來做爲雲主機的存儲卷。若是stack-volumes不存在,那麼devstack會自動建立一個10GB大小的本地捲來做爲存儲卷使用。這樣在openstack建立雲主機的時候由於卷的數量和規模而被限制了建立個數和大小。卷的大小能夠經過修改local.conf中的VOLUME_BACKING_FILE_SIZE來擴大。
stack-volumes卷能在任何支持Linux的LVM功能的物理機上預先建立出來。卷組名能夠經過localrc中的VOLUME_GROUP參數進行修改。想要清除以前運行的內容,部分工做須要依靠stack.sh這個腳本,該腳本能夠刪除VOLUME_GROUP中以VOLUME_GROUP_PREFIX開頭的全部邏輯卷。 在設置VOLUME_GROUP的時候不建議使用根卷組。

建立卷組的細節取決於你所用到的物理服務器,在系統層面上指令以下所示

pvcreate /dev/sdc
vgcreate stack-volumes /dev/sdc

3.4 系統日誌

devstack經過使用參數ryslog能夠跨節點的來收集日誌。默認狀況下是這個參數是關閉的,要打開的話須要在local.conf中寫入SYSLOG=True.SYSLOG_HOST默認的IP地址繼承了HOST_IP參數的IP地址。在計算節點設置收集日誌的IP地址必須只想keystone控制節點,這樣可以統一的收集日誌。如下例子指出如何在計算節點添加輸出日誌的條目值:

SYSLOG_HOST=192.168.42.11

3.5 使用不一樣repo源與分支

在stackrc中定義了devstack自動化部署時候所要下載openstack服務所要用到的默認repo源與分支。自從這個文件加入了devstack自動部署文件中咱們只須要在這個文件中設置咱們想使用的repo源和相對應的git分支,則部署的時候就會按照咱們配置的repo和分支生效。可是在stackrc中設定的值都是能夠在local.conf中從新定義的。
針對建立一個特定的openstack服務選用不一樣的repo源和分支,最簡單的辦法就是在local.conf文件中修改針對這個服務的*_REPO和*_BARNCH參數。
再修改了repo源和分支以後,若是你在local.conf中沒有設置RECLONE參數,則須要從/opt/stack目錄中刪除相關服務的文件目錄,而後用git來從新根據你設定的repo源和分支來從新克隆代碼。
例如,我想從nova主分支樹下拉取候選發行版的nova分支,可用以下操做:

NOVA_BRANCH=rc-proposed

從一個實驗分支下拉取一個glance的分支則須要使用以下參數:

GLANCE_BRANCH=try-something-big
GLANCE_REPO=https://github.com/mcuser/glance.git

4 注意事項

4.1 重置網橋

如何重置網橋配置

sudo brctl delif br100 eth0.926
sudo ip link set dev br100 down
sudo brctl delbr br100

4.2 設置MySQL數據庫密碼

若是你忘記設置數據庫root密碼你能夠遵循如下作法:

mysqladmin -u root -pnova password 'supersecret'

4.3 動態遷移

默認配置動態遷移的URL

[libvirt]
live_migration_uri = qemu+ssh://stack@%s/system

每一個計算節點間因該要互相交換祕鑰
1.在「源」主機中root用戶的公鑰(形如/root/.ssh/id_rsa.pub)須要複製到」目標」服務器stack用戶目錄認證祕鑰文件夾下(~stack/.ssh/authorized_keys)。能夠經過手動的在」源」主機中複製目標目錄下的文件到」目標」主機對應的文件目錄中來實現這個目標。若是你爲stack用戶作了密碼配置一樣的能夠經過如下的命令來完成祕鑰交換。

ssh-copy-id -i /root/.ssh/id_rsa.pub stack@DESTINATION

2.「目標主機」公用的ECDSA祕鑰(/etc/ssh/ssh_host_ecdsa_key.pub)須要放入」源」主機的超級用戶的known_hosts文件夾中(/root/.ssh/know_hosts).在「源」主機中經過使用如下命令能夠完成需求(注意須要使用主機名)

ssh-keyscan -H DEST_HOSTNAME | sudo tee -a /root/.ssh/known_hosts

本質上,作這兩步的操做是爲了可以讓每個計算節點中的root用戶公鑰存在於其餘計算節點stack用戶的authorized_keys文件中,其次爲了讓每一個計算節點中的公共ECDSA祕鑰存在於其餘計算節點的root用戶knows_hosts文件夾中。請注意,若是root或者stack用戶沒有SSH祕鑰,能夠用如下命令生成一個:

ssh-keygen -t rsa

以上的配置是必須的當動態遷移設置的參數live_migration_uri是以root身份來使用的」qemu:///system」系列的URL。

相關文章
相關標籤/搜索