OpenStack架構----keystone元件(一)
本篇博文主要搭建OpenStack架構中的keystone元件,之後會依次帶來OpenStack中的glance、nova、neutron、horizon、cinder和虛擬機器的管理操作。在實驗部署之前,先對OpenStack進行以下了解!
什麼是OpenStack?
OpenStack既是一個社群,也是一個專案和一個開源軟體,提供開放原始碼軟體,建立公共和私有云,它提供了一個部署雲的操作平臺或工具集,其宗旨在於:幫助組織執行為虛擬計算或儲存服務的雲,為公有云、私有云,也為大雲、小云提供可擴充套件的、靈活的雲端計算。
OpenStackd開源專案由社群維護,包括OpenStack計算(代號為Nova),OpenStack物件儲存(代號為Swift),並OpenStack映象服務(代號Glance)的集合。 OpenStack提供了一個操作平臺,或工具包,用於編排雲。
OpenStack元件:
OpenStack當前主要有三個元件:計算,儲存,映象。
- OpenStack計算是一個雲控制器,用來啟動一個使用者或一個組的虛擬例項,它也用於配置每個例項或專案中包含多個例項為某個特定專案的聯網。
- OpenStack物件儲存是一個在具有內建冗餘和容錯的大容量系統中儲存物件的系統。物件儲存有各種應用,如備份或存檔資料,儲存圖形或視訊,儲存二級或三級靜態資料,發展與資料儲存整合新的應用程式。
- OpenStack映象服務是一個查詢和虛擬機器影象檢索系統。它可以配置三種方式:使用OpenStack物件儲存來儲存影象;使用亞馬遜S3直接儲存,或使用S3物件儲存作為S3訪問中間儲存。
OpenStack構成
整個OpenStack是由控制節點,計算節點,網路節點,儲存節點四大部分組成。
控制節點:負責對其餘節點的控制,包含虛擬機器建立,遷移,網路分配,儲存分配等等
計算節點:負責虛擬機器執行
網路節點:負責對外網路與內網路之間的通訊
儲存節點:負責對虛擬機器的額外儲存管理等等控制節點架構
控制節點包括以下服務:
- 管理支援服務
- 基礎管理服務
- 擴充套件管理服務
1)管理支援服務包含MySQL與Qpid兩個服務
MySQL:資料庫作為基礎/擴充套件服務產生的資料存放的地方
Qpid:訊息代理(也稱訊息中介軟體)為其他各種服務之間提供了統一的訊息通訊服務
2)基礎管理服務包含Keystone,Glance,Nova,Neutron,Horizon五個服務
Keystone:認證管理服務,提供了其餘所有元件的認證資訊/令牌的管理,建立,修改等等,使用MySQL作為統一的資料庫
Glance:映象管理服務,提供了對虛擬機器部署的時候所能提供的映象的管理,包含映象的匯入,格式,以及製作相應的模板
Nova:計算管理服務,提供了對計算節點的Nova的管理,使用Nova-API進行通訊
Neutron:網路管理服務,提供了對網路節點的網路拓撲管理,同時提供Neutron在Horizon的管理面板
Horizon:控制檯服務,提供了以Web的形式對所有節點的所有服務的管理,通常把該服務稱為DashBoard
3)擴充套件管理服務包含Cinder,Swift,Trove,Heat,Centimeter五個服務
Cinder:提供管理儲存節點的Cinder相關,同時提供Cinder在Horizon中的管理面板
Swift:提供管理儲存節點的Swift相關,同時提供Swift在Horizon中的管理面板
Trove:提供管理資料庫節點的Trove相關,同時提供Trove在Horizon中的管理面板
Heat:提供了基於模板來實現雲環境中資源的初始化,依賴關係處理,部署等基本操作,也可以解決自動收縮,負載均衡等高階特性。
Centimeter:提供對物理資源以及虛擬資源的監控,並記錄這些資料,對該資料進行分析,在一定條件下觸發相應動作。實驗環境:
本實驗需三臺虛擬機器,分別為控制節點(包含映象服務)、計算節點、儲存節點;建議三臺虛擬機器配置2個CPU,記憶體設定為4G。
主機 | 系統 | IP地址 | 角色 |
---|---|---|---|
controller | CentOS7 | 192.168.37.128 | keystone、ntp、mariadb、rabbitmq、memcached、etcd、apache |
compute | CentOS7 | 192.168.37.130 | nova、ntp |
cinder | CentOS7 | 192.168.37.131 | cinder、ntp |
實驗過程:
一、環境準備(三臺虛擬機器)
1、關閉防火牆 關閉selinux
systemctl stop firewalld.service
setenforce 0
2、分別修改主機名
hostnamectl set-hostname controller #控制節點
bash
hostnamectl set-hostname compute #計算節點
bash
hostnamectl set-hostname cinder #儲存節點
bash
3、修改hosts檔案
vim /etc/hosts
192.168.37.128 controller
192.168.37.130 compute
192.168.37.131 cinder
4、節點互通測試
ping -c 4 openstack.org #傳送4個包測試官網聯通
ping -c 4 compute
ping -c 4 openstack.org #計算節點測試
ping -c 4 controller
ping -c 4 openstack.org #儲存節點測試
ping -c 4 controller
5、備份預設yum源
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
6、下載最新yum源
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
7、安裝所需openstack軟體包
yum install centos-release-openstack-queens -y
yum upgrade -y #更新軟體倉庫
yum install python-openstackclient -y
yum install openstack-selinux -y
二、配置NTP時鐘服務
##controller節點##
1、yum安裝chrony軟體包
yum install chrony -y
2、修改chrony配置檔案
vim /etc/chrony.conf #檔案開頭插入
server controller iburst #自己為時間源點所有節點向controller節點同步時間
allow 192.168.37.0/24 #設定時間同步網段
3、開啟NTP服務
systemctl enable chronyd
systemctl stop chronyd
systemctl start chronyd
#因chrony服務本身開機自啟動,所以需要關閉後重新開啟
##其他節點配置##
1、yum安裝chrony軟體包
yum install chrony -y
2、修改chrony配置檔案
vim /etc/chrony.conf
server controller iburst #同步controller
3、開啟服務
systemctl stop chronyd
systemctl start chronyd
4、controller上驗證時鐘同步服務
chronyc sources
三、資料庫部署(controller節點)
1、yum安裝mariadb
yum install mariadb mariadb-server python2-PyMySQL -y
2、修改mariadb配置檔案
vim /etc/my.cnf.d/mariadb-server.cnf
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
log-error=/var/log/mariadb/mariadb.log
pid-file=/var/run/mariadb/mariadb.pid
#以下是新增內容
bind-address = 192.168.37.128 #繫結地址controller
default-storage-engine = innodb #預設儲存引擎
innodb_file_per_table = on #獨立表空間
max_connections = 4096 #最大連線
collation-server = utf8_general_ci #字符集設定
character-set-server = utf8
3、開啟mariadb服務,設定開啟自啟動
systemctl enable mariadb.service
systemctl start mariadb.service
4、資料庫基本設定
mysql_secure_installation
#基本設定,除設定密碼為abc123外全部回車
四、rabbitmq服務部署(controller節點)
1、yum安裝rabbitmq-server包
yum install rabbitmq-server -y
2、開啟rabbitmq服務,設定開啟自啟動
systemctl enable rabbitmq-server.service
systemctl start rabbitmq-server.service
3、重啟服務後新增使用者及許可權
rabbitmqctl add_user openstack 123456 #新增使用者
rabbitmqctl set_permissions openstack "." "." ".*"
五、memcached服務部署(controller節點)
1、yum安裝memcached包
yum install memcached python-memcached -y
2、修改memcached配置檔案
vim /etc/sysconfig/memcached
PORT="11211"
USER="memcached"
MAXCONN="1024"
CACHESIZE="64"
OPTIONS="-l 192.168.37.128,::1" #修改監聽IP地址
3、開啟memcached服務,設定開啟自啟動
systemctl enable memcached.service
systemctl start memcached.service
六、ETCD服務發現機制部署(controller節點)
- etcd是一個高可用的分散式鍵值(key-value)資料庫
- 用於服務發現,服務發現(ServiceDiscovery)要解決的是分散式系統中最常見的問題之一,即在同一個分散式叢集中的程序或服務如何才能找到對方並建立連線
1、yum安裝etcd包
yum install etcd -y
2、修改etcd配置檔案,結果如下:
ETCD_INITIAL_CLUSTER #開啟群集功能:匹配群集中所有url地址(public、admin、internal)
ETCD_INITIAL_ADVERTISE_PEER_URLS
ETCD_ADVERTISE_CLIENT_URLS
ETCD_LISTEN_CLIENT_URLS
[Member]
ETCD_DATA_DIR="/var/lib/etcd/default.etcd" #檔案存放位置
ETCD_LISTEN_PEER_URLS="http://192.168.37.128:2380" #監聽群集服務端地址
ETCD_LISTEN_CLIENT_URLS="http://192.168.37.128:2379" #宣告客戶端地址
ETCD_NAME="controller"
[Clustering] #匹配群集地址
ETCD_INITIAL_ADVERTISE_PEER_URLS="http://192.168.37.128:2380" #控制端地址
ETCD_ADVERTISE_CLIENT_URLS="http://192.168.37.128:2379" #客戶端地址
ETCD_INITIAL_CLUSTER="controller=http://192.168.37.128:2380" #群集名稱設定
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster-01" #令牌設定
ETCD_INITIAL_CLUSTER_STATE="new"
3、開啟etcd服務,設定開機自啟動
systemctl enable etcd.service
systemctl start etcd.service
七、keystone認證(controller節點)
1、單獨建立資料庫keystone,宣告使用者並授權
mysql -uroot -p #密碼abc123
create database keystone;
grant all privileges on keystone. to 'keystone'@'localhost' identified by '123456'; #本地使用者授權
grant all privileges on keystone. to 'keystone'@'%' identified by '123456';
flush privileges; #其他使用者授權
2、yum安裝軟體包
yum install openstack-keystone httpd mod_wsgi -y
3、編輯keystone配置檔案
vim /etc/keystone/keystone.conf
[database]
#737行
connection = mysql+pymysql://keystone:[email protected]/keystone
[token]
#2922行
provider = fernet #安全訊息傳遞演算法
4、同步資料庫
su -s /bin/sh -c "keystone-manage db_sync" keystone
5、初始化資料庫
keystone-manage fernet_setup --keystone-user keystone --keystone-group keystone
keystone-manage credential_setup --keystone-user keystone --keystone-group keystone
6、給管理員設定密碼,註冊三種訪問方式
keystone-manage bootstrap --bootstrap-password 123456 \
--bootstrap-admin-url http://controller:35357/v3/ \
--bootstrap-internal-url http://controller:5000/v3/ \
--bootstrap-public-url http://controller:5000/v3/ \
--bootstrap-region-id RegionOne
八、Apache服務部署
1、編輯httpd配置檔案
vim /etc/httpd/conf/httpd.conf
ServerName controller
2、建立軟連線,使apache識別keystone
ln -s /usr/share/keystone/wsgi-keystone.conf /etc/httpd/conf.d/
3、開啟Apache服務,設定開機自啟動
systemctl enable httpd.service
systemctl start httpd.service
4、宣告環境變數
export OS_USERNAME=admin
export OS_PASSWORD=123456
export OS_PROJECT_NAME=admin
export OS_USER_DOMAIN_NAME=Default
export OS_PROJECT_DOMAIN_NAME=Default
export OS_AUTH_URL=http://controller:35357/v3
export OS_IDENTITY_API_VERSION=3
九、建立demo平臺管理
1、建立域Domain
openstack domain create --description "Domain" example
2、建立專案Service Project
openstack project create --domain default --description "Service Project" service
3、建立平臺demo專案
openstack project create --domain default --description "Demo Project" demo
4、建立demo使用者
openstack user create --domain default --password-prompt demo
#輸入密碼:123456
5、建立使用者角色
openstack role create user
6、新增使用者角色到demo專案和使用者
openstack role add --project demo --user demo user
十、驗證keystone的操作
1、取消環境變數
unset OS_AUTH_URL OS_PASSWORD
2、admin使用者返回的認證token
openstack --os-auth-url http://controller:35357/v3 \
--os-project-domain-name Default --os-user-domain-name Default \
--os-project-name admin --os-username admin token issue
#密碼:123456
3、demo使用者返回的認證token
openstack --os-auth-url http://controller:5000/v3 \
--os-project-domain-name Default --os-user-domain-name Default \
--os-project-name demo --os-username demo token issue
#密碼:123456
4、建立admin-openrc指令碼
vim admin-openrc
export OS_PROJECT_DOMAIN_NAME=Default
export OS_USER_DOMAIN_NAME=Default
export OS_PROJECT_NAME=admin
export OS_USERNAME=admin
export OS_PASSWORD=123456
export OS_AUTH_URL=http://controller:5000/v3
export OS_IDENTITY_API_VERSION=3
export OS_IMAGE_API_VERSION=2
5、建立demo-openrc指令碼
vim demo-openrc
export OS_PROJECT_DOMAIN_NAME=Default
export OS_USER_DOMAIN_NAME=Default
export OS_PROJECT_NAME=demo
export OS_USERNAME=demo
export OS_PASSWORD=123456
export OS_AUTH_URL=http://controller:5000/v3
export OS_IDENTITY_API_VERSION=3
export OS_IMAGE_API_VERSION=2
6、使用指令碼,返回認證token
source ~/admin-openrc
openstack token issue