如何用openstack搭建一個屬於你自己的雲計算平臺?

可以說大多數人都聽過雲計算,如阿里雲、亞馬遜雲、華為雲、騰訊雲、百度雲等。是不是覺得非常高大上呢?其實這些雲廠商他們或自己開發平臺或在openstack基礎上二次開發,阿里自研開發的平臺我們望塵莫及,但是其他國內廠商基本都是openstack基礎上二次開發的,所以我們只要掌握了openstack的相關技術,自己就可以搭建一個自己的雲平臺。

下面我就給大家介紹一下如果在Linux環境用openstack搭建雲平臺。

一、Openstack基本概念

OpenStack是一個開源的雲計算管理平臺專案,由幾個主要的元件組合起來完成:

Dashboard(web專案)

Keystone(許可權管理)

Nova(管理虛擬機器)

Nova-network(管理網路流量和ip)

Glance(映象管理專案)

Cinder(磁碟管理)

Swift(網盤,物件)、

二、

準備工作

需要準備3臺linux的機器,配置IP地址,關閉防火牆,修改主機名。

• Controller Node: 1 processor, 2 GB memory, and 5 GB storage

• Compute01: 1 processor, 512 MB memory, and 5 GB storage

• Compute02 Node: 1 processor, 2 GB memory, and 10 GB storage

我這裡controller的ip地址是:192。168。1。2

computer01:192。168。1。3

computer02:192。168。1。4

基本環境配置

以下內容是在controller機器上配置的。

1、資料庫安裝。

因為需要一個數據庫,所以這裡選用了mysql資料庫。

yum install mysql mysql-server MySQL-python

編輯/etc/my。cnf檔案,在裡面新增如下內容,主要意思就是設定編碼為utf-8。

default-storage-engine = innodbinnodb_file_per_tablecollation-server = utf8_general_ciinit-connect = ‘SET NAMES utf8’character-set-server = utf8

然後啟動服務,開機啟動。

# service mysqld start# chkconfig mysqld on# mysql_install_db# mysql_secure_installation

賦權,使其可以遠端登入。

GRANT ALL PRIVILEGES ON *。* TO ‘root’@‘%’ IDENTIFIED BY ‘a’;

2、openstack基本包安裝。

# yum install yum-plugin-priorities # yum install http://repos。fedorapeople。org/repos/openstack/openstackicehouse/rdo-release-icehouse-3。noarch。rpm # yum install http://dl。fedoraproject。org/pub/epel/6/x86_64/epel-release-6-8。noarch。rpm # yum install openstack-utils # yum install openstack-selinux

3、安裝訊息佇列

yum install qpid-cpp-server

啟動服務

service qpidd startchkconfig qpidd on

許可權認證服務(keystone)

安裝許可權認證服務:

yum install openstack-keystone python-keystoneclient -y

建立使用者,寫入到配置檔案中:

openstack-config ——set /etc/keystone/keystone。conf \database connection mysql://keystone:KEYSTONE_DBPASS@controller/keystone

建立keystone資料庫表:

$ mysql -u root -pmysql> CREATE DATABASE keystone;mysql> GRANT ALL PRIVILEGES ON keystone。* TO ‘keystone’@‘localhost’ \IDENTIFIED BY ‘KEYSTONE_DBPASS’;mysql> GRANT ALL PRIVILEGES ON keystone。* TO ‘keystone’@‘%’ \IDENTIFIED BY ‘KEYSTONE_DBPASS’;mysql> exit

自動生成表:

su -s /bin/sh -c “keystone-manage db_sync” keystone

設定使用者環境變數:

ADMIN_TOKEN=$(openssl rand -hex 10)echo $ADMIN_TOKENopenstack-config ——set /etc/keystone/keystone。conf DEFAULT \admin_token $ADMIN_TOKEN # keystone-manage pki_setup ——keystone-user keystone ——keystone-group keystone# chown -R keystone:keystone /etc/keystone/ssl# chmod -R o-rwx /etc/keystone/ssl

啟動keystone服務:

service openstack-keystone startchkconfig openstack-keystone on

將admin_token設定到環境變數中去。

export OS_SERVICE_TOKEN=$ADMIN_TOKENexport OS_SERVICE_ENDPOINT=http://controller:35357/v2。0

建立管理員使用者,預設的使用者名稱為admin,密碼為ADMIN_PASS,你可以自定義修改:

[root@controller keystone]# keystone user-create ——name=admin ——pass=ADMIN_PASS ——email=ADMIN_EMAIL+——————+——————————————————+| Property | Value |+——————+——————————————————+| email | ADMIN_EMAIL|| enabled | True ||id| 332f5ecb18c64bf687b154facd629fb6 || name | admin || username | admin |+——————+——————————————————+[root@controller keystone]# keystone role-create ——name=admin+——————+——————————————————+| Property | Value |+——————+——————————————————+|id| ab5da2c50d7443efb0514e84c2b4adb7 || name | admin |+——————+——————————————————+[root@controller keystone]# keystone tenant-create ——name=admin ——description=“Admin Tenant”+——————-+——————————————————+| Property | Value |+——————-+——————————————————+| description | Admin Tenant || enabled | True || id | b89723a38b154eeea6416a83b293b0ad || name| admin |+——————-+——————————————————+[root@controller keystone]# keystone user-role-add ——user=admin ——tenant=admin ——role=admin[root@controller keystone]# keystone user-role-add ——user=admin ——role=_member_ ——tenant=admin[root@controller keystone]#

建立一個許可權認證服務,因為我這裡的主機名是controller,所以下面有 http://controller:35357/v2。0 這些資訊,可以自定義修改:

[root@controller keystone]# keystone service-create ——name=keystone ——type=identity \> ——description=“OpenStack Identity”+——————-+——————————————————+| Property | Value |+——————-+——————————————————+| description |OpenStack Identity|| enabled | True || id | 4bfd5f39b86c45edb92d5c0488987dd8 || name| keystone || type| identity |+——————-+——————————————————+[root@controller keystone]# keystone endpoint-create \> ——service-id=$(keystone service-list | awk ‘/ identity / {print $2}’) \> ——publicurl=http://controller:5000/v2。0 \> ——internalurl=http://controller:5000/v2。0 \> ——adminurl=http://controller:35357/v2。0+——————-+——————————————————+| Property | Value |+——————-+——————————————————+| adminurl | http://controller:35357/v2。0 || id | 0350b72901a141498fe48304b13a1b98 || internalurl | http://controller:5000/v2。0|| publicurl | http://controller:5000/v2。0||region |regionOne || service_id | 4bfd5f39b86c45edb92d5c0488987dd8 |+——————-+——————————————————+[root@controller keystone]# keystone user-create ——name=demo ——pass=DEMO_PASS ——email=DEMO_EMAIL+——————+——————————————————+| Property | Value |+——————+——————————————————+| email |DEMO_EMAIL|| enabled | True ||id| b44a9a1462d74f4e928b3b339289a2ae || name | demo || username | demo |+——————+——————————————————+[root@controller keystone]# keystone tenant-create ——name=demo ——description=“Demo Tenant”+——————-+——————————————————+| Property | Value |+——————-+——————————————————+| description | Demo Tenant|| enabled | True || id | 7bd79509ee184a2098ca0644679b60a8 || name| demo |+——————-+——————————————————+[root@controller keystone]# keystone user-role-add ——user=demo ——role=_member_ ——tenant=demo[root@controller keystone]#

為了方便我們取到token,我們可以vi admin-openrc。sh,然後新增如下內容:

export OS_USERNAME=adminexport OS_PASSWORD=ADMIN_PASSexport OS_TENANT_NAME=adminexport OS_AUTH_URL=http://controller:35357/v2。0

在每次關機重啟之後都要重新執行下面的命令,讓環境變數起作用。否則會報”Expecting an auth URL via either –os-auth-url or env[OS_AUTH_URL]”的錯誤:

source admin-openrc。sh

我們可以使用下面的命令檢視keystone目前的使用者有哪些:

keystone user-list

測試效果:

開啟restclient-ui-3。5-jar-with-dependencies。jar來測試效果:

url地址是: http://192。168。1。2:5000/v2。0/