前言python
openstack更新頻率是挺快的,每六個月更新一次(命名是是以A-Z的方式,Austin,Bexar...Newton)。博主建議你們先可一種版本研究,等某一版本研究透徹了,在去研究新的版本。其實更新來講,也就是無非對於軟件來講的一些優化。對於用戶角度並無多大的改變。切記不要追着新版本走,那樣只會是丟了西瓜揀芝麻!mysql
看一下官網的圖linux
咱們按照Newton這個版原本部署。你們也能夠上官網看下官方文檔,寫的也挺詳細。web
廢話很少說,直接部署sql
openstack基於centos7 、redhat7 或者Ubuntu來部署的shell
系統信息:數據庫
1 [root@bodbayLi ~]# cat /etc/redhat-release 2 CentOS Linux release 7.2.1511 (Core) #操做系統信息 3 [root@bodbayLi ~]# uname -r 4 3.10.0-327.22.2.el7.x86_64 #內核的版本信息
First Step:準備階段apache
安裝官方yum源。以前在部署這個openstack的時候還要考慮各類的安裝包。後來官方直接出了本身的yum源。bootstrap
yum安裝(下載軟件包到本地--->安裝--->刪除) 修改yum.conf後端
修改keepcache=1
修改cachedir=/newton #方便管理。而且全部的軟件包都下載到本地,能夠本身製做yum源
yum -y install centos-release-openstack-newton #安裝官方的yum源 yum -y upgrade #更新 yum -y install python-openstackclient #安裝工具 yum -y install openstack-selinux #安裝openstack-selinux包自動管理openstack組件的安全策略
安裝完上面的部分,接下來部署數據庫
Second Step
由於keystone是一個認證服務也屬於一個web app,既然是認證服務就要在後端安裝一個數據庫。用來存放用戶的相關數據
yum -y install mariadb mariadb-server python2-PyMySQL
#前面兩個是屬於centos7版本mysql數據庫的名稱,後面那個是一個Python模塊。(在python當中操做mysql)
安裝好後在/etc/my.cnf.d/目錄下建立一個openstack.cnf文件。(什麼名字都行可是要以.cnf結尾)
1 [mysqld] 2 bind-address = 182.92.84.106 #本機管理網絡ip 3 4 default-storage-engine = innodb 5 innodb_file_per_table 6 max_connections = 4096 7 collation-server = utf8_general_ci 8 character-set-server = utf8
保存退出,啓動mariadb
systemctl start mariadb.service #啓動mariadb並設爲開機啓動。在centos6版本中啓動管理服務由以前的init.d
systemctl enable mariadb.service #在centos7中則是systemctl來管理啓動服務,千萬要記住
查看mariadb.service運行狀態
上面就是mariadb部署過程
Third Step
部署keystone
keystone關於數據庫的操做:
1 mysql -u root -p #登入數據庫 2 CREATE DATABASE keystone; #新建庫keystone 3 GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'localhost' \ 4 IDENTIFIED BY '123'; #新建本地訪問keystone庫的帳號 5 GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'%' \ 6 IDENTIFIED BY '123'; #新建遠程訪問keystone庫的帳號
keystone爲何要建立一個本身的數據庫?
應爲keystone程序要訪問數據庫,首先本身要有一個數據庫,就來訪問本身的數據庫
注意:之後每部署一個組件都要有一個本身的數據庫,在數據庫中。好比nova也要訪問數據庫,那麼數據庫中就存放一個nova的庫,裏面存放一些nova相關的信息 ,catalog等
安裝軟件包
1 #keystone軟件包名openstack-keystone 2 #安裝httpd和mod_wsgi的緣由是,社區主推apache+keystone 3 #openstack-keystone本質就是一款基於wsgi協議的web app,而httpd本質就是一個兼容wsgi協議的web server,因此咱們須要爲httpd安裝mod_wsgi模塊 4 yum -y install openstack-keystone httpd mod_wsgi
修改keyston配置文件:/etc/keystone/keystone.conf
1 #讓openstack-keystone可以知道如何鏈接到後端的數據庫keystone 2 #mysql+pymysql:pymysql是一個python庫,使用python能夠操做mysql原生sql 3 [database] 4 connection = mysql+pymysql://keystone:123@182.92.84.106/keystone #mysql+pmysql是由上面的Python-mysql
#用戶名:密碼@mysql地址/哪一個庫 那個模塊安裝的,用pymysql來操做mysql
5 [token] #令牌 6 provider = fernet #fernet爲生成token的方式(還有pki)
注意在mysql數據庫中建立密碼的時候加上了引號「123」而在配置文件中不要加上引號,否則會保錯
保存退出,並初始化數據庫
su -s /bin/sh -c "keystone-manage db_sync" keystone
之因此要初始化,是由於python的orm對象關係映射,須要初始化來生成數據庫表結構。什麼是orm(Object Relation Mapping)的縮寫叫對象關係映射。
可能有的時候你們在部署的時候會遇到報錯,怎麼辦,雖然我沒有遇到,可是若是各位遇到了不要慌
tail -f -n 20 /var/log/keystone/keystone.log
看看是哪一步驟出現問題解決就好。
接下來初始化Fernet key庫(生成token)
keystone-manage fernet_setup --keystone-user keystone --keystone-group keystone keystone-manage credential_setup --keystone-user keystone --keystone-group keystone
上面的兩個步驟是keystone對本身受權的一個過程,建立了一個keystone用戶與一個keystone組。並對這個用戶和組受權。由於keystone是對其餘組件認證的服務,那麼它本身就合格麼?因此它先要對本身進行一下認證
Fourth Step
配置web server整合keystone
修改主機名,方便操做
hostnamectl set-hostname controller
配置hosts
182.92.84.106 controller
配置http.conf/ServerName
ServerName controller
爲mod_wsgi模塊添加配置文件
#直接拷貝模塊文件或者作軟鏈接均可以
ln -s /usr/share/keystone/wsgi-keystone.conf /etc/httpd/conf.d/
wsgi:apache關於mod_wsgi模塊的配置文件
keystone:用來鏈接keystone
查看wsgi-keystone.conf文件
1.上面兩個端口說明keystone要開放這兩個端口,apache才能把請求交給keystone
2.Port 5000:Wsgi守護進程,進程5個,每一個進程下面一個線程,用戶keystone,組keystone。進程組/usr/bin/keystone-wsgi-public 用來產生5000端口(內部用戶與外部用戶使用)
3.Port 35357:跟上面同樣。進程組/usr/bin/keystone-wsgi-admin 用來產生35357端口(管理員使用)
Fifth Step
啓動服務
systemctl start httpd.service #啓動httpd服務
systemctl enable httpd.service #設置成開機自啓
查看服務狀態
到這裏keystone就部署完了,接下來就是如何要操做它了
如何操做keystone
一.建立keystone的catalog
配置/etc/keystone/keystone.conf
[DEFAULT] admin_token = 123 #keystone本身對本身授予令牌爲。雖然是能夠可是這樣是危險的,後面會去解決它
設置環境變量
export OS_TOKEN=123
export OS_URL=http://182.92.84.106:35357/v3 export OS_IDENTITY_API_VERSION=3
1.第一步的值等於keystone.conf中admin_token的值。而且只要在當前終端執行命令,當前終端就是管理員用戶
2.由於如今keystone沒有提供Endpoint,因此本身手動指定一個Endpoint,之後的請求就往這個url提交。v3表明用的keystone版本爲3
3.認證版本爲3
爲keystone建立catalog
openstack service create \ --name keystone --description "OpenStack Identity" identity
基於前兩步給的權限,建立認證服務實體
基於創建的服務實體,建立訪問該實體的三個api端點
openstack endpoint create --region RegionOne \ identity public http://182.92.84.106:5000/v3 openstack endpoint create --region RegionOne \ identity internal http://182.92.84.106:5000/v3 #前兩個爲5000端口,專門處理內部和外部的訪問 #用keystone-wsgi-public
openstack endpoint create --region RegionOne \
identity admin http://182.92.84.106:35357/v3 #35357端口,專門處理admin#用keystone-wsgi-admin
能夠看見上面三個的service_id同樣說明他們屬於一個服務的Endpoint
白色箭頭是訪問路徑
登陸數據庫查看keystone庫中的表
上面的步驟操做成功後,這樣keystone就能夠工做了。
二.建立域,項目(租戶),用戶,角色,並把四個元素關聯在一塊兒
在openstack中最大的資源集合就是域--->項目(租戶)--->用戶--->角色
1.建立域
1 openstack domain create --description "Default Domain" default #建立一個默認的域「default」
2.建立管理員
#建立admin項目 在「default」域中 openstack project create --domain default \ --description "Admin Project" admin
#建立admin用戶 在「default」域中 openstack user create --domain default \ --password-prompt admin #輸入密碼
#建立admin角色 openstack role create admin
#建立上述三者的關聯 openstack role add --project admin --user admin admin #不關聯用戶沒法使用
第一步與第二步的做用就是keystone可以被使用初始化的操做
你們以爲上面的兩大部分才完成一個功能有些麻煩,別急 官方最新給出了一個框架叫作Bootsrap,可以直接完成第一步和第二步的操做
如何操做的呢 請看
三
#本質就是在爲keystone建立catalog keystone-manage bootstrap --bootstrap-password 123 \ --bootstrap-admin-url http://182.92.84.106:35357/v3/ \ --bootstrap-internal-url http://182.92.84.106:35357/v3/ \ --bootstrap-public-url http://182.92.84.106:5000/v3/ \ --bootstrap-region-id RegionOne
#這個123就是上面你輸入的部分的那個密碼
#只不過用這步操做的話不用修改配置文件,不用寫admin_token,第一步與第二步的操做一點都不要去作直接就第三步
設置環境變量
export OS_USERNAME=admin #用戶名
export OS_PASSWORD=123 #就是keystone-manage中設定的--bootstrap-password
export OS_PROJECT_NAME=admin #項目名 project <-- 用戶 <--角色 若想讓用戶獲取權限必需要指定用戶所在的項目是哪一個
export OS_USER_DOMAIN_NAME=Default #默認域
export OS_PROJECT_DOMAIN_NAME=Default
export OS_AUTH_URL=http://182.92.84.106:35357/v3 #認證url
export OS_IDENTITY_API_VERSION=3 #指定版本信息
驗證關聯
對比它們的ID發現是否同樣
這些ID均可以在mysql數據庫中查到
四.使用第三種方法步驟
刪除mysql keystone數據庫
從新初始化keystone數據庫
退出環境變量
修改/etc/keystone/keystone.conf/ 下的[DEFAULT] 將admin_token=123刪掉
直接操做第三步
結束後查看assignment(openstack assignment list)看是否有結果
五.測試
建立用於後期測試用的項目,用戶,租戶,創建關聯
openstack project create --domain default \ --description "Demo Project" demo
#建立項目名爲demo
openstack user create --domain default \
--password-prompt demo
#建立普通用戶爲demo 設置密碼
openstack role create user #建立普通用戶的角色即user
openstack role add --project demo --user demo user #創建關聯
每個建立的過程都是這幾個步驟。可是會少了一步建立角色的過程。由於用戶就兩個,一個是admin,另外一個就是user(一個項目裏能夠有不少admin角色和user角色)注意.角色必定是在項目中。
六。爲後續的服務建立統一的項目叫service
由於keystone是一個獨立的受權組件,後面每搭建一個新的服務都須要在keystone中執行四種操做:1.建項目 2.建用戶 3.建角色 4.作關聯 而且建立catalog
#後面全部的服務(nova。glace等等)公用一個項目service,都是管理員角色admin (組件之間的通訊都角色都是admin) #因此實際上後續的服務安裝關於keysotne的操做只剩2,4 openstack project create --domain default \ --description "Service Project" service
每個組件,都要有一個訪問用戶。(好比訪問glance要有一個glance用戶,還有一個一個角色,還要有一個關聯)之後要部署glance,要在keystone中建立一個glance的catalog(service名/Endpoint)。還要有一個訪問catalog的用戶信息,這樣的話還要
建立一個域。可是如今已經有了一個默認的域 因此不須要再建立,域有了還要建立一個項目,可是如今項目也已經有了。service項目,因此不用建立了。就須要建立一個叫glance的用戶就好了(通常組件叫什麼名,用戶就叫什麼名)。還要建立一個角色。可是也不用建立,以前就有一個admin角色。最後就只要作一個關聯就行。之後每一個組件都要這麼作。就是說學會了keystone的部署,後面的組件也就部署好了
查看project
七.驗證
1.準備
出於安全考慮,關閉臨時令牌認證機制(配置文件中的admin_token和keystone-manage的--bootstrap-password都是基於該機制)
2.取消一切環境變量(退出xshell/puppy遠程鏈接軟件,從新鏈接)
3.驗證操做方法
管理員用戶admin申請token
openstack --os-auth-url http://controller:35357/v3 \ --os-identity-api-version 3 \ --os-project-domain-name default \ --os-user-domain-name default \ --os-project-name admin \ --os-username admin \ token issue
注意:必定要加上--os-identity-api-version 3
爲普通用戶申請token
openstack --os-auth-url http://controller:5000/v3 \ --os-identity-api-version 3 \ --os-project-domain-name default \ --os-user-domain-name default \ --os-project-name demo \ --os-username demo \ token issue
爲了之後不寫一長串的用戶信息,咱們能夠把它定義成爲一個腳本
admin
export OS_PROJECT_DOMAIN_NAME=Default export OS_USER_DOMAIN_NAME=Default export OS_PROJECT_NAME=admin export OS_USERNAME=admin export OS_PASSWORD=123 export OS_AUTH_URL=http://182.92.84.106:35357/v3 export OS_IDENTITY_API_VERSION=3 export OS_IMAGE_API_VERSION=2
user
export OS_PROJECT_DOMAIN_NAME=Default export OS_USER_DOMAIN_NAME=Default export OS_PROJECT_NAME=demo export OS_USERNAME=demo export OS_PASSWORD=123 export OS_AUTH_URL=http://182.92.84.106:35357/v3 export OS_IDENTITY_API_VERSION=3 export OS_IMAGE_API_VERSION=2
針對不一樣的業務應該有不一樣的用戶信息,也都應該定義成腳本形式,方便管理
最後申請token的操做爲
source admin
openstack token issue