5/12/2015

快速搭建本地私有儲存雲, 使用Raspberry Pi 2安裝OpenStack DevStack



0. 我的環境是Mac OS X 10.10
1.
- 使用Ubuntu 14.04 LTS image for Raspberry Pi 2 https://wiki.ubuntu.com/ARM/RaspberryPi
- Download image and unzip to Mac desktop
- use diskutil list 找到你的SD card 例如是/dev/disk1
- sudo diskutil umountDisk /dev/disk1
- sudo dd bs=1m if=~/Desktop/Pi\ 2\ image/2015-04-06-ubuntu-trusty/2015-04-06-ubuntu-trusty.img of=/dev/disk1
- 用這張SD card 幫Raspberry Pi 2開機

2.
- 登入Raspberry pi, 預設是沒有openssh server, 請先外接HDMI螢幕和USB鍵盤登入.
- sudo apt-get install openssh-server

3. 開始安裝Openstack
- sudo apt-get -y update
- sudo apt-get -y install git vim
- git clone https://github.com/openstack-dev/devstack.git -b stable/icehouse devstack/
- sudo devstack/tools/create-stack-user.sh
- sudo su stack
- cd
- git clone https://github.com/openstack-dev/devstack.git -b stable/icehouse devstack/
- sudo chown -R stack:stack /opt/stack
- cd devstack/
- vim local.conf # copy in the contents of the one below. 私有儲存雲只需要帳號(keystone)與儲存(swift)部分, 因此簡化local.conf如下:

[[local|localrc]]

# Credentials
DATABASE_PASSWORD=devstack
ADMIN_PASSWORD=devstack
SERVICE_PASSWORD=devstack
SERVICE_TOKEN=devstack
RABBIT_PASSWORD=devstack

# Services
ENABLED_SERVICES=mysql,key
ENABLED_SERVICES+=,s-proxy,s-object,s-container,s-account

# Branches
KEYSTONE_BRANCH=stable/icehouse
NOVA_BRANCH=stable/icehouse
NEUTRON_BRANCH=stable/icehouse
SWIFT_BRANCH=stable/icehouse
GLANCE_BRANCH=stable/icehouse
CINDER_BRANCH=stable/icehouse
HEAT_BRANCH=stable/icehouse
TROVE_BRANCH=stable/icehouse
HORIZON_BRANCH=stable/icehouse

# Swift Configuration
SWIFT_REPLICAS=1
SWIFT_HASH=66a3d6b56c1f479c8b4e70ab5c2000f5

# Enable Logging
LOGFILE=/opt/stack/logs/stack.sh.log
VERBOSE=True
LOG_COLOR=True
SCREEN_LOGDIR=/opt/stack/logs


# 啟動OpenStack相關服務, 使用./stack
# 如果需要將OpenStack服務停止,使用./unstack

Test the Authentication from Keystone, 請注意單雙引號要正確.
$curl -d '{"auth":{"passwordCredentials":{"username":"demo","password":"devstack"},"tenantName":"demo"}}' -H "Content-type: application/json" http://localhost:5000/v2.0/tokens

可以得到關於整個服務的相關資訊, 例如是, 最重要的就是swift的publicURL以及Region (預設Region名稱是RegionOne):
之後在使用Openstack SDK的時候就需要這些資訊.


{
"access": {
"token": {
"issued_at": "2015-05-12T02:07:24.183444",
"expires": "2015-05-12T03:07:24Z",
"id": "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-mu9NtkFebV79HD61Zhnq5+jX+cUxLgcfRfm-GqdkVcqPRPuzniVh3K+5KYYsmsdaLn0dIJdhRkqq9wTYwTyLQaXECnsVzxX0UQWmrSIBW8p9xvqRwzSGRwGr8l5xbn6gJXyQ==",
"tenant": {
"description": null,
"enabled": true,
"id": "9fa3258c21744af99682681f636ea831",
"name": "demo"
}
},
"serviceCatalog": [
{
"endpoints": [
{
"adminURL": "http://192.168.10.170:8080",
"region": "RegionOne",
"internalURL": "http://192.168.10.170:8080/v1/AUTH_9fa3258c21744af99682681f636ea831",
"id": "6cd7ad2e6b4840efbdd63bbac25ec15c",
"publicURL": "http://192.168.10.170:8080/v1/AUTH_9fa3258c21744af99682681f636ea831"
}
],
"endpoints_links": [],
"type": "object-store",
"name": "swift"
},
{
"endpoints": [
{
"adminURL": "http://192.168.10.170:35357/v2.0",
"region": "RegionOne",
"internalURL": "http://192.168.10.170:5000/v2.0",
"id": "93bc8ca17c9843d9b0a32241211d1700",
"publicURL": "http://192.168.10.170:5000/v2.0"
}
],
"endpoints_links": [],
"type": "identity",
"name": "keystone"
}
],
"user": {
"username": "demo",
"roles_links": [],
"id": "0db2610757ba43368dbd6e32d34462e0",
"roles": [
{
"name": "Member"
},
{
"name": "_member_"
},
{
"name": "anotherrole"
}
],
"name": "demo"
},
"metadata": {
"is_admin": 0,
"roles": [
"bc0f9b54c3b44086a793189da701a7f4",
"9fe2ff9ee4384b1894a90878d3e92bab",
"7ed8a5c783004c39abb8bd3eac10629b"
]
}
}
}

到這裡我們已經完成一個利用OpenStack快速搭建一個本地私有儲存雲的過程, Swift服務網址如下:
http://192.168.10.170:8080/v1/AUTH_9fa3258c21744af99682681f636ea831
username:demo
password:devstack
region:RegionOne
tenantName:demo
這些參數都是使用OpenStack SDK需要的部份.

你可以安裝python-swiftclient來進行簡單操作
>sudo pip install python-swiftclient
使用swift cli之前, 需要export一些環境變數
export OS_AUTH_URL=http://192.168.10.170:35357/v2.0
export OS_USERNAME=demo
export OS_TENANT_NAME=demo
export OS_PASSWORD=devstack

>swift stat
>swift list #列出目前有的container
>swift post abc #產生一個container named abc

參考資料:
https://wiki.ubuntu.com/ARM/RaspberryPi

沒有留言: