#!/bin/bash
$ q1 w5 ~+ p1 g/ x7 o2 c7 m! @: N
#Centos8最小化部署安装OpenStack Ussuri
) L* L% X0 \7 k: b7 `8 v4 [#共两台主机,分别是一台控制节点,一台计算节点
4 V+ B# [! H) t5 Z9 w9 g. b
#1、控制节点内存4096M。双网卡,分别为eth0:10.0.0.11,eth1:10.0.0.12
0 L7 L$ v- i* B5 `1 D2 W#2、计算节点内存4096M。双网卡,分别为eth0:10.0.0.31,eth1:10.0.0.32
7 V3 K3 ^! a$ H3 L, G+ V- D4 G; v' H: C4 V# ?
#设置阿里云yum源
9 b( z7 J. Z2 ~' u: x5 i' c) H9 C
rm -f /etc/yum.repos.d/CentOS-AppStream.repo /etc/yum.repos.d/CentOS-PowerTools.repo /etc/yum.repos.d/CentOS-centosplus.repo /etc/yum.repos.d/CentOS-Extras.repo && rm -rf /var/cache/yum && yum makecache && yum -y update && yum -y autoremove
1 c/ n0 n( v) p( R
1 G# ~! y' }% m! s. s2 F$ Q# A2 H#关闭防火墙
1 V0 K) q5 Q" q% w U) U8 D
systemctl stop firewalld && systemctl disable firewalld
; |4 J! r* Q; `9 ~" j
1 s7 v9 z% _3 M, z! N/ J" D
#关闭SELinux
$ ^6 G* Y1 e4 Z9 _/ dsetenforce 0
1 e3 j$ `- K5 H; Y8 Msed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config
6 [* W: E; h6 M. k; y
/ k/ Z) T9 u x- s/ I#关闭swap分区
% b% C" Z) e K
swapoff -a
* ~' D4 K) u- l( ?" q* {# K( C) o
sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
8 H5 g9 W( F. S" ]0 n' P7 [5 |! k
p+ f2 W2 n C6 j
#设置内核
, T9 _! e" ]7 p4 z1 Jmodprobe bridge
9 [; L& a" z/ R2 U' g& ^* k( M
modprobe br_netfilter
( l9 ~* N. L" r5 O8 z6 v
cat > /etc/sysconfig/modules/neutron.modules <<EOF
; B$ Q0 p* h+ H; `* w+ c4 Z; z#!/bin/bash
- S7 S6 E* D8 q! O p
modprobe -- bridge
$ p* r+ `8 |: X" j) W. }/ ~3 `/ vmodprobe -- br_netfilter
3 T/ z( s- m5 b' L; SEOF
5 @2 M& i9 m+ H1 h! D" Uchmod 755 /etc/sysconfig/modules/neutron.modules && bash /etc/sysconfig/modules/neutron.modules
+ z+ l/ [& {' W7 ^# D4 decho "vm.max_map_count=262144" >> /etc/sysctl.conf
$ l3 [. \5 M! m4 _
echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
7 r# w/ m. [1 s& ^, O
echo "net.bridge.bridge-nf-call-iptables=1" >> /etc/sysctl.conf
8 S y' F4 z1 A9 V9 _6 ^. b
echo "net.bridge.bridge-nf-call-ip6tables=1" >> /etc/sysctl.conf
8 E9 N% N1 V5 U, y* Dsysctl -p
9 }" p+ f# g% @7 \6 O7 X" M
$ a" _" k6 T1 Q1 ?6 ~
#设置时间同步
, I, M$ s, b6 y/ x( `" q, h' O3 wyum install -y chrony && yum -y autoremove
, O D' E& B1 n, hsed -i '/^pool/d' /etc/chrony.conf
' c! C: j' \" c" w8 qsed -i '/^server/d' /etc/chrony.conf
9 W7 X) Q" r9 t8 Z3 l2 Oecho "pool ntp.aliyun.com iburst" >> /etc/chrony.conf
) _' \" P: g+ u* A- Tsystemctl start chronyd.service && systemctl enable chronyd.service
9 M4 ~& q2 u0 s: }
8 t' Z! Z- ]2 F# [% a#控制节点 设置hostname
5 w- o0 u7 z4 c; j
hostnamectl set-hostname controller
' i3 n( t3 h% M* A
4 w- _" h- X% y! P1 G#计算节点 设置hostname
9 M) @' r9 @, z- F( V/ t$ r+ S) Nhostnamectl set-hostname compute1
0 [3 n& {+ ?- y( e$ X9 y" f
# `- n/ e, O* z' \0 S/ ~#添加host
: b# b |' I' {7 i! O* W& ^echo "10.0.0.11 controller" >> /etc/hosts
9 F) ^8 P+ M. S5 m
echo "10.0.0.31 compute1" >> /etc/hosts
& K& c* D3 L# o7 m. A, q9 l% ~
8 Z: b5 m2 Y6 [9 V; l#安装基础组件
0 F& o( W5 X: k1 @
yum install -y centos-release-openstack-ussuri
: T. z+ u6 p; q/ `; h8 k" ^yum config-manager --set-enabled PowerTools
7 w$ F- D- Z) t. f% m" U
yum upgrade -y
$ G0 _/ p* \9 I
yum install -y python3-openstackclient
. L; |9 h% M" H
9 N6 W/ I% c& g#控制节点 安装Mariadb
* x, `+ A& r" T
yum install -y mariadb mariadb-server python2-PyMySQL
/ R- h0 C9 W9 B0 K0 r9 w( ~tee /etc/my.cnf.d/openstack.cnf <<-'EOF'
W* `8 }+ }6 K# ~, {( Q
[mysqld]
; A; Y9 [2 O8 I: C, U
bind-address = 10.0.0.11
+ [ n# c8 D. U5 Z( e8 _& ?6 @
default-storage-engine = innodb
$ W& y8 q* L1 W/ Z$ _
innodb_file_per_table = on
; J3 w! {4 j$ D1 H5 m; Umax_connections = 4096
) B5 A' q9 E+ h( I9 h( P
collation-server = utf8_general_ci
8 \1 M$ x" b4 T: i
character-set-server = utf8
" z0 ]1 l+ E' ^5 u, ]! ?2 yEOF
3 a. f" D) p5 l; Y
systemctl enable mariadb.service && systemctl start mariadb.service
# M2 ~( k* ~7 F" D7 t/ Z
echo -e "\nY\n123456\n123456\nY\nn\nY\nY\n" | mysql_secure_installation
# i$ Q. T: K- C X* q" `2 O2 f$ R7 c2 P2 L9 f# `* {* o3 b
#控制节点 安装RabbitMQ
9 t2 U8 x4 _3 L3 Q8 K
yum install -y rabbitmq-server
' g# U: N+ y9 V E3 Z3 Usystemctl enable rabbitmq-server.service && systemctl start rabbitmq-server.service
5 u# e+ P: s3 o; p) Drabbitmqctl add_user openstack 123456
( j) C1 {) d+ ?" [5 _" Wrabbitmqctl set_permissions openstack ".*" ".*" ".*"
; c6 X! ]1 t7 W2 z
, T3 p; b; ^( Z6 ^; X7 c#控制节点 安装Memcached
+ o" b( {: R9 G* h6 vyum install -y memcached python3-memcached
; H2 w7 z/ y2 a4 tsed -i "s/-l 127.0.0.1,::1/-l 127.0.0.1,::1,controller/g" /etc/sysconfig/memcached
$ M% S! t! A: l: G$ vsystemctl enable memcached.service && systemctl start memcached.service
% y* c1 r c! M( L
6 `; ?% J$ R& }: _4 @2 `/ _#控制节点 安装Etcd
% G' T, z' Z) Q' o5 \6 b
yum install -y etcd
% {7 D7 C$ ^( w/ k# d3 {- zrm -f /etc/etcd/etcd.conf
4 Q- g0 ]/ x! e$ s7 q, N- t
tee /etc/etcd/etcd.conf <<-'EOF'
+ V2 g" _7 \8 E& K
#[Member]
# ~4 ?5 m% M( ^& M% L
ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
5 M9 e7 R) Y( l& g# t& ~
ETCD_LISTEN_PEER_URLS="http://10.0.0.11:2380
" : u8 G, S( p) y3 B7 ?4 b% z7 A
ETCD_LISTEN_CLIENT_URLS="http://10.0.0.11:2379
" 2 _. X. `$ M! Y* ?7 @# I
ETCD_NAME="controller"
6 c: }" E+ `! s1 T7 {#[Clustering]
# z* ]* i2 c2 r1 ?5 L0 Y0 {, [
ETCD_INITIAL_ADVERTISE_PEER_URLS="http://10.0.0.11:2380
"
7 p% F& b0 Q0 s* n9 ^ETCD_ADVERTISE_CLIENT_URLS="http://10.0.0.11:2379
" ; M- t# a% t7 ` B. ~) _4 {
ETCD_INITIAL_CLUSTER="controller=http://10.0.0.11:2380
" 6 R; @7 @! L7 S; c9 L( P- |; M1 K3 h
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster-01"
+ E3 Z: o/ s! e' P6 LETCD_INITIAL_CLUSTER_STATE="new"
3 `, ^8 F; O$ Y
EOF
" z6 ]+ u) }4 [. s, i
systemctl enable etcd && systemctl start etcd
) S; I: g1 [+ _
3 H0 B" b9 @# F4 |+ Q9 u#控制节点 安装Identity service
X2 Y; `+ r" ?, C
mysql -uroot -p123456 -e "CREATE DATABASE keystone"
; L h& X" |7 Amysql -uroot -p123456 -e "GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'localhost' IDENTIFIED BY '123456'"
/ d% i! e+ E" Pmysql -uroot -p123456 -e "GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'%' IDENTIFIED BY '123456'"
1 l+ A m7 a4 wyum install -y openstack-keystone httpd python3-mod_wsgi
% i4 [) f4 _( S/ m/ r& n* @% n$ E+ Xsed -i "556c connection = mysql+pymysql://keystone:123456@controller/keystone
" /etc/keystone/keystone.conf * l" T Q# \% P: D
sed -i "2418c provider = fernet" /etc/keystone/keystone.conf
1 {( s l* ~8 }su -s /bin/sh -c "keystone-manage db_sync" keystone
8 |4 A' i+ U- a& G' v& y1 Z# W2 T
keystone-manage fernet_setup --keystone-user keystone --keystone-group keystone
* P) T$ @# M' f8 t! g5 k0 x
keystone-manage credential_setup --keystone-user keystone --keystone-group keystone
- Z8 {- v# h# E) l, b6 ]4 d3 Dkeystone-manage bootstrap --bootstrap-password 123456 \
0 O4 C2 {+ z& P0 I0 z
--bootstrap-admin-url http://controller:5000/v3/ \
; j' v/ t" _3 \2 E2 N3 C3 I- Q, d. c0 S --bootstrap-internal-url http://controller:5000/v3/ \
8 I5 {& P- L* s- z+ e; ~' e --bootstrap-public-url http://controller:5000/v3/ \
6 d, o7 o5 Y) H3 ^
--bootstrap-region-id RegionOne
1 z8 i3 r: W1 d8 Z# `% _echo "ServerName controller" >> /etc/httpd/conf/httpd.conf
" C4 x z( \9 ~, Pln -s /usr/share/keystone/wsgi-keystone.conf /etc/httpd/conf.d/
1 }# U) x! J o- r, G3 k. B
systemctl enable httpd.service && systemctl start httpd.service
1 e: J# r: x7 Z1 [echo "export OS_USERNAME=admin" >> /etc/profile
; y- I9 r: F+ O* w ?* F L
echo "export OS_PASSWORD=123456" >> /etc/profile
4 m2 G- A ]: Z( m/ cecho "export OS_PROJECT_NAME=admin" >> /etc/profile
- R; p4 F" |( G9 u7 S/ n
echo "export OS_USER_DOMAIN_NAME=Default" >> /etc/profile
: O0 K1 R- |. L. r c
echo "export OS_PROJECT_DOMAIN_NAME=Default" >> /etc/profile
& h8 }* i/ H1 Q9 {echo "export OS_AUTH_URL=http://controller:5000/v3
" >> /etc/profile $ `: V- ~: h0 [1 B
echo "export OS_IDENTITY_API_VERSION=3" >> /etc/profile
4 _) _& p: N* C, p) L$ Lsource /etc/profile
; s; g3 T/ [& P% q( \. bopenstack project create --domain default --description "Service Project" service
% n( t& F; B2 Q( I7 ]
- S" J# m- y }$ p7 K% f# `#控制节点 安装Image service
% _" l8 u; u4 H4 Vmysql -uroot -p123456 -e "CREATE DATABASE glance"
3 Q2 m; v9 \- o l! A; D0 ^mysql -uroot -p123456 -e "GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'localhost' IDENTIFIED BY '123456'"
: I, F# w* ^, e' y. u9 Wmysql -uroot -p123456 -e "GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'%' IDENTIFIED BY '123456'"
5 a4 D3 F$ t; M' @5 M9 P k! C. I
openstack user create --domain default --password 123456 glance
4 k: B, p' w* F% }6 B8 `! |) ^' L5 B% Aopenstack role add --project service --user glance admin
/ b( @4 g. l0 J' Q
openstack service create --name glance --description "OpenStack Image" image
. X5 v( }2 g, kopenstack endpoint create --region RegionOne image public http://controller:9292
8 e$ G+ p5 G! N' R7 Aopenstack endpoint create --region RegionOne image internal http://controller:9292
$ l- r- S' f: J& O) `8 n4 jopenstack endpoint create --region RegionOne image admin http://controller:9292
$ g* t3 c1 C7 D% {* lyum install -y openstack-glance
! _) Y4 E5 Q4 h j6 b2 j
sed -i "2062c connection = mysql+pymysql://glance:123456@controller/glance
" /etc/glance/glance-api.conf
1 D6 r: u5 [# o" g. b6 M+ j) Wsed -i "5034c www_authenticate_uri = http://controller:5000
" /etc/glance/glance-api.conf ) T8 N3 S0 n' X: C
sed -i "5035c auth_url = http://controller:5000
" /etc/glance/glance-api.conf ( p! s1 G/ ]' p) a
sed -i "5036c memcached_servers = controller:11211" /etc/glance/glance-api.conf
9 h% u3 x$ `- O, Bsed -i "5037c auth_type = password" /etc/glance/glance-api.conf
$ T& M- P& q/ W( Z0 ?5 \sed -i "5038c project_domain_name = Default" /etc/glance/glance-api.conf
; h8 F: L. v _( |
sed -i "5039c user_domain_name = Default" /etc/glance/glance-api.conf
3 s! t2 N$ ?# K( K5 n
sed -i "5040c project_name = service" /etc/glance/glance-api.conf
* r4 m, Z, m: c4 t* C0 E* V
sed -i "5041c username = glance" /etc/glance/glance-api.conf
- e0 `1 s! k% T+ B H
sed -i "5042c password = 123456" /etc/glance/glance-api.conf
8 W+ {% S0 s5 Ised -i "5678c flavor = keystone" /etc/glance/glance-api.conf
1 A0 I4 Z5 j+ F& hsed -i "3413c stores = file,http" /etc/glance/glance-api.conf
; i& i2 _: p. }4 |/ Ssed -i "3414c default_store = file" /etc/glance/glance-api.conf
1 w! q/ t1 l$ t/ B
sed -i "3415c filesystem_store_datadir = /var/lib/glance/images/" /etc/glance/glance-api.conf
% d, A2 r5 d; j
su -s /bin/sh -c "glance-manage db_sync" glance
! L1 {, f9 r- g4 [) S" ^5 Y
systemctl enable openstack-glance-api.service && systemctl start openstack-glance-api.service
* c7 u- q* ~ }/ l* O: O
, q' R" Z+ y4 t( p& k#控制节点 安装Placement service
/ Z5 P6 w2 K! m+ {/ ^! F* C
mysql -uroot -p123456 -e "CREATE DATABASE placement"
6 [/ }8 ^, Y1 i. u! v+ K5 i
mysql -uroot -p123456 -e "GRANT ALL PRIVILEGES ON placement.* TO 'placement'@'localhost' IDENTIFIED BY '123456'"
( {- V# x& M7 N. w! h
mysql -uroot -p123456 -e "GRANT ALL PRIVILEGES ON placement.* TO 'placement'@'%' IDENTIFIED BY '123456'"
" u0 l, V$ h1 p, j! g3 xopenstack user create --domain default --password 123456 placement
$ v( G! O! R. s L( p
openstack role add --project service --user placement admin
m% }$ V/ V$ r8 i7 ?. X; Topenstack service create --name placement --description "Placement API" placement
/ o& d) ?& c1 o: e. A/ p$ t6 \
openstack endpoint create --region RegionOne placement public http://controller:8778
J" h3 k' r& v z
openstack endpoint create --region RegionOne placement internal http://controller:8778
3 H& a2 J# D' J! gopenstack endpoint create --region RegionOne placement admin http://controller:8778
x) K% z, _- W2 w" F5 `! Gyum install -y openstack-placement-api
# _7 z5 l K6 J/ Hsed -i "507c connection = mysql+pymysql://placement:123456@controller/placement
" /etc/placement/placement.conf
* q' n& Z- D) }sed -i "192c auth_strategy = keystone" /etc/placement/placement.conf
1 H9 Z/ ^! R8 @- X2 q9 k6 w! q9 Fsed -i "241c auth_url = http://controller:5000/v3
" /etc/placement/placement.conf
" i @4 k- b4 w( D' x0 S |4 R1 {sed -i "242c memcached_servers = controller:11211" /etc/placement/placement.conf
( f% H- P* ?: w0 L0 H0 P# q& T% Rsed -i "243c auth_type = password" /etc/placement/placement.conf
) B: e. ^7 `. l; Ased -i "244c project_domain_name = Default" /etc/placement/placement.conf
; p( R9 D e$ P2 d$ ^! D
sed -i "245c user_domain_name = Default" /etc/placement/placement.conf
% L5 A8 R8 C4 `! @: bsed -i "246c project_name = service" /etc/placement/placement.conf
7 ]3 J5 v& `' b* }# wsed -i "247c username = placement" /etc/placement/placement.conf
+ X, K8 q+ i7 Osed -i "248c password = 123456" /etc/placement/placement.conf
6 T. b: `6 S) C: `
su -s /bin/sh -c "placement-manage db sync" placement
9 S( i# h7 K3 C
systemctl restart httpd
4 ^ Z+ H: K5 b. l2 P
; k k: y% \# d" g/ y#控制节点 安装Compute service
5 x% v& Z: r1 p( }mysql -uroot -p123456 -e "CREATE DATABASE nova_api"
# C& ]# Y. Q! d( Zmysql -uroot -p123456 -e "CREATE DATABASE nova"
, T9 g/ N6 y- m& C5 M1 x; q6 ]- hmysql -uroot -p123456 -e "CREATE DATABASE nova_cell0"
8 p7 B2 T5 Z3 V9 m* ~* x
mysql -uroot -p123456 -e "GRANT ALL PRIVILEGES ON nova_api.* TO 'nova'@'localhost' IDENTIFIED BY '123456'"
+ W2 U2 f. B* w. \4 [/ Y
mysql -uroot -p123456 -e "GRANT ALL PRIVILEGES ON nova_api.* TO 'nova'@'%' IDENTIFIED BY '123456'"
+ i% Y# O6 N1 Y1 i
mysql -uroot -p123456 -e "GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'localhost' IDENTIFIED BY '123456'"
5 W/ A. h& a8 Y V- i* tmysql -uroot -p123456 -e "GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'%' IDENTIFIED BY '123456'"
5 X. U5 l2 P" `2 C: O6 H8 b3 k
mysql -uroot -p123456 -e "GRANT ALL PRIVILEGES ON nova_cell0.* TO 'nova'@'localhost' IDENTIFIED BY '123456'"
; l0 }1 e7 W5 G7 R, Q& Wmysql -uroot -p123456 -e "GRANT ALL PRIVILEGES ON nova_cell0.* TO 'nova'@'%' IDENTIFIED BY '123456'"
: v' [ \8 e; Bopenstack user create --domain default --password 123456 nova
. A3 L* D9 }; P* p8 h4 Y' B! R: g' Mopenstack role add --project service --user nova admin
9 K3 q1 k* u9 w5 m5 h1 wopenstack service create --name nova --description "OpenStack Compute" compute
) g8 L" X O8 Z$ \4 a# `7 f3 e
openstack endpoint create --region RegionOne compute public http://controller:8774/v2.1
9 f' @7 _( n* Z9 Q6 o( topenstack endpoint create --region RegionOne compute internal http://controller:8774/v2.1
- F" F$ c N- j
openstack endpoint create --region RegionOne compute admin http://controller:8774/v2.1
6 J( A: |! ~) Y0 G- dyum install -y openstack-nova-api openstack-nova-conductor openstack-nova-novncproxy openstack-nova-scheduler
* I) A1 C: Z! S" L) k' M5 U' G9 @8 xsed -i "2c enabled_apis = osapi_compute,metadata" /etc/nova/nova.conf
" x& X5 Z* y7 R/ _sed -i "3c transport_url = rabbit://openstack:123456@controller:5672/
" /etc/nova/nova.conf , n# @% c- q. A, d, s; F% L# e
sed -i "4c my_ip = 10.0.0.11" /etc/nova/nova.conf
9 E& t1 w7 @- P) \) x% I4 csed -i "1079c connection = mysql+pymysql://nova:123456@controller/nova_api
" /etc/nova/nova.conf
E, D, ^! J" z- Y6 gsed -i "1622c connection = mysql+pymysql://nova:123456@controller/nova
" /etc/nova/nova.conf / m* @* c2 Y+ C. D3 b; A; q) [( s e
sed -i "872c auth_strategy = keystone" /etc/nova/nova.conf
; J" ?- R: D! L
sed -i "2561c www_authenticate_uri = http://controller:5000/
" /etc/nova/nova.conf * Q3 B$ a, }8 D1 P7 T o
sed -i "2562c auth_url = http://controller:5000/
" /etc/nova/nova.conf 5 y1 K' s+ T; p( _" C
sed -i "2563c memcached_servers = controller:11211" /etc/nova/nova.conf
2 W& I1 W, I+ i
sed -i "2564c auth_type = password" /etc/nova/nova.conf
1 N% k& i1 B5 R
sed -i "2565c project_domain_name = Default" /etc/nova/nova.conf
* d n# V: w. U8 H' s, a: D6 {
sed -i "2566c user_domain_name = Default" /etc/nova/nova.conf
9 E# s7 L3 G# @9 E
sed -i "2567c project_name = service" /etc/nova/nova.conf
& i5 \5 e! D& Y8 `; Fsed -i "2568c username = nova" /etc/nova/nova.conf
/ }& B% a) q- O" N
sed -i "2569c password = 123456" /etc/nova/nova.conf
" q& e2 M2 a& ^3 k# F d
sed -i "5171c enabled = true" /etc/nova/nova.conf
4 N; T, Q6 g# ^0 |+ O J" g
sed -i '5172c server_listen = $my_ip' /etc/nova/nova.conf
: R6 E. _. q. y# V8 psed -i '5173c server_proxyclient_address = $my_ip' /etc/nova/nova.conf
' u$ X* c7 d! T" P3 i" o# H, rsed -i "1937c api_servers = http://controller:9292
" /etc/nova/nova.conf 0 Q7 \7 R% l9 p& l# N* t
sed -i "3571c lock_path = /var/lib/nova/tmp" /etc/nova/nova.conf
. |8 s; c K# w" n- Z1 o* I
sed -i "4093c region_name = RegionOne" /etc/nova/nova.conf
\- w2 g) _5 E* |, i2 \7 e
sed -i "4094c project_domain_name = Default" /etc/nova/nova.conf
' I4 m2 z1 }/ \, Z9 D t
sed -i "4095c project_name = service" /etc/nova/nova.conf
, M) x J7 d$ a# }, @. `
sed -i "4096c auth_type = password" /etc/nova/nova.conf
& K- p) ~& O6 v. G
sed -i "4097c user_domain_name = Default" /etc/nova/nova.conf
# f. E Q( E6 Y+ {' Ssed -i "4098c auth_url = http://controller:5000/v3
" /etc/nova/nova.conf
/ m( ^! l( {7 O. h$ p$ U% Nsed -i "4099c username = placement" /etc/nova/nova.conf
! j3 m5 h: L; a
sed -i "4100c password = 123456" /etc/nova/nova.conf
+ U h- y8 h( q! [6 ?" n$ c) ]6 M
sed -i "4509c discover_hosts_in_cells_interval = 300" /etc/nova/nova.conf
U. [+ g! Z7 ~su -s /bin/sh -c "nova-manage api_db sync" nova
; p5 [. j& R1 U0 k4 q* R
su -s /bin/sh -c "nova-manage cell_v2 map_cell0" nova
# n( q6 i. x* E' a$ \$ h2 p
su -s /bin/sh -c "nova-manage cell_v2 create_cell --name=cell1 --verbose" nova
9 ]- b9 V7 f2 Q* K5 \su -s /bin/sh -c "nova-manage db sync" nova
( n- S+ y6 g9 qsystemctl enable openstack-nova-api.service openstack-nova-scheduler.service openstack-nova-conductor.service openstack-nova-novncproxy.service && systemctl start openstack-nova-api.service openstack-nova-scheduler.service openstack-nova-conductor.service openstack-nova-novncproxy.service
, c0 a1 o9 j9 W4 A
6 `$ U: A" P/ J# L1 C2 @( y% n#计算节点 安装Compute service
3 `9 J* O& Q, _' C; J1 m8 ~/ [6 Y
yum install -y openstack-nova-compute
, X) H( N6 P/ |8 {, c
sed -i "2c enabled_apis = osapi_compute,metadata" /etc/nova/nova.conf
C! _9 {& B9 C, B6 Z1 o6 t1 `
sed -i "3c transport_url = rabbit://openstack:123456@controller
" /etc/nova/nova.conf 6 u8 C+ ~8 Y" N$ D ]8 N
sed -i "4c my_ip = 10.0.0.31" /etc/nova/nova.conf
: T( O% j! b7 F' C8 n
sed -i "872c auth_strategy = keystone" /etc/nova/nova.conf
3 {" v5 d( w3 T' P
sed -i "2561c www_authenticate_uri = http://controller:5000/
" /etc/nova/nova.conf
; N. [0 ]1 h" osed -i "2562c auth_url = http://controller:5000/
" /etc/nova/nova.conf 8 i1 g9 V7 d1 z% @
sed -i "2563c memcached_servers = controller:11211" /etc/nova/nova.conf
" X8 @8 i! w8 R2 g
sed -i "2564c auth_type = password" /etc/nova/nova.conf
$ g2 k/ Q2 D& Z' Ssed -i "2565c project_domain_name = Default" /etc/nova/nova.conf
/ W( y' m/ Z% | b& d5 Q+ y4 Tsed -i "2566c user_domain_name = Default" /etc/nova/nova.conf
7 |3 s3 K3 O' {# z( Tsed -i "2567c project_name = service" /etc/nova/nova.conf
2 \/ Q5 i: Q) a1 f3 @& |sed -i "2568c username = nova" /etc/nova/nova.conf
, w" ?+ V% X" F; D+ P" `
sed -i "2569c password = 123456" /etc/nova/nova.conf
9 N: E' R5 \0 m# V* m/ p( r; d
sed -i "5171c enabled = true" /etc/nova/nova.conf
7 d# C! o2 v) R, |6 `* g2 @( E
sed -i "5172c server_listen = 0.0.0.0" /etc/nova/nova.conf
, {: q4 \% R0 F; F6 y" Y* {sed -i '5173c server_proxyclient_address = $my_ip' /etc/nova/nova.conf
{0 A, N2 w4 h: `& M3 ~sed -i "5174c novncproxy_base_url = http://controller:6080/vnc_auto.html
" /etc/nova/nova.conf
/ `8 q$ R7 \% F+ v. n0 Ased -i "1937c api_servers = http://controller:9292
" /etc/nova/nova.conf 6 ^' E0 v6 Z% ?! N$ z1 D, o7 C4 i
sed -i "3571c lock_path = /var/lib/nova/tmp" /etc/nova/nova.conf
# T; q. J1 m2 c0 o, T
sed -i "4093c region_name = RegionOne" /etc/nova/nova.conf
& v, Z2 t/ M9 [* d; ~sed -i "4094c project_domain_name = Default" /etc/nova/nova.conf
1 |. t. q }; g% ^sed -i "4095c project_name = service" /etc/nova/nova.conf
7 a# s: D! C2 b6 v
sed -i "4096c auth_type = password" /etc/nova/nova.conf
8 V0 e; x: D6 B9 k$ S' d2 D' hsed -i "4097c user_domain_name = Default" /etc/nova/nova.conf
9 W2 j8 p X. F7 K7 nsed -i "4098c auth_url = http://controller:5000/v3
" /etc/nova/nova.conf
+ r- C' y# T% o" x8 W3 t! u# d Qsed -i "4099c username = placement" /etc/nova/nova.conf
# }# T! |+ R8 [* x% _; Csed -i "4100c password = 123456" /etc/nova/nova.conf
) B/ X2 g k8 y3 Y
, q& S/ |* E* D#执行命令,查看是否支持CPU虚拟化,如果大于0则支持。
$ M: I4 |) J1 o" G8 E" t7 {
egrep -c '(vmx|svm)' /proc/cpuinfo
+ f5 d. h; a& G v* f, Z" N. l4 i/ l
#如果不支持的话还需要执行下面的命令
" K5 O3 a# L! \. Y. H1 Zsed -i "2722c virt_type = qemu" /etc/nova/nova.conf
) f( m2 s, O; a" g! c5 z& N T( B- _5 s0 J8 S
systemctl enable libvirtd.service openstack-nova-compute.service && systemctl start libvirtd.service openstack-nova-compute.service
. x, P/ P4 l, Z4 W" W" l
% t5 [- a+ L- k/ v
#控制节点 计算节点从注册到发现会有延迟,根据discover_hosts_in_cells_interval 配置轮询发现时间,可以执行下面命令手动发现计算节点
0 [# ^% F3 i6 l: b3 M
su -s /bin/sh -c "nova-manage cell_v2 discover_hosts --verbose" nova
) Z3 [2 q5 s' E3 P' L* F7 H5 A
+ d, `3 _. F& a! t#控制节点 安装Networking service
( u$ c3 u( z# T3 [2 t, X3 V6 N& _
mysql -uroot -p123456 -e "CREATE DATABASE neutron"
8 O: H! c4 ~& W/ J) f& L
mysql -uroot -p123456 -e "GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'localhost' IDENTIFIED BY '123456'"
' K2 C9 n0 U4 T4 T4 h& J
mysql -uroot -p123456 -e "GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'%' IDENTIFIED BY '123456'"
9 i3 G* g# R6 b, H% m' r
openstack user create --domain default --password 123456 neutron
4 @; t0 S5 ]! }: iopenstack role add --project service --user neutron admin
& s% a% }, t( K/ c/ j4 a
openstack service create --name neutron --description "OpenStack Networking" network
: |1 N2 F/ e6 Q$ e0 topenstack endpoint create --region RegionOne network public http://controller:9696
) u4 p: p5 C& ]
openstack endpoint create --region RegionOne network internal http://controller:9696
* ~* H+ y. S# L
openstack endpoint create --region RegionOne network admin http://controller:9696
( k7 X- o: n0 O4 {; vyum install -y openstack-neutron openstack-neutron-ml2 openstack-neutron-linuxbridge ebtables
7 p" P) o# \# i
#配置服务器组件
4 o* y: J4 q/ K7 Dsed -i "2c core_plugin = ml2" /etc/neutron/neutron.conf
S, E5 c, |( d: w/ C( }
sed -i "3c service_plugins = router" /etc/neutron/neutron.conf
* F3 n* d# i: r/ u& O) Osed -i "4c allow_overlapping_ips = true" /etc/neutron/neutron.conf
# _3 y9 w3 p2 k7 v. X3 T% zsed -i "5c transport_url = rabbit://openstack:123456@controller
" /etc/neutron/neutron.conf ! c1 U1 P$ ~: v
sed -i "6c auth_strategy = keystone" /etc/neutron/neutron.conf
" ?. V7 y7 J; T9 Rsed -i "7c notify_nova_on_port_status_changes = true" /etc/neutron/neutron.conf
& m- @! B0 q2 E7 _8 e, q7 Nsed -i "8c notify_nova_on_port_data_changes = true" /etc/neutron/neutron.conf
$ n1 E2 G& G$ ^/ \) }9 {
sed -i "254c connection = mysql+pymysql://neutron:123456@controller/neutron
" /etc/neutron/neutron.conf . `" h$ p) `! }
sed -i "359c www_authenticate_uri = http://controller:5000
" /etc/neutron/neutron.conf ; k+ r; L+ g* C' ?
sed -i "360c auth_url = http://controller:5000
" /etc/neutron/neutron.conf + i+ P6 @. K* @
sed -i "361c memcached_servers = controller:11211" /etc/neutron/neutron.conf
" t2 f8 J! D$ G8 r6 Y; T4 K& E8 N
sed -i "362c auth_type = password" /etc/neutron/neutron.conf
' V; B! L0 G2 b3 ~. z
sed -i "363c project_domain_name = default" /etc/neutron/neutron.conf
2 G! W' a7 y- x& f6 P3 W: esed -i "364c user_domain_name = default" /etc/neutron/neutron.conf
4 U# [& B$ B7 L
sed -i "365c project_name = service" /etc/neutron/neutron.conf
' D, p$ D1 ]) Y" v' ^3 y4 d' V7 }
sed -i "366c username = neutron" /etc/neutron/neutron.conf
0 A3 Z ~+ ?2 U% h+ nsed -i "367c password = 123456" /etc/neutron/neutron.conf
, F4 E- i9 P" d, K
sed -i "521c lock_path = /var/lib/neutron/tmp" /etc/neutron/neutron.conf
. f9 V [2 W! ?6 m, j) Aecho "[nova]" >> /etc/neutron/neutron.conf
. i+ W: Y4 i! ? \
echo "auth_url = http://controller:5000
" >> /etc/neutron/neutron.conf
2 V- ~% E0 v/ }7 v5 Wecho "auth_type = password" >> /etc/neutron/neutron.conf
3 x4 B a/ i" a" Q1 G3 Lecho "project_domain_name = default" >> /etc/neutron/neutron.conf
, u% u! S: G+ j3 Necho "user_domain_name = default" >> /etc/neutron/neutron.conf
& [9 K3 P3 N& T$ P1 r, }# ~$ y
echo "region_name = RegionOne" >> /etc/neutron/neutron.conf
" k) ]; f* V9 E% _$ _$ oecho "project_name = service" >> /etc/neutron/neutron.conf
2 N, {; Z( _9 c# Q8 ?0 Jecho "username = nova" >> /etc/neutron/neutron.conf
" i+ m6 E0 p$ }. x3 H$ Hecho "password = 123456" >> /etc/neutron/neutron.conf
3 W3 V3 F; W% e6 ?, P#配置Modular Layer 2 (ML2) plug-in
* K9 u* B# D8 l' Qecho "[ml2]" >> /etc/neutron/plugins/ml2/ml2_conf.ini
4 p2 C, ?! D. d) gecho "type_drivers = flat,vlan,vxlan" >> /etc/neutron/plugins/ml2/ml2_conf.ini
, ~1 i$ d" ^7 T; L
echo "tenant_network_types = vxlan" >> /etc/neutron/plugins/ml2/ml2_conf.ini
" T8 ~( a$ A8 }+ Q
echo "mechanism_drivers = linuxbridge,l2population" >> /etc/neutron/plugins/ml2/ml2_conf.ini
& g4 L- C. s7 W$ l( h7 H' `
echo "extension_drivers = port_security" >> /etc/neutron/plugins/ml2/ml2_conf.ini
/ h) K& \/ a4 P. ?* P% m
echo "[ml2_type_flat]" >> /etc/neutron/plugins/ml2/ml2_conf.ini
; \) O; A6 t" B4 G" C0 Y, }echo "flat_networks = provider" >> /etc/neutron/plugins/ml2/ml2_conf.ini
+ j- ?. Y$ B( W: C% p) e3 }echo "vni_ranges = 1:1000" >> /etc/neutron/plugins/ml2/ml2_conf.ini
( }# ]; |/ P \! L6 a0 ?
echo "[securitygroup]" >> /etc/neutron/plugins/ml2/ml2_conf.ini
4 z4 i- F1 q6 Z8 K( e, ]- a* u
echo "enable_ipset = true" >> /etc/neutron/plugins/ml2/ml2_conf.ini
+ @) q9 Y4 Z0 a& L#配置Linux bridge agent
/ k5 v) W: \8 U/ T! z) a' l
echo "[linux_bridge]" >> /etc/neutron/plugins/ml2/linuxbridge_agent.ini
8 i3 F1 `9 e1 o* f. u#eth1为另外第二张网卡
' Q( X) t. [# Q
echo "physical_interface_mappings = provider:eth1" >> /etc/neutron/plugins/ml2/linuxbridge_agent.ini
7 G; j+ l' o) O3 P X' y: H
echo "[vxlan]" >> /etc/neutron/plugins/ml2/linuxbridge_agent.ini
+ v! J4 }8 c; f" mecho "enable_vxlan = true" >> /etc/neutron/plugins/ml2/linuxbridge_agent.ini
1 @# S' n% Y( n, ]. P#10.0.0.12为第二张网卡的IP
: I1 g% L& W, |" M1 \3 zecho "local_ip = 10.0.0.12" >> /etc/neutron/plugins/ml2/linuxbridge_agent.ini
7 d7 |$ } K! _- R. Z U! l
echo "l2_population = true" >> /etc/neutron/plugins/ml2/linuxbridge_agent.ini
, S* A( w w8 N( q3 K; W
echo "[securitygroup]" >> /etc/neutron/plugins/ml2/linuxbridge_agent.ini
3 R j; [7 l6 Y" R
echo "enable_security_group = true" >> /etc/neutron/plugins/ml2/linuxbridge_agent.ini
* J1 f- M) v5 Z+ H6 R" ?: Z
echo "firewall_driver = neutron.agent.linux.iptables_firewall.IptablesFirewallDriver" >> /etc/neutron/plugins/ml2/linuxbridge_agent.ini
8 y, E a5 M. O3 {, a
#配置layer-3 agent
, ^! T; q% `# g ~
sed -i "2c interface_driver = linuxbridge" /etc/neutron/l3_agent.ini
( Z! N# d- |" R
#配置DHCP agent
( W2 e" C# @: t, l
sed -i "2c interface_driver = linuxbridge" /etc/neutron/dhcp_agent.ini
. N5 m7 s: S; ]4 p0 R" L) y+ \' E
sed -i "3c dhcp_driver = neutron.agent.linux.dhcp.Dnsmasq" /etc/neutron/dhcp_agent.ini
' v) P! N0 N E6 z% J i2 ysed -i "4c enable_isolated_metadata = true" /etc/neutron/dhcp_agent.ini
/ P# U/ S0 z2 ]6 @* a1 y#配置metadata agent
: d8 I1 `2 x4 Y3 j/ @
sed -i "2c nova_metadata_host = controller" /etc/neutron/metadata_agent.ini
, A+ @+ O' o( T7 S% x
sed -i "3c metadata_proxy_shared_secret = 123456" /etc/neutron/metadata_agent.ini
! F' D$ [; h# R& D8 S
#配置计算服务使用网络服务
! F* y9 w/ A, M8 q7 B, e v8 z
sed -i " 3334c auth_url = http://controller:5000
" /etc/nova/nova.conf # U. t3 M/ m, m) e" r1 p; p' y9 L
sed -i " 3335c auth_type = password" /etc/nova/nova.conf
7 {8 ~: F2 [* g, wsed -i " 3336c project_domain_name = default" /etc/nova/nova.conf
# @0 O6 J- z& R7 F- ?
sed -i " 3337c user_domain_name = default" /etc/nova/nova.conf
# [7 f4 Q! n7 G1 d7 B3 K( k Osed -i " 3338c region_name = RegionOne" /etc/nova/nova.conf
9 L1 F0 B' J% ?( I: ?6 ~/ }& x H3 Osed -i " 3339c project_name = service" /etc/nova/nova.conf
% ?: _1 A9 l# o+ I
sed -i " 3340c username = neutron" /etc/nova/nova.conf
- x, K5 Y! j. Q* Y( Hsed -i " 3341c password = 123456" /etc/nova/nova.conf
! g1 e+ g0 f. l/ l9 V* ~2 u- {8 {! _
sed -i " 3342c service_metadata_proxy = true" /etc/nova/nova.conf
5 H% `/ R: `4 C1 B0 R
sed -i " 3343c metadata_proxy_shared_secret = 123456" /etc/nova/nova.conf
" i0 r& ]5 h1 _- Q
ln -s /etc/neutron/plugins/ml2/ml2_conf.ini /etc/neutron/plugin.ini
- R$ A! k; I/ [/ k
su -s /bin/sh -c "neutron-db-manage --config-file /etc/neutron/neutron.conf --config-file /etc/neutron/plugins/ml2/ml2_conf.ini upgrade head" neutron
1 f/ Q4 D0 z* M- U& F; I
systemctl restart openstack-nova-api.service
3 r0 M! m/ s/ m; G) i/ M
systemctl enable neutron-server.service neutron-linuxbridge-agent.service neutron-dhcp-agent.service neutron-metadata-agent.service && systemctl start neutron-server.service neutron-linuxbridge-agent.service neutron-dhcp-agent.service neutron-metadata-agent.service
0 k7 @3 X, W/ e3 P8 i0 b
systemctl enable neutron-l3-agent.service && systemctl start neutron-l3-agent.service
" ?2 s$ ^2 U7 Z' C/ x' f6 I
" g' d: V5 u& D# `4 i
#计算节点 安装Networking service
( h! v5 F4 y. u
yum install -y openstack-neutron-linuxbridge ebtables ipset
" Y# ^* t! I. e" G8 [- [. g6 b7 \
sed -i "2c transport_url = rabbit://openstack:123456@controller
" /etc/neutron/neutron.conf ' y5 x7 X! J* C. Z; K; n% B
sed -i "3c auth_strategy = keystone" /etc/neutron/neutron.conf
) J& R% a% G( S, O' gsed -i "359c www_authenticate_uri = http://controller:5000
" /etc/neutron/neutron.conf
* }% J* o6 T# M5 vsed -i "360c auth_url = http://controller:5000
" /etc/neutron/neutron.conf ! D5 F% S' p* y5 o
sed -i "361c memcached_servers = controller:11211" /etc/neutron/neutron.conf
5 d. g! F+ N8 b3 g7 Msed -i "362c auth_type = password" /etc/neutron/neutron.conf
7 ?# g: Q+ H# v
sed -i "363c project_domain_name = default" /etc/neutron/neutron.conf
' J1 z7 |3 ^; L( l+ j) t, b3 z6 I
sed -i "364c user_domain_name = default" /etc/neutron/neutron.conf
2 G$ A; R' t: {4 w( A
sed -i "365c project_name = service" /etc/neutron/neutron.conf
/ J6 g" H' F$ O1 H6 _% Fsed -i "366c username = neutron" /etc/neutron/neutron.conf
7 u8 l$ q3 g# Rsed -i "367c password = 123456" /etc/neutron/neutron.conf
0 Z- \8 [% N' j7 U2 |* u2 p3 Hsed -i "521c lock_path = /var/lib/neutron/tmp" /etc/neutron/neutron.conf
9 Q& l) E2 J) c. o
echo "[linux_bridge]" >> /etc/neutron/plugins/ml2/linuxbridge_agent.ini
& W, \& G; V- Q& Z' S+ w3 Y! |#eth1为另外第二张网卡
2 b! l, O6 H% h" X. Recho "physical_interface_mappings = provider:eth1" >> /etc/neutron/plugins/ml2/linuxbridge_agent.ini
" l9 U- f/ [6 c+ J/ {, necho "[vxlan]" >> /etc/neutron/plugins/ml2/linuxbridge_agent.ini
% Y0 ~3 z- L4 D: fecho "enable_vxlan = true" >> /etc/neutron/plugins/ml2/linuxbridge_agent.ini
$ x" d D8 D5 R5 R3 E! R6 A
#10.0.0.32为第二张网卡的IP
4 p. l/ G1 ?' X" y' k* ~' M
echo "local_ip = 10.0.0.32" >> /etc/neutron/plugins/ml2/linuxbridge_agent.ini
% ^% l& a; e2 v5 ?+ @+ c# C
echo "l2_population = true" >> /etc/neutron/plugins/ml2/linuxbridge_agent.ini
# k+ u0 Z3 T* t2 r% d2 I8 @
echo "[securitygroup]" >> /etc/neutron/plugins/ml2/linuxbridge_agent.ini
& [2 f5 y( u! v6 `4 {
echo "enable_security_group = true" >> /etc/neutron/plugins/ml2/linuxbridge_agent.ini
% X1 |. u f& n+ W' Cecho "firewall_driver = neutron.agent.linux.iptables_firewall.IptablesFirewallDriver" >> /etc/neutron/plugins/ml2/linuxbridge_agent.ini
" K1 Q) {% j: C$ b( N#配置计算服务使用网络服务
( T6 @- d6 f# B/ x/ u7 z
sed -i " 3334c auth_url = http://controller:5000
" /etc/nova/nova.conf + N- _# G2 k2 j) \! u7 ]* U( ]
sed -i " 3335c auth_type = password" /etc/nova/nova.conf
$ V: o2 n+ j$ v) [+ J1 d+ S% b
sed -i " 3336c project_domain_name = default" /etc/nova/nova.conf
4 @ d& r1 x9 v, L! T
sed -i " 3337c user_domain_name = default" /etc/nova/nova.conf
! h3 p6 A; k' \. r7 n* wsed -i " 3338c region_name = RegionOne" /etc/nova/nova.conf
3 I9 R$ w4 d: J8 e9 d5 \) [' nsed -i " 3339c project_name = service" /etc/nova/nova.conf
# d' H2 \2 F" ?
sed -i " 3340c username = neutron" /etc/nova/nova.conf
6 X3 p/ |- @; L+ d- ?' O
sed -i " 3341c password = 123456" /etc/nova/nova.conf
8 w* U0 U: r3 ]- `
systemctl restart openstack-nova-compute.service
9 T6 p5 ?6 J2 Zsystemctl enable neutron-linuxbridge-agent.service && systemctl start neutron-linuxbridge-agent.service
2 W1 S) t, ~$ T3 N
( F. S* j( |$ O7 R#控制节点 安装Dashboard
2 k' f* s* }/ F) _yum install -y openstack-dashboard
5 d' p, X, r$ dsed -i '118c OPENSTACK_HOST = "controller"' /etc/openstack-dashboard/local_settings
7 I$ q/ ?0 ?. c2 U! j7 ^sed -i "39c ALLOWED_HOSTS = ['*']" /etc/openstack-dashboard/local_settings
5 i7 h( [1 V c( I
sed -i "104c SESSION_ENGINE = 'django.contrib.sessions.backends.cache'" /etc/openstack-dashboard/local_settings
% q" p+ T1 M- nsed -i "94c CACHES = {" /etc/openstack-dashboard/local_settings
+ E, `' }1 k( g0 a4 J- ^3 B
sed -i "95c 'default': {" /etc/openstack-dashboard/local_settings
$ k o1 X* I* j
sed -i "96c 'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache'," /etc/openstack-dashboard/local_settings
7 a6 H6 @& Z7 x5 Y' B/ Osed -i "97c 'LOCATION': 'controller:11211'," /etc/openstack-dashboard/local_settings
4 V* q0 n: t5 k3 d
sed -i "98c }" /etc/openstack-dashboard/local_settings
+ }7 C& J1 q& m3 {2 Xsed -i "99c }" /etc/openstack-dashboard/local_settings
# e8 |" m7 M7 z: Nsed -i '119c OPENSTACK_KEYSTONE_URL = "http://%s:5000/v3
" % OPENSTACK_HOST' /etc/openstack-dashboard/local_settings 2 w# Q, _" j {+ K4 P' @
echo 'OPENSTACK_KEYSTONE_MULTIDOMAIN_SUPPORT = True' >> /etc/openstack-dashboard/local_settings
% @7 v* h$ a( f, Xecho 'OPENSTACK_API_VERSIONS = {' >> /etc/openstack-dashboard/local_settings
+ t1 V2 X, L% T8 K
echo ' "identity": 3,' >> /etc/openstack-dashboard/local_settings
2 r$ v6 G: y. e" ? e7 N0 `
echo ' "image": 2,' >> /etc/openstack-dashboard/local_settings
6 g6 g( |! a9 J9 z }2 [1 U
echo ' "volume": 3' >> /etc/openstack-dashboard/local_settings
2 z- W5 }% N3 q# g7 ~4 n3 w
echo '}' >> /etc/openstack-dashboard/local_settings
) v0 R5 I0 c& Y0 A- M* I# m+ k
echo 'OPENSTACK_KEYSTONE_DEFAULT_DOMAIN = "Default"' >> /etc/openstack-dashboard/local_settings
/ E1 e7 A. T/ Y2 U5 o
echo 'OPENSTACK_KEYSTONE_DEFAULT_ROLE = "user"' >> /etc/openstack-dashboard/local_settings
- ^+ X* b8 a1 i2 B R: a6 \sed -i '123c TIME_ZONE = "Asia/Shanghai"' /etc/openstack-dashboard/local_settings
6 B! {) v+ z: r' lecho "WEBROOT = '/dashboard/'" >> /etc/openstack-dashboard/local_settings
: Q% r F1 D- \+ [% x
echo 'WSGIApplicationGroup %{GLOBAL}' >> /etc/httpd/conf.d/openstack-dashboard.conf
: ~/ {; x7 j8 O' ]- R) I
systemctl restart httpd.service memcached.service
2 ~% v Y, M6 q. z( U) `& n7 P+ \( y I, k" S
1 E. ?% m/ Q8 V#安装完成,可访问http://10.0.0.11/dashboard/
查看 4 }# C. t% w8 A. P* P: C0 F* E