#!/bin/bash
) D( |) I' o9 u
* z( r: c/ @- W' T" d
1 ~2 o9 S* L. R#共两台主机,分别是一台控制节点,一台计算节点
* q* F. Y1 _( i#1、控制节点内存4096M。双网卡,分别为eth0:10.0.0.11,eth1:10.0.0.12
9 Q; q5 h/ X1 f# M* v! o1 g#2、计算节点内存4096M。双网卡,分别为eth0:10.0.0.31,eth1:10.0.0.32
- w2 s/ b* i3 I2 |: v. i
; r+ o* q3 j& c" r% R#设置阿里云yum源
: }+ p) ?6 B! T; N# |, b
9 v' l' ^1 ]0 b. U+ srm -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
' }0 K0 ~! J" _( q9 a& f& c% R% l( q u3 g
#关闭防火墙
% x) d: L( y7 w; ^ e9 B! d4 k9 ?/ ?1 nsystemctl stop firewalld && systemctl disable firewalld
1 x& H# H' \4 p% T
' N- b! X$ R0 I$ R4 v/ ~2 b#关闭SELinux
) H, o- {3 ^9 v) S5 {
setenforce 0
3 i" O4 }# M5 \' B$ P" A, \
sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config
. d$ d; c3 w, r5 _3 t) m. j* Q4 m1 [; r' @$ J
#关闭swap分区
; k0 o0 c( T" W3 N9 M& d
swapoff -a
2 ]1 c" I6 D I1 k, A& rsed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
' f3 M- E, R. P. Z
& ]- B5 J- m9 h- m- |/ H+ w
#设置内核
( D" Y, a2 T1 [2 z6 V5 D; W' I) f
modprobe bridge
/ j5 e2 @- h$ M8 v$ M; ^5 {, K
modprobe br_netfilter
# l% x/ `! _ C; [- d S
cat > /etc/sysconfig/modules/neutron.modules <<EOF
* r7 q" Q J$ N6 ?
#!/bin/bash
8 u* t* ^% q5 }8 j! ^! n2 vmodprobe -- bridge
" k# i' h! W- emodprobe -- br_netfilter
% K5 e, G* M4 W% C) y& e8 ]$ t0 l
EOF
* ?# ^) @; m$ y, w$ ?& x+ qchmod 755 /etc/sysconfig/modules/neutron.modules && bash /etc/sysconfig/modules/neutron.modules
* _( M! h* s. x# @
echo "vm.max_map_count=262144" >> /etc/sysctl.conf
. n% _( n" I( `5 ?# b0 G) oecho "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
& E! T6 z: u, W, O5 oecho "net.bridge.bridge-nf-call-iptables=1" >> /etc/sysctl.conf
7 k6 {* K, U+ A/ V. f
echo "net.bridge.bridge-nf-call-ip6tables=1" >> /etc/sysctl.conf
8 C+ V+ c8 N+ e. X4 ysysctl -p
# a3 d- U. t3 s
8 x0 w4 @( ^1 Y4 ]# r#设置时间同步
9 g7 D% \( _( z6 _& s- ~ ^yum install -y chrony && yum -y autoremove
$ K% M( c: d( o& t, C8 w+ v7 J7 ~
sed -i '/^pool/d' /etc/chrony.conf
) p" W a0 h3 o" f1 R1 Z* q
sed -i '/^server/d' /etc/chrony.conf
2 }, t- ?0 A0 C( S; z8 @; i7 a; G7 _echo "pool ntp.aliyun.com iburst" >> /etc/chrony.conf
' t4 \% j* E* F, _; q; msystemctl start chronyd.service && systemctl enable chronyd.service
( d% x# v) ~# \5 T. U
0 |6 ~4 h; s( `
#控制节点 设置hostname
, p5 G5 y% g7 v+ Z- Ehostnamectl set-hostname controller
$ [2 }! _0 F, p* c& q1 i, j) K. B
2 \, g+ B6 m5 h! j, |7 z#计算节点 设置hostname
* r" Q. ?8 y2 O: N# `1 W6 Jhostnamectl set-hostname compute1
7 g1 Y7 H, b1 N b2 Y* c
- C! Q9 f' d# d X* {
#添加host
# F8 a, l+ v# w
echo "10.0.0.11 controller" >> /etc/hosts
. w9 @ E0 ^7 i7 t9 @ Aecho "10.0.0.31 compute1" >> /etc/hosts
/ U' P- p% u/ w6 T/ `2 L8 F8 K9 m5 c0 Y2 A
#安装基础组件
. v& x/ g; d8 Q6 \! Uyum install -y centos-release-openstack-ussuri
# n2 U2 T2 K$ x+ B' @( S
yum config-manager --set-enabled PowerTools
$ S/ @8 r- U5 {yum upgrade -y
- `( P3 ?9 p, c- O
yum install -y python3-openstackclient
$ p! @7 L! ~. W5 B" i, @0 T/ p# [4 E ~; [: K6 _# m! b: A) L
#控制节点 安装Mariadb
s* v* e8 S8 H( m, @+ [. J) B9 E! \
yum install -y mariadb mariadb-server python2-PyMySQL
4 k, c8 ?5 Y& V" otee /etc/my.cnf.d/openstack.cnf <<-'EOF'
% c% a+ Y" l" v9 {# s! y7 |8 E$ L
[mysqld]
& @ c" o/ D$ z7 wbind-address = 10.0.0.11
+ E+ V% N( i1 Z. E3 Ddefault-storage-engine = innodb
% G# O/ t/ }7 |# F" f, E* X1 N
innodb_file_per_table = on
. d$ Z3 a5 f% Q( M+ X0 Y
max_connections = 4096
9 n9 e7 V. d8 g, l* K/ v3 @collation-server = utf8_general_ci
" ?' Q2 r3 S: _. c% r. ~; _6 Z( |
character-set-server = utf8
1 L) K& N2 R- F5 q
EOF
+ ~5 m! p$ p; M9 T% ~, D# [% `- `
systemctl enable mariadb.service && systemctl start mariadb.service
% y4 }& [6 \2 X$ N; @
echo -e "\nY\n123456\n123456\nY\nn\nY\nY\n" | mysql_secure_installation
- E! S4 g* |3 j9 b$ c: r# r
0 Y* |4 e! G2 \% v" ?* S' T
#控制节点 安装RabbitMQ
/ {' q$ B3 a- g+ f) c
yum install -y rabbitmq-server
- E$ s% k7 Z- ~ Q, F
systemctl enable rabbitmq-server.service && systemctl start rabbitmq-server.service
* a) U' I2 f" H$ P1 O; R" a7 Z
rabbitmqctl add_user openstack 123456
( H. T, D" A$ G& O( t4 r5 mrabbitmqctl set_permissions openstack ".*" ".*" ".*"
`+ m5 U( }6 `6 H
. v) P& G+ u3 X7 b
#控制节点 安装Memcached
$ r/ Q( Y8 W* @' a1 b: A' E( t+ I
yum install -y memcached python3-memcached
8 l& @+ U* u8 C: `) m4 A1 Msed -i "s/-l 127.0.0.1,::1/-l 127.0.0.1,::1,controller/g" /etc/sysconfig/memcached
& T6 D, |' \; i4 b. A7 W
systemctl enable memcached.service && systemctl start memcached.service
0 F$ Q" T% c2 D. ?
6 T( y* g5 {8 t#控制节点 安装Etcd
, j6 c. z" G8 G0 I5 c6 O1 j) [yum install -y etcd
, F' [ m9 o3 {( b4 T8 w2 a6 Urm -f /etc/etcd/etcd.conf
: [6 J6 u- e( _1 d. [% e& {- x
tee /etc/etcd/etcd.conf <<-'EOF'
# U% g# I, }6 R+ H4 ]$ {- Z( u
#[Member]
# h. y0 Z/ L: P4 i% ?8 PETCD_DATA_DIR="/var/lib/etcd/default.etcd"
% ]0 u/ ~6 H( L; V1 J
ETCD_LISTEN_PEER_URLS="http://10.0.0.11:2380
"
! }2 C# R) M& O0 h, @/ R6 wETCD_LISTEN_CLIENT_URLS="http://10.0.0.11:2379
"
( ?) U$ @' ~' Q/ mETCD_NAME="controller"
( H: k0 o6 }$ W8 Y0 v/ R* {
#[Clustering]
& o- C; ~3 q8 z# J1 g/ b6 k
ETCD_INITIAL_ADVERTISE_PEER_URLS="http://10.0.0.11:2380
"
% U; Z6 D& l# @) f4 fETCD_ADVERTISE_CLIENT_URLS="http://10.0.0.11:2379
" % a) @- W; K) d* C% R7 r& ~
ETCD_INITIAL_CLUSTER="controller=http://10.0.0.11:2380
" 1 H/ q2 _* Q( G }$ K( {- B
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster-01"
4 W0 _# b" |$ O) u) w% _; R1 i* XETCD_INITIAL_CLUSTER_STATE="new"
! r, x0 ^$ B* W+ f: DEOF
' O/ X$ W2 L' L; Y' R1 v$ F, O7 g
systemctl enable etcd && systemctl start etcd
# }6 ?7 }. r' L
' e8 |8 m9 P- Q( I
#控制节点 安装Identity service
, }5 x. N7 _. C Q7 z5 Z& N
mysql -uroot -p123456 -e "CREATE DATABASE keystone"
- B8 r# h. K4 r* J8 t( C6 l0 _3 |mysql -uroot -p123456 -e "GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'localhost' IDENTIFIED BY '123456'"
% t$ D1 h/ H: m# L5 c4 f
mysql -uroot -p123456 -e "GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'%' IDENTIFIED BY '123456'"
" d0 e3 d# j+ A) Eyum install -y openstack-keystone httpd python3-mod_wsgi
# g2 W& u- i4 p: ]" E$ v. q
sed -i "556c connection = mysql+pymysql://keystone:123456@controller/keystone
" /etc/keystone/keystone.conf - d! M. {+ Z# p
sed -i "2418c provider = fernet" /etc/keystone/keystone.conf
$ r& ~" ^! e/ B( z
su -s /bin/sh -c "keystone-manage db_sync" keystone
7 J* n* t& y1 d& x1 {! A" Ikeystone-manage fernet_setup --keystone-user keystone --keystone-group keystone
& i: X, Z! Q5 Y4 q1 c# ~9 h
keystone-manage credential_setup --keystone-user keystone --keystone-group keystone
0 j2 a3 @( G# S6 p( i; a- Q7 ]8 i+ H8 B
keystone-manage bootstrap --bootstrap-password 123456 \
" c- b- q* b3 L7 l, p
--bootstrap-admin-url http://controller:5000/v3/ \
- v4 c6 V) g' l0 r
--bootstrap-internal-url http://controller:5000/v3/ \
+ o/ f8 L1 s! I" a( Z: q8 M! h
--bootstrap-public-url http://controller:5000/v3/ \
0 V6 ~$ f2 X9 ~3 F( @4 N$ Z --bootstrap-region-id RegionOne
, ?7 V" v: f" e( Yecho "ServerName controller" >> /etc/httpd/conf/httpd.conf
( t% U! w; ~) d# y* ~8 E& ]
ln -s /usr/share/keystone/wsgi-keystone.conf /etc/httpd/conf.d/
: t: O" b; @; Ysystemctl enable httpd.service && systemctl start httpd.service
/ B8 l5 Y: m7 T$ A1 w" s ^
echo "export OS_USERNAME=admin" >> /etc/profile
" M; f( e Q. d8 Lecho "export OS_PASSWORD=123456" >> /etc/profile
: L) x8 d: i* \echo "export OS_PROJECT_NAME=admin" >> /etc/profile
+ q2 R" p* J X6 j0 j( c3 U
echo "export OS_USER_DOMAIN_NAME=Default" >> /etc/profile
/ G; m. Q0 v. g' ]9 O5 r0 ^
echo "export OS_PROJECT_DOMAIN_NAME=Default" >> /etc/profile
6 P) O2 w, G, a; e( Vecho "export OS_AUTH_URL=http://controller:5000/v3
" >> /etc/profile ( u/ ~4 c% Z3 D5 M5 ]
echo "export OS_IDENTITY_API_VERSION=3" >> /etc/profile
8 i) W4 m/ r! ]" y3 isource /etc/profile
% }: Z4 O, w/ x- s B# P1 ?7 X, r9 X/ `
openstack project create --domain default --description "Service Project" service
* u1 A) h9 v6 j5 S* R/ I4 ~6 Z# ~5 i: K: p/ k# z
#控制节点 安装Image service
. N' T6 M/ n9 u- P( _! b8 _mysql -uroot -p123456 -e "CREATE DATABASE glance"
. M" K. |: D1 r- Q$ Qmysql -uroot -p123456 -e "GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'localhost' IDENTIFIED BY '123456'"
: v. T, n2 E' H8 l# R2 L' [
mysql -uroot -p123456 -e "GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'%' IDENTIFIED BY '123456'"
' I" k& N+ m4 s/ @
openstack user create --domain default --password 123456 glance
( n* U. v W( Z* @openstack role add --project service --user glance admin
6 `# k9 w# y1 Z2 nopenstack service create --name glance --description "OpenStack Image" image
/ t7 u. d& M1 O
openstack endpoint create --region RegionOne image public http://controller:9292
' c+ [" @2 v: w9 T8 G# h( R. a4 U
openstack endpoint create --region RegionOne image internal http://controller:9292
" j) `+ i1 F( r$ Iopenstack endpoint create --region RegionOne image admin http://controller:9292
: O: F9 G6 r0 ~! H5 ryum install -y openstack-glance
- U5 P+ g: D; @. j% x, ]) p$ tsed -i "2062c connection = mysql+pymysql://glance:123456@controller/glance
" /etc/glance/glance-api.conf # f7 e2 u! o3 ?
sed -i "5034c www_authenticate_uri = http://controller:5000
" /etc/glance/glance-api.conf G. Y) ^8 n7 w5 \* v( U
sed -i "5035c auth_url = http://controller:5000
" /etc/glance/glance-api.conf
$ b, q7 g7 h1 G" j0 L5 R) ?' Ssed -i "5036c memcached_servers = controller:11211" /etc/glance/glance-api.conf
! Q. j3 t. o! s3 m; d. H' W2 Ksed -i "5037c auth_type = password" /etc/glance/glance-api.conf
) j/ {/ S% j- g
sed -i "5038c project_domain_name = Default" /etc/glance/glance-api.conf
, s! \/ {( u/ f
sed -i "5039c user_domain_name = Default" /etc/glance/glance-api.conf
4 u1 a# p: d9 u! d; b6 s% g used -i "5040c project_name = service" /etc/glance/glance-api.conf
5 V5 o+ X$ y9 I( R( M# ^" H) H* I0 P
sed -i "5041c username = glance" /etc/glance/glance-api.conf
0 e$ S* L% U6 k+ E
sed -i "5042c password = 123456" /etc/glance/glance-api.conf
: J p5 w a' }, A6 F( r& u _* X
sed -i "5678c flavor = keystone" /etc/glance/glance-api.conf
2 h c e, E! H1 y0 I$ N# d4 M, gsed -i "3413c stores = file,http" /etc/glance/glance-api.conf
, \; G: _7 Z3 Osed -i "3414c default_store = file" /etc/glance/glance-api.conf
0 D3 `1 F' s$ P! F
sed -i "3415c filesystem_store_datadir = /var/lib/glance/images/" /etc/glance/glance-api.conf
# m+ c! g( u1 p. I, nsu -s /bin/sh -c "glance-manage db_sync" glance
G$ V4 W9 ~/ a2 Y
systemctl enable openstack-glance-api.service && systemctl start openstack-glance-api.service
2 I1 w9 [% m3 w5 M) Q
( g( x* A" G% Z% }#控制节点 安装Placement service
1 O$ M W$ N: c9 |
mysql -uroot -p123456 -e "CREATE DATABASE placement"
0 F2 h8 @3 ?4 T
mysql -uroot -p123456 -e "GRANT ALL PRIVILEGES ON placement.* TO 'placement'@'localhost' IDENTIFIED BY '123456'"
% e- `& N- J) h
mysql -uroot -p123456 -e "GRANT ALL PRIVILEGES ON placement.* TO 'placement'@'%' IDENTIFIED BY '123456'"
! c7 r Q) y9 u: g. copenstack user create --domain default --password 123456 placement
% T8 O1 v+ W% d; v7 h
openstack role add --project service --user placement admin
4 ]' o5 F: E8 }3 L9 U5 \1 m0 popenstack service create --name placement --description "Placement API" placement
, e+ P! W$ G/ g& j0 L2 R! u
openstack endpoint create --region RegionOne placement public http://controller:8778
: W- V( s( z, U. Z# W. F
openstack endpoint create --region RegionOne placement internal http://controller:8778
5 D; [ {9 e# K# K' ^4 M- Z/ }
openstack endpoint create --region RegionOne placement admin http://controller:8778
, z |* I2 T7 ?2 b$ Byum install -y openstack-placement-api
6 s: b, _! M. K, h4 R9 t
sed -i "507c connection = mysql+pymysql://placement:123456@controller/placement
" /etc/placement/placement.conf
0 R! A+ y) G2 k' ssed -i "192c auth_strategy = keystone" /etc/placement/placement.conf
# i7 Q8 N# k& [4 D' w: j2 Hsed -i "241c auth_url = http://controller:5000/v3
" /etc/placement/placement.conf
6 F) _" {; u9 u2 Y. ~0 i% \sed -i "242c memcached_servers = controller:11211" /etc/placement/placement.conf
4 D' l/ F, t& Y: `- }0 m6 osed -i "243c auth_type = password" /etc/placement/placement.conf
% H& b4 N# Y' M, @( a# p2 f
sed -i "244c project_domain_name = Default" /etc/placement/placement.conf
7 T* B" P" \5 P# C* n: n; \
sed -i "245c user_domain_name = Default" /etc/placement/placement.conf
6 ~# e1 \- k$ ?: s* x- m9 w3 i) {3 }
sed -i "246c project_name = service" /etc/placement/placement.conf
$ J5 ^7 a# L2 C% R: y* b/ lsed -i "247c username = placement" /etc/placement/placement.conf
& ~# U8 Q9 }4 A- A" F& w( jsed -i "248c password = 123456" /etc/placement/placement.conf
6 ~& s8 [5 `! D+ C0 y5 ?" Dsu -s /bin/sh -c "placement-manage db sync" placement
$ h! a! M7 V. `3 p, T1 y
systemctl restart httpd
3 \. m" h9 Z# M* r5 c1 Q$ S B) r7 K
#控制节点 安装Compute service
& \) r" n9 }3 P6 h0 U. imysql -uroot -p123456 -e "CREATE DATABASE nova_api"
1 G J+ s3 k' ~
mysql -uroot -p123456 -e "CREATE DATABASE nova"
9 [# R1 }0 E! V5 y; umysql -uroot -p123456 -e "CREATE DATABASE nova_cell0"
& o y8 b% }. j4 ~7 q) E
mysql -uroot -p123456 -e "GRANT ALL PRIVILEGES ON nova_api.* TO 'nova'@'localhost' IDENTIFIED BY '123456'"
! A. g: r: U" Q5 J" x3 l7 b
mysql -uroot -p123456 -e "GRANT ALL PRIVILEGES ON nova_api.* TO 'nova'@'%' IDENTIFIED BY '123456'"
) j+ I" x2 Y* s$ [+ z3 Qmysql -uroot -p123456 -e "GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'localhost' IDENTIFIED BY '123456'"
6 t7 @2 \+ B' N* R7 G m" xmysql -uroot -p123456 -e "GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'%' IDENTIFIED BY '123456'"
6 W+ S# d- }$ x% }mysql -uroot -p123456 -e "GRANT ALL PRIVILEGES ON nova_cell0.* TO 'nova'@'localhost' IDENTIFIED BY '123456'"
! D$ |# L1 y+ P
mysql -uroot -p123456 -e "GRANT ALL PRIVILEGES ON nova_cell0.* TO 'nova'@'%' IDENTIFIED BY '123456'"
- a4 ]+ ?" }" U! L' u0 Popenstack user create --domain default --password 123456 nova
3 X; W: j" @* Y3 x b( W( g* Eopenstack role add --project service --user nova admin
) v/ M! g: k7 p6 ^7 N/ [" j1 u
openstack service create --name nova --description "OpenStack Compute" compute
& n5 | X1 p1 _- o2 H( h2 Q
openstack endpoint create --region RegionOne compute public http://controller:8774/v2.1
4 q' _9 u. w9 e7 B: k1 topenstack endpoint create --region RegionOne compute internal http://controller:8774/v2.1
; ]$ \' k5 Z, r7 S$ i
openstack endpoint create --region RegionOne compute admin http://controller:8774/v2.1
! {) F$ o3 p- t, L* v/ U
yum install -y openstack-nova-api openstack-nova-conductor openstack-nova-novncproxy openstack-nova-scheduler
, S+ D8 X2 n$ E/ R, H. Tsed -i "2c enabled_apis = osapi_compute,metadata" /etc/nova/nova.conf
8 D, d! L1 e5 D8 [sed -i "3c transport_url = rabbit://openstack:123456@controller:5672/
" /etc/nova/nova.conf
: I+ l5 W8 A: B, K" {5 vsed -i "4c my_ip = 10.0.0.11" /etc/nova/nova.conf
: q; v; _( x, z+ ]9 J; D
sed -i "1079c connection = mysql+pymysql://nova:123456@controller/nova_api
" /etc/nova/nova.conf
- T3 [8 [( {: p- C. _6 Ised -i "1622c connection = mysql+pymysql://nova:123456@controller/nova
" /etc/nova/nova.conf
5 L& v: G8 W8 `4 F# y( hsed -i "872c auth_strategy = keystone" /etc/nova/nova.conf
; Z& Q$ b @$ W9 f7 h! f' e) nsed -i "2561c www_authenticate_uri = http://controller:5000/
" /etc/nova/nova.conf " \% ~; {' k( z& `0 x! v, Q3 ^
sed -i "2562c auth_url = http://controller:5000/
" /etc/nova/nova.conf
& R0 l3 n; o- U) O# {2 ?3 ~; B+ Zsed -i "2563c memcached_servers = controller:11211" /etc/nova/nova.conf
3 \& {1 h3 Q8 X( W1 ased -i "2564c auth_type = password" /etc/nova/nova.conf
& }5 s0 ^, n5 \2 used -i "2565c project_domain_name = Default" /etc/nova/nova.conf
; b' Z# E# J$ Ased -i "2566c user_domain_name = Default" /etc/nova/nova.conf
; ~, v4 Q0 Q1 e* z5 `2 Csed -i "2567c project_name = service" /etc/nova/nova.conf
* w% Q1 Z8 O! k: w5 Dsed -i "2568c username = nova" /etc/nova/nova.conf
+ H6 y% y7 [- j6 v
sed -i "2569c password = 123456" /etc/nova/nova.conf
s, {' B {0 b3 A% tsed -i "5171c enabled = true" /etc/nova/nova.conf
3 h3 H3 a5 p. Msed -i '5172c server_listen = $my_ip' /etc/nova/nova.conf
! d- N& a# I1 K& Xsed -i '5173c server_proxyclient_address = $my_ip' /etc/nova/nova.conf
- U4 c8 X" i) e2 t9 G9 `9 M8 [- i3 Q
sed -i "1937c api_servers = http://controller:9292
" /etc/nova/nova.conf ( ~ e0 U x- [- [+ e6 D
sed -i "3571c lock_path = /var/lib/nova/tmp" /etc/nova/nova.conf
" G8 s5 @ z b: R. C2 q2 Bsed -i "4093c region_name = RegionOne" /etc/nova/nova.conf
# O3 b6 ? {" p& msed -i "4094c project_domain_name = Default" /etc/nova/nova.conf
) k" H# d! R9 n9 q& V) ~5 g( I
sed -i "4095c project_name = service" /etc/nova/nova.conf
" T( \2 b7 @9 M( L& n+ J( ased -i "4096c auth_type = password" /etc/nova/nova.conf
2 J& S7 j5 \4 j% B+ g+ [- E
sed -i "4097c user_domain_name = Default" /etc/nova/nova.conf
, x3 }2 d6 L% Z- ~ w2 O6 zsed -i "4098c auth_url = http://controller:5000/v3
" /etc/nova/nova.conf - f( h% `! z, S; o+ G3 H( j
sed -i "4099c username = placement" /etc/nova/nova.conf
$ H' V( k9 G3 j ysed -i "4100c password = 123456" /etc/nova/nova.conf
* F! u: @7 }2 Q& n
sed -i "4509c discover_hosts_in_cells_interval = 300" /etc/nova/nova.conf
% S# j# r/ q9 J# L9 [3 a
su -s /bin/sh -c "nova-manage api_db sync" nova
" E/ \# v+ F. G- l. v5 g- Lsu -s /bin/sh -c "nova-manage cell_v2 map_cell0" nova
e) A' J- C$ Y3 }. I
su -s /bin/sh -c "nova-manage cell_v2 create_cell --name=cell1 --verbose" nova
' B @% h; U2 r C4 ^8 M j5 x3 Psu -s /bin/sh -c "nova-manage db sync" nova
1 q" U; [+ Z" y7 C& p! t1 g
systemctl 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
. ?8 | Q* L/ P- T( b" N! Z
- ]! E( t" @! F& i8 d% M. }' m
#计算节点 安装Compute service
, [+ {5 K# J# ], Oyum install -y openstack-nova-compute
. u# }0 j2 l& e* K, G' K% K5 used -i "2c enabled_apis = osapi_compute,metadata" /etc/nova/nova.conf
z5 v/ |2 n; ]9 x9 B+ Q5 _sed -i "3c transport_url = rabbit://openstack:123456@controller
" /etc/nova/nova.conf - g Z4 C4 U+ a/ f/ z9 n7 k# |
sed -i "4c my_ip = 10.0.0.31" /etc/nova/nova.conf
+ k; z0 |& t8 b! \0 [9 z$ [sed -i "872c auth_strategy = keystone" /etc/nova/nova.conf
6 z% g9 j+ q, h" p& s& Zsed -i "2561c www_authenticate_uri = http://controller:5000/
" /etc/nova/nova.conf
$ C- Z0 i' V9 v7 C9 S" a# Fsed -i "2562c auth_url = http://controller:5000/
" /etc/nova/nova.conf " l+ ^3 N" T& _- l
sed -i "2563c memcached_servers = controller:11211" /etc/nova/nova.conf
: M( y( q& m M2 d- _( m8 j$ Hsed -i "2564c auth_type = password" /etc/nova/nova.conf
6 j" G" p0 R! i( ]9 |0 X* \* }
sed -i "2565c project_domain_name = Default" /etc/nova/nova.conf
- |7 \! s6 T7 o) S" y+ s1 a
sed -i "2566c user_domain_name = Default" /etc/nova/nova.conf
2 W' F: {- H) J/ K) r" N" R8 c
sed -i "2567c project_name = service" /etc/nova/nova.conf
5 K: E5 h' ~) V3 `% V9 |3 vsed -i "2568c username = nova" /etc/nova/nova.conf
3 v5 `3 M5 s% D A
sed -i "2569c password = 123456" /etc/nova/nova.conf
0 r7 ]& l; ^& g7 a$ f$ _3 qsed -i "5171c enabled = true" /etc/nova/nova.conf
2 g w, l% D3 ^
sed -i "5172c server_listen = 0.0.0.0" /etc/nova/nova.conf
: Z$ Y! ~, P# xsed -i '5173c server_proxyclient_address = $my_ip' /etc/nova/nova.conf
0 b% p6 d7 a$ P; L' {. o' u( ^
sed -i "5174c novncproxy_base_url = http://controller:6080/vnc_auto.html
" /etc/nova/nova.conf
0 ^" e: v3 ]3 L3 U2 e2 K9 x* osed -i "1937c api_servers = http://controller:9292
" /etc/nova/nova.conf ! p7 M- x+ |2 R& L0 O- ~* I l
sed -i "3571c lock_path = /var/lib/nova/tmp" /etc/nova/nova.conf
8 Q' c- t i$ a8 ~) ysed -i "4093c region_name = RegionOne" /etc/nova/nova.conf
0 D* A/ A0 ~* x* ~; Used -i "4094c project_domain_name = Default" /etc/nova/nova.conf
. ` e* G+ Y2 D1 Ysed -i "4095c project_name = service" /etc/nova/nova.conf
' _2 S5 R* p9 T
sed -i "4096c auth_type = password" /etc/nova/nova.conf
7 m' j( a# R5 o; e6 A$ z
sed -i "4097c user_domain_name = Default" /etc/nova/nova.conf
' k1 W! U' o3 ~" t1 J( r
sed -i "4098c auth_url = http://controller:5000/v3
" /etc/nova/nova.conf # {) g9 L5 i3 D+ H( x- @! t0 `9 r
sed -i "4099c username = placement" /etc/nova/nova.conf
+ y4 P% X$ d$ m2 s
sed -i "4100c password = 123456" /etc/nova/nova.conf
$ c3 ?" T c+ v& V! a
5 g, [/ [8 ^. T* K#执行命令,查看是否支持CPU虚拟化,如果大于0则支持。
) d- v; G0 }+ r2 M5 J6 @+ R- C
egrep -c '(vmx|svm)' /proc/cpuinfo
0 a1 N `- r$ ?: k: F
#如果不支持的话还需要执行下面的命令
2 ^7 O: O! d9 l R) p1 g3 ^
sed -i "2722c virt_type = qemu" /etc/nova/nova.conf
5 c7 U' p; U" R9 i* l) T" F
' \5 J# H: T: O/ z$ F! [. D
systemctl enable libvirtd.service openstack-nova-compute.service && systemctl start libvirtd.service openstack-nova-compute.service
, @7 M. Z) E& `
+ U9 ~& C6 I6 H& J! ?
#控制节点 计算节点从注册到发现会有延迟,根据discover_hosts_in_cells_interval 配置轮询发现时间,可以执行下面命令手动发现计算节点
' T: q* n# i% t4 ^; K
su -s /bin/sh -c "nova-manage cell_v2 discover_hosts --verbose" nova
C4 r0 ]% z0 c- r( n& j
2 V; s2 E% q" f F# h) s. |#控制节点 安装Networking service
9 c# h; `. c8 j
mysql -uroot -p123456 -e "CREATE DATABASE neutron"
7 ^ @+ l& M9 j, A4 u* T
mysql -uroot -p123456 -e "GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'localhost' IDENTIFIED BY '123456'"
* I b7 R Y, U7 y& a5 K; ?mysql -uroot -p123456 -e "GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'%' IDENTIFIED BY '123456'"
1 \. @3 l) U8 V+ Gopenstack user create --domain default --password 123456 neutron
" \/ D; ]8 r% w5 a8 b8 {& q; \openstack role add --project service --user neutron admin
0 V2 Y. b0 a. S) c
openstack service create --name neutron --description "OpenStack Networking" network
. E; L9 ^# P s) F5 [% }openstack endpoint create --region RegionOne network public http://controller:9696
& u' }$ C3 m Z h) o4 o+ Eopenstack endpoint create --region RegionOne network internal http://controller:9696
/ \3 ^! K( v" j) ]- m' [; E
openstack endpoint create --region RegionOne network admin http://controller:9696
% A; ]' t+ z2 T; \" ~
yum install -y openstack-neutron openstack-neutron-ml2 openstack-neutron-linuxbridge ebtables
9 [6 V3 M1 L' @( G8 ^, K
#配置服务器组件
* M& `& H0 ?% c$ p& vsed -i "2c core_plugin = ml2" /etc/neutron/neutron.conf
$ k! ?7 r5 J8 M& M+ @5 Qsed -i "3c service_plugins = router" /etc/neutron/neutron.conf
' x" p" F4 s: T1 L; P# k+ ~+ S" Lsed -i "4c allow_overlapping_ips = true" /etc/neutron/neutron.conf
: W# n2 L. C1 z% ^: ~) {( ?
sed -i "5c transport_url = rabbit://openstack:123456@controller
" /etc/neutron/neutron.conf 1 U$ p H: J! k B
sed -i "6c auth_strategy = keystone" /etc/neutron/neutron.conf
: ?+ M) J+ D* x- Z, |* vsed -i "7c notify_nova_on_port_status_changes = true" /etc/neutron/neutron.conf
9 ~4 V8 q' X* G
sed -i "8c notify_nova_on_port_data_changes = true" /etc/neutron/neutron.conf
9 v3 s4 ?+ O6 j* y2 u: ?6 Psed -i "254c connection = mysql+pymysql://neutron:123456@controller/neutron
" /etc/neutron/neutron.conf 2 x% N' X* x! L5 T3 j
sed -i "359c www_authenticate_uri = http://controller:5000
" /etc/neutron/neutron.conf
) A# X6 z$ B6 X5 ?: T# Bsed -i "360c auth_url = http://controller:5000
" /etc/neutron/neutron.conf
* ]" R. e( Z0 `' m3 c# `sed -i "361c memcached_servers = controller:11211" /etc/neutron/neutron.conf
) I$ Y5 a5 A9 Ssed -i "362c auth_type = password" /etc/neutron/neutron.conf
: j; t* S/ K* f2 d$ j
sed -i "363c project_domain_name = default" /etc/neutron/neutron.conf
2 ?( U7 a' }6 {
sed -i "364c user_domain_name = default" /etc/neutron/neutron.conf
- p, r2 t5 Y2 ` g
sed -i "365c project_name = service" /etc/neutron/neutron.conf
; ~0 @; d6 P8 h6 @9 I# ~8 N
sed -i "366c username = neutron" /etc/neutron/neutron.conf
7 w7 ]9 c, D& A* L% m
sed -i "367c password = 123456" /etc/neutron/neutron.conf
& v, A" T4 Y9 s/ c/ G2 a; U' m( ~sed -i "521c lock_path = /var/lib/neutron/tmp" /etc/neutron/neutron.conf
4 i0 S( J4 ?) m* O
echo "[nova]" >> /etc/neutron/neutron.conf
1 f) V, Z. ~& j2 x- v7 ~) @- F
echo "auth_url = http://controller:5000
" >> /etc/neutron/neutron.conf
0 @9 R1 U1 Y& D; m; zecho "auth_type = password" >> /etc/neutron/neutron.conf
6 m9 p& T3 c* ~9 e0 H+ mecho "project_domain_name = default" >> /etc/neutron/neutron.conf
5 @9 y2 n$ I4 d
echo "user_domain_name = default" >> /etc/neutron/neutron.conf
$ c3 p. l0 Y5 i" l6 t1 F, t
echo "region_name = RegionOne" >> /etc/neutron/neutron.conf
) ?& M) Z" f" ?! \. h4 u) g
echo "project_name = service" >> /etc/neutron/neutron.conf
r& A) E& w- cecho "username = nova" >> /etc/neutron/neutron.conf
( l) {! W5 Q. s9 pecho "password = 123456" >> /etc/neutron/neutron.conf
5 m' V; W, K( t/ n$ |. Q
#配置Modular Layer 2 (ML2) plug-in
! i6 C: f& V( t6 A! D* Q
echo "[ml2]" >> /etc/neutron/plugins/ml2/ml2_conf.ini
/ j1 L& c& W. a4 j* E
echo "type_drivers = flat,vlan,vxlan" >> /etc/neutron/plugins/ml2/ml2_conf.ini
: G; F& d. ]0 M. F; Q" _* \" M; A& iecho "tenant_network_types = vxlan" >> /etc/neutron/plugins/ml2/ml2_conf.ini
! H) n# N- D* K/ p! {7 {echo "mechanism_drivers = linuxbridge,l2population" >> /etc/neutron/plugins/ml2/ml2_conf.ini
3 Z5 I( a, n- R. U2 \
echo "extension_drivers = port_security" >> /etc/neutron/plugins/ml2/ml2_conf.ini
" X# o$ M3 {; u/ Q- f
echo "[ml2_type_flat]" >> /etc/neutron/plugins/ml2/ml2_conf.ini
! v4 K$ }8 P3 D& R* s7 ?$ C/ Mecho "flat_networks = provider" >> /etc/neutron/plugins/ml2/ml2_conf.ini
2 X; }- ], r# d/ |
echo "vni_ranges = 1:1000" >> /etc/neutron/plugins/ml2/ml2_conf.ini
3 C% m8 A' |4 a! ~% d* o3 `echo "[securitygroup]" >> /etc/neutron/plugins/ml2/ml2_conf.ini
& Q. @1 g! d# {+ P' I% O; J! xecho "enable_ipset = true" >> /etc/neutron/plugins/ml2/ml2_conf.ini
. k/ @( y; ^1 y1 I
#配置Linux bridge agent
, ?9 K+ Y4 I) Y- r! g& @
echo "[linux_bridge]" >> /etc/neutron/plugins/ml2/linuxbridge_agent.ini
* j6 U$ p1 w' O/ a0 c
#eth1为另外第二张网卡
! p' C0 R, n* J9 |echo "physical_interface_mappings = provider:eth1" >> /etc/neutron/plugins/ml2/linuxbridge_agent.ini
0 ~' \$ x B4 ^# z0 V
echo "[vxlan]" >> /etc/neutron/plugins/ml2/linuxbridge_agent.ini
/ R3 l2 x- l% d! O: Z/ H; `* F
echo "enable_vxlan = true" >> /etc/neutron/plugins/ml2/linuxbridge_agent.ini
' T* }# P2 F3 J3 ]0 @: u#10.0.0.12为第二张网卡的IP
2 s* b' h; l9 g$ v
echo "local_ip = 10.0.0.12" >> /etc/neutron/plugins/ml2/linuxbridge_agent.ini
& J" y, X0 {' c) _2 k! F. {/ E! u i
echo "l2_population = true" >> /etc/neutron/plugins/ml2/linuxbridge_agent.ini
# L O. `8 T" V% h o: A+ j% Qecho "[securitygroup]" >> /etc/neutron/plugins/ml2/linuxbridge_agent.ini
" L+ w2 O2 @3 W% aecho "enable_security_group = true" >> /etc/neutron/plugins/ml2/linuxbridge_agent.ini
$ S H* e* [0 k7 E* zecho "firewall_driver = neutron.agent.linux.iptables_firewall.IptablesFirewallDriver" >> /etc/neutron/plugins/ml2/linuxbridge_agent.ini
3 u0 t- a: ]6 j" ?
#配置layer-3 agent
4 N _7 [1 q/ ~0 o% _
sed -i "2c interface_driver = linuxbridge" /etc/neutron/l3_agent.ini
* }2 |4 G( H# Y) Q1 I! D0 K
#配置DHCP agent
3 I# H$ ~' e" N. }* v1 h2 dsed -i "2c interface_driver = linuxbridge" /etc/neutron/dhcp_agent.ini
0 s* G# j( f) W# E/ ~sed -i "3c dhcp_driver = neutron.agent.linux.dhcp.Dnsmasq" /etc/neutron/dhcp_agent.ini
$ S) J" e! I: o! d1 W& n, {: R
sed -i "4c enable_isolated_metadata = true" /etc/neutron/dhcp_agent.ini
% m( m( W! S" A& \
#配置metadata agent
3 o; t% A$ n$ B4 p) M" [5 v
sed -i "2c nova_metadata_host = controller" /etc/neutron/metadata_agent.ini
, D. T2 o- O/ G9 r
sed -i "3c metadata_proxy_shared_secret = 123456" /etc/neutron/metadata_agent.ini
( l' P8 {! w" k1 |' z4 T, o
#配置计算服务使用网络服务
# d' K7 j$ G/ u- _sed -i " 3334c auth_url = http://controller:5000
" /etc/nova/nova.conf
$ r6 o% f( a. G& Tsed -i " 3335c auth_type = password" /etc/nova/nova.conf
$ h- q9 F" Q( O' V' V) m5 x3 Psed -i " 3336c project_domain_name = default" /etc/nova/nova.conf
6 a: l2 A+ K- h/ h4 E( d! h+ f2 Osed -i " 3337c user_domain_name = default" /etc/nova/nova.conf
6 ~" M9 o1 }3 v3 w6 |* r4 v
sed -i " 3338c region_name = RegionOne" /etc/nova/nova.conf
8 Z- O( }. ]# D1 h/ u1 L
sed -i " 3339c project_name = service" /etc/nova/nova.conf
( z+ i. H; p3 J5 X
sed -i " 3340c username = neutron" /etc/nova/nova.conf
A; Q( K; s: i R9 e( ]sed -i " 3341c password = 123456" /etc/nova/nova.conf
7 D( n- y; v# {" H4 X$ ?- C" e
sed -i " 3342c service_metadata_proxy = true" /etc/nova/nova.conf
4 s$ w7 X1 D* N$ c
sed -i " 3343c metadata_proxy_shared_secret = 123456" /etc/nova/nova.conf
* m3 t$ m8 C `& ~
ln -s /etc/neutron/plugins/ml2/ml2_conf.ini /etc/neutron/plugin.ini
4 P8 P. h. K+ B' d$ a1 L; d/ F% Y% ysu -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
/ M; U0 K4 A" Q4 D3 N, z2 D9 ]systemctl restart openstack-nova-api.service
) F% t2 E# q" Q2 r9 y8 D" Bsystemctl 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
: a/ v$ k: }2 f
systemctl enable neutron-l3-agent.service && systemctl start neutron-l3-agent.service
1 C+ h1 c5 Y3 Q- x3 F
- m8 @& h4 B5 d4 ]0 k! h#计算节点 安装Networking service
6 y& I3 c# j3 k! [' y H
yum install -y openstack-neutron-linuxbridge ebtables ipset
& c0 ^1 ?6 T9 d, j9 Fsed -i "2c transport_url = rabbit://openstack:123456@controller
" /etc/neutron/neutron.conf
* s/ U- A, h/ i8 M0 K4 V6 j& W Qsed -i "3c auth_strategy = keystone" /etc/neutron/neutron.conf
8 @/ O3 }3 h* m
sed -i "359c www_authenticate_uri = http://controller:5000
" /etc/neutron/neutron.conf
* Y9 m5 b/ ]1 o; w0 Tsed -i "360c auth_url = http://controller:5000
" /etc/neutron/neutron.conf
7 m# Y% I4 ^: \4 osed -i "361c memcached_servers = controller:11211" /etc/neutron/neutron.conf
) g: B0 p5 i) o8 n( L
sed -i "362c auth_type = password" /etc/neutron/neutron.conf
1 a/ B( x7 Y7 ]' p+ f9 n/ ised -i "363c project_domain_name = default" /etc/neutron/neutron.conf
# O% k3 n+ r# }" q6 }
sed -i "364c user_domain_name = default" /etc/neutron/neutron.conf
2 D# I1 Q5 t5 }" e2 p% y, W
sed -i "365c project_name = service" /etc/neutron/neutron.conf
5 J; f) M! @& ?; K5 O4 Ised -i "366c username = neutron" /etc/neutron/neutron.conf
' K5 _. R' A. `4 r, ^5 E
sed -i "367c password = 123456" /etc/neutron/neutron.conf
5 ]) Q. w( L2 W6 [0 o7 Z5 c& b
sed -i "521c lock_path = /var/lib/neutron/tmp" /etc/neutron/neutron.conf
6 N* G( y3 q& W0 G- H& L
echo "[linux_bridge]" >> /etc/neutron/plugins/ml2/linuxbridge_agent.ini
3 W- K- X1 \; q
#eth1为另外第二张网卡
" q. f) J8 z4 G) e" a# Z& j% j" x$ _echo "physical_interface_mappings = provider:eth1" >> /etc/neutron/plugins/ml2/linuxbridge_agent.ini
/ U @, P* n- D, _- J! Y7 q5 Uecho "[vxlan]" >> /etc/neutron/plugins/ml2/linuxbridge_agent.ini
7 O2 i, ^, y0 w4 i! t1 Q% X q
echo "enable_vxlan = true" >> /etc/neutron/plugins/ml2/linuxbridge_agent.ini
1 x& l: M2 Q7 R" H1 s& u#10.0.0.32为第二张网卡的IP
; E; W: M0 F: y3 V9 {" s8 {. _
echo "local_ip = 10.0.0.32" >> /etc/neutron/plugins/ml2/linuxbridge_agent.ini
9 C8 N# ~) l% d+ \9 J: y
echo "l2_population = true" >> /etc/neutron/plugins/ml2/linuxbridge_agent.ini
2 p/ b- O" \ A0 ?- M# V" s1 Eecho "[securitygroup]" >> /etc/neutron/plugins/ml2/linuxbridge_agent.ini
* ?& ^1 R4 o O2 o- K: U0 s6 ]
echo "enable_security_group = true" >> /etc/neutron/plugins/ml2/linuxbridge_agent.ini
' ]7 Z6 v$ Q! `5 {6 aecho "firewall_driver = neutron.agent.linux.iptables_firewall.IptablesFirewallDriver" >> /etc/neutron/plugins/ml2/linuxbridge_agent.ini
, f$ Q; n! }6 G; T
#配置计算服务使用网络服务
+ f0 q7 v0 x* S( I+ p' y
sed -i " 3334c auth_url = http://controller:5000
" /etc/nova/nova.conf 4 |* y3 Z9 e3 o) \# s
sed -i " 3335c auth_type = password" /etc/nova/nova.conf
T1 |3 U7 g" _' S5 n i7 w
sed -i " 3336c project_domain_name = default" /etc/nova/nova.conf
( c8 J0 N, z4 v: [
sed -i " 3337c user_domain_name = default" /etc/nova/nova.conf
/ x' B( f) _2 w9 l+ r
sed -i " 3338c region_name = RegionOne" /etc/nova/nova.conf
1 e2 B4 |, s7 j5 w/ C2 X
sed -i " 3339c project_name = service" /etc/nova/nova.conf
+ {: i8 y# g& _sed -i " 3340c username = neutron" /etc/nova/nova.conf
7 i9 S0 e5 b6 ?sed -i " 3341c password = 123456" /etc/nova/nova.conf
# J; t) p/ D* o" T& Xsystemctl restart openstack-nova-compute.service
% _" L5 x+ z& P8 w
systemctl enable neutron-linuxbridge-agent.service && systemctl start neutron-linuxbridge-agent.service
8 P$ |0 R/ }/ b; O* }- T# p% ^: F- h. _/ r% Z
#控制节点 安装Dashboard
8 D u2 q* f8 k6 q/ @9 fyum install -y openstack-dashboard
- a$ s- b" K7 ^* \sed -i '118c OPENSTACK_HOST = "controller"' /etc/openstack-dashboard/local_settings
2 }6 Z0 K, N3 e5 O2 o# z2 P7 ]) y
sed -i "39c ALLOWED_HOSTS = ['*']" /etc/openstack-dashboard/local_settings
5 b+ O: v1 Y8 V
sed -i "104c SESSION_ENGINE = 'django.contrib.sessions.backends.cache'" /etc/openstack-dashboard/local_settings
: b1 S1 |/ D4 o5 r
sed -i "94c CACHES = {" /etc/openstack-dashboard/local_settings
3 n" l9 B2 n. p! |0 Vsed -i "95c 'default': {" /etc/openstack-dashboard/local_settings
9 ~* ~& t6 t1 f$ Z7 K8 a8 zsed -i "96c 'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache'," /etc/openstack-dashboard/local_settings
/ P/ c9 U& I d) Qsed -i "97c 'LOCATION': 'controller:11211'," /etc/openstack-dashboard/local_settings
/ D0 r2 r# T; }2 g
sed -i "98c }" /etc/openstack-dashboard/local_settings
# ?) G) n" ?) \' s L4 F0 p6 f
sed -i "99c }" /etc/openstack-dashboard/local_settings
/ o3 L+ W( S- z- |8 s j# i9 t# O f
sed -i '119c OPENSTACK_KEYSTONE_URL = "http://%s:5000/v3
" % OPENSTACK_HOST' /etc/openstack-dashboard/local_settings 2 c) Y& p7 P2 K' m8 G
echo 'OPENSTACK_KEYSTONE_MULTIDOMAIN_SUPPORT = True' >> /etc/openstack-dashboard/local_settings
, @: J( f; R( v* d2 m9 G) u) a* ]echo 'OPENSTACK_API_VERSIONS = {' >> /etc/openstack-dashboard/local_settings
9 ?- O7 ?2 ~! S
echo ' "identity": 3,' >> /etc/openstack-dashboard/local_settings
( B! i/ @- L! O/ _+ Gecho ' "image": 2,' >> /etc/openstack-dashboard/local_settings
, B5 g2 P5 z" ?0 v5 b) q# R! o+ p; }8 xecho ' "volume": 3' >> /etc/openstack-dashboard/local_settings
+ n* w& \. o7 v+ Jecho '}' >> /etc/openstack-dashboard/local_settings
" O. Z! N: g7 }$ \8 K. d, T/ z
echo 'OPENSTACK_KEYSTONE_DEFAULT_DOMAIN = "Default"' >> /etc/openstack-dashboard/local_settings
+ P% b5 i0 Y2 Y" z0 c! Q( G# Kecho 'OPENSTACK_KEYSTONE_DEFAULT_ROLE = "user"' >> /etc/openstack-dashboard/local_settings
; ^1 a0 r* l) d6 s. C* W$ ~, B% ~sed -i '123c TIME_ZONE = "Asia/Shanghai"' /etc/openstack-dashboard/local_settings
# d$ t( b( K$ {6 U3 P% B
echo "WEBROOT = '/dashboard/'" >> /etc/openstack-dashboard/local_settings
5 o& W* ?$ B3 |echo 'WSGIApplicationGroup %{GLOBAL}' >> /etc/httpd/conf.d/openstack-dashboard.conf
. c1 Y) [1 x; y6 Osystemctl restart httpd.service memcached.service
$ |# C1 z" ?* A5 G+ |
4 E4 h5 z: f ^1 f* D4 [; D
#安装完成,可访问http://10.0.0.11/dashboard/
查看
' _8 _- b8 D3 W5 r( j- j1 b