1. 程式人生 > >OpenStack架構----keystone組件(一)

OpenStack架構----keystone組件(一)

一個 boa 組成 release 通信 時間源 mirrors 技術分享 公有雲

本篇博文主要搭建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:123456@controller/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

技術分享圖片

OpenStack架構----keystone組件(一)