雲計算是一種模型,可以提供不管在什麼時候何地均可以便捷獲取所需資源的模型,這些資源能夠是網絡資源、存儲資源、服務器資源,甚至是服務器或者應用軟件資源等。python
雲計算模型中有三種基本服務模型可用:mysql
- IaaS:將硬件設備等基礎資源封裝成服務供用戶使用。在IaaS環境中,用戶至關於在使用裸機和磁盤,既可讓它運行Windows,也可讓它運行Linux。 IaaS最大優點在於它容許用戶動態申請或釋放節點,按使用量計費。而IaaS是由公衆共享的,於是具備更高的資源使用效率。
- PaaS:提供用戶應用程序的運行環境,典型的如Google App Engine。PaaS自身負責資源的動態擴展和容錯管理,用戶應用程序沒必要過多考慮節點間的配合問題。但與此同時,用戶的自主權下降,必須使用特定的編程環境並遵守特定的編程模型,只適用於解決某些特定的計算問題。
- SaaS:針對性更強,它將某些特定應用軟件功能封裝成服務。SaaS既不像PaaS同樣提供計算或存儲資源類型的服務,也不像IaaS同樣提供運行用戶自定義應用程序的環境,它只提供某些專門用途的服務供應用調用。
OpenStack是一個由NASA(美國國家航空航天局)和Rackspace合做研發併發起的,以Apache許可證受權的自由軟件和開放源代碼項目。
OpenStack是一個開源的雲計算管理平臺項目,由幾個主要的組件組合起來完成具體工做。OpenStack支持幾乎全部類型的雲環境,項目目標是提供實施簡單、可大規模擴展、豐富、標準統一的雲計算管理平臺。OpenStack經過各類互補的服務提供了基礎設施即服務(IaaS)的解決方案,每一個服務提供API以進行集成。
linux
服務 | 項目名稱 | 描述 |
---|---|---|
Compute (計算服務) | Nova | 負責實例生命週期的管理,計算資源的單位。對Hypervisor進行屏蔽,支持多種虛擬化技術(KVM),支持橫向擴展。 |
Network (網絡服務) | Neutron | 負責虛擬網絡的管理。 |
Identity (身份認證服務) | Keystone | 對用戶、租戶和角色、服務 進行認證和受權 |
Dashboard (控制面板服務) | Horizon | 提供web界面管理,與OpenStack底層服務進行交互 |
Image Server (鏡像服務) | Glance | 提供虛擬機鏡像模板的註冊與管理,將最好系統複製爲鏡像模板,在建立虛擬機時直接使用。 |
Block Storage (塊存儲服務) | Cinder | 負責爲容許實例提供持久的塊存儲設備,可進行方便擴展,按需付費,支持多種後端存儲。 |
Object Storage (對象存儲服務) | Swift | 爲OpenStack提供基於雲的彈性存儲,支持羣集無單點故障 |
Telemetry (計量服務) | Ceilometer | 用於度量、監控和控制數據資源的集中來源,爲OpenStack用戶提供記帳途徑 |
主機名 | IP | 備註 |
---|---|---|
controller | 192.168.200.133 | 控制節點 |
compute | 192.168.200.134 | 計算節點 |
cinder | 192.168.200.143 | 塊存儲節點 |
分別配置主機名和hosts文件web
# hostnamectl set-hostname controller # bash //控制節點 # hostnamectl set-hostname compute # bash //計算節點 # hostnamectl set-hostname cinder # bash //塊存儲節點 # vim /etc/hosts //三臺都要操做 192.168.200.133 controller 192.168.200.134 compute 192.168.200.143 cinder
關閉防火牆算法
# systemctl stop firewalld # systemctl disable firewalld # setenforce 0 # reboot //重啓系統(非必須)
控制節點:sql
# yum install chrony -y # vi /etc/chrony.conf server controller iburst allow 192.168.200.0/24 # systemctl enable chronyd.service # systemctl start chronyd.service # chronyc sources
網絡節點 & 計算節點數據庫
# yum install chrony -y # vi /etc/chrony.conf # server controller iburst # systemctl enable chronyd.service # systemctl start chronyd.service # chronyc sources
安裝OpenStack軟件倉庫 & OpenStack client編程
# mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup 備份默認yum源 # wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo 下載最新yum源 # yum install -y centos-release-openstack-queens //配置OpenStack yum庫 # yum upgrade -y //更新 # yum install -y python-openstackclient //安裝OpenStack客戶端 # yum install -y openstack-selinux //方便自動管理OpenStack服務的安全策略
安裝並配置SQL數據庫bootstrap
大多數 OpenStack 服務使用 SQL 數據庫來存儲信息。 典型地,數據庫運行在控制節點上。指南中的步驟依據不一樣的發行版使用MariaDB或 MySQL。OpenStack 服務也支持其餘 SQL 數據庫vim
# yum install mariadb mariadb-server python2-PyMySQL -y # vim /etc/my.cnf.d/openstack.cnf [mysqld] bind-address = 192.168.200.133 default-storage-engine = innodb innodb_file_per_table = on max_connections = 4096 collation-server = utf8_general_ci character-set-server = utf8 # systemctl enable mariadb.service //開啓自啓動 # systemctl start mariadb.service # mysql_secure_installation //基礎設置(設置密碼 其餘所有Y)
安裝並配置消息隊列
OpenStack 使用 message queue 協調操做和各服務的狀態信息。消息隊列服務通常運行在控制節點上。
# yum install rabbitmq-server -y # /usr/lib/rabbitmq/bin/rabbitmq-plugins list //查看插件安裝狀況 # /usr/lib/rabbitmq/bin/rabbitmq-plugins enable rabbitmq_management //啓用rabbitmq_management服務 # systemctl start rabbitmq-server.service # systemctl enable rabbitmq-server # rabbitmqctl add_user openstack RABBIT_PASS //添加 openstack 用戶 , RABBIT_PASS 爲密碼 # rabbitmqctl set_permissions openstack ".*" ".*" ".*" //給openstack用戶配置寫和讀權限
訪問 httpd://192.168.200.133:15672 能夠看到web管理頁面
安裝並配置Memcached
認證服務認證緩存使用Memcached緩存令牌。緩存服務memecached運行在控制節點。在生產部署中,咱們推薦聯合啓用防火牆、認證和加密保證它的安全。
#yum install memcached python-memcached -y # vi /etc/sysconfig/memcached OPTIONS="-l 127.0.0.1,::1,controller" # systemctl enable memcached.service # systemctl restart memcached.service
安裝並配置etcd
OpenStack服務可使用Etcd,一種分佈式可靠的鍵值存儲,用於分佈式密鑰鎖定,存儲配置,跟蹤服務生存和其餘場景。
# yum install etcd -y # vi /etc/etcd/etcd.conf #[Member] ETCD_DATA_DIR="/var/lib/etcd/default.etcd" ETCD_LISTEN_PEER_URLS="http://192.168.200.133:2380" //宣告羣集地址 ETCD_LISTEN_CLIENT_URLS="http://192.168.200.133:2379" //監聽客戶端地址 ETCD_NAME="controller" #[Clustering] ETCD_INITIAL_ADVERTISE_PEER_URLS="http://192.168.200.133:2380" ETCD_ADVERTISE_CLIENT_URLS="http://192.168.200.133:2379" ETCD_INITIAL_CLUSTER="controller=http://192.168.200.133:2380" ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster-01" ETCD_INITIAL_CLUSTER_STATE="new" # systemctl enable etcd # systemctl start etcd
Keystone爲全部OpenStack服務提供身份認證和受權,跟蹤用戶以及它們的權限,提供一個可用服務以及API的列表。接收前臺請求的Keystone API和後臺的Keystone-db
身份服務包含這些組件:
.
- 服務器 : 一箇中心化的服務器使用RESTful 接口來提供認證和受權服務。
- 驅動 :驅動或服務後端被整合進集中式服務器中。它們被用來訪問OpenStack外部倉庫的身份信息, 而且它們可能已經存在於OpenStack被部署在的基礎設施(例如,SQL數據庫或LDAP服務器)中。
- 模塊: 中間件模塊運行於使用身份認證服務的OpenStack組件的地址空間中。這些模塊攔截服務請求,取出用戶憑據,並將它們送入中央是服務器尋求受權。中間件模塊和OpenStack組件間的整合使用Python Web服務器網關接口。
.
當安裝OpenStack身份服務,用戶必須將之註冊到其OpenStack安裝環境的每一個服務。身份服務才能夠追蹤那些OpenStack服務已經安裝,以及在網絡中定位它們。
這個配置部署Fernet令牌和Apache HTTP服務處理請求。
建立Keystone 用戶、數據庫並分配訪問權限
# mysql -u root -p > CREATE DATABASE keystone; //建立keystone數據庫 授予對keystone數據庫的適當訪問權限: > GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'localhost' \ IDENTIFIED BY 'KEYSTONE_DBPASS'; > GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'%' \ IDENTIFIED BY 'KEYSTONE_DBPASS';
安裝並配置
# yum install -y openstack-keystone httpd mod_wsgi # vi /etc/keystone/keystone.conf [database] 在該[database]部分中 配置數據庫訪問 connection = mysql+pymysql://keystone:KEYSTONE_DBPASS@controller/keystone [token] 在該[token]部分中,配置Fernet令牌提供程序 provider = fernet //安全消息傳遞算法
構建身份認證服務的數據庫、同步數據庫
# su -s /bin/sh -c "keystone-manage db_sync" keystone
初始化 Fernet key
# keystone-manage fernet_setup --keystone-user keystone --keystone-group keystone # keystone-manage credential_setup --keystone-user keystone --keystone-group keystone
管理員的密碼爲 ADMIN_PASS
# keystone-manage bootstrap --bootstrap-password ADMIN_PASS \ --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 HTTP 服務
# vi /etc/httpd/conf/httpd.conf ServerName controller //配置ServerName引用控制器節點 # ln -s /usr/share/keystone/wsgi-keystone.conf /etc/httpd/conf.d/ # systemctl enable httpd.service # systemctl start httpd.service
設置環境變量
# export OS_USERNAME=admin # export OS_PASSWORD=ADMIN_PASS # 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
建立domain, projects, users, and roles
建立域example # openstack domain create --description "An Example Domain" example 建立service 項目 # openstack project create --domain default --description "Service Project" service 建立demo項目 # openstack project create --domain default --description "Demo Project" demo 建立demo用戶 # openstack user create --domain default --password-prompt demo 這裏輸入密碼: DEMO_PASS 建立user角色 # openstack role create user 將user角色添加到demo項目和用戶 # openstack role add --project demo --user demo user
驗證操做:
取消設置臨時 變量OS_AUTH_URL和OS_PASSWORD環境變量:
# unset OS_AUTH_URL OS_PASSWORD
做爲admin用戶,請求身份驗證令牌:
# 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 //這裏輸入密碼 ADMIN_PASS
做爲demo用戶,請求身份驗證令牌:
# 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 //這裏輸入密碼 DEMO_PASS
建立腳本
建立客戶端環境的腳本admin和demo 項目和用戶。本指南的將來部分引用這些腳原本加載客戶端操做的適當憑據。
客戶端環境腳本的路徑不受限制。爲方便起見,您能夠將腳本放在任何位置,但請確保它們能夠訪問並位於適合部署的安全位置,由於它們包含敏感憑據。
OpenStack客戶端還支持使用clouds.yaml文件。有關更多信息,請參閱os-client-config。
建立和編輯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=ADMIN_PASS export OS_AUTH_URL=http://controller:5000/v3 export OS_IDENTITY_API_VERSION=3 export OS_IMAGE_API_VERSION=2
建立和編輯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=DEMO_PASS export OS_AUTH_URL=http://controller:5000/v3 export OS_IDENTITY_API_VERSION=3 export OS_IMAGE_API_VERSION=2
使用腳本
要將客戶端做爲特定項目和用戶運行,只需在運行它們以前加載關聯的客戶端環境腳本便可。例如:
加載admin-openrc文件以使用Identity服務的位置以及admin項目和用戶憑據填充環境變量:
# source demo-openrc 或者 # source admin-openrc # openstack token issue //請求身份驗證令牌