#!/bin/bash
/ W" [: q" `! R) e+ y+ o2 o
/ ~1 s$ c0 A: D' I( ]; |; f3 r
#Centos8最小化部署安装OpenStack Ussuri
' d' e- G( v9 v) i. u1 }#共两台主机,分别是一台控制节点,一台计算节点
! e( Y) K& `; `7 @- B#1、控制节点内存4096M。双网卡,分别为eth0:10.0.0.11,eth1:10.0.0.12
% K! B3 _6 R1 l, i+ i: R$ B" M2 J4 j
#2、计算节点内存4096M。双网卡,分别为eth0:10.0.0.31,eth1:10.0.0.32
0 W+ J/ c* b. W1 v4 s6 Z! L4 R* E1 P0 B
#设置阿里云yum源
3 S& h' m& c+ ?9 m( ^
( x. m g* s2 C; Arm -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
7 H# w5 }2 J) b: X5 c# }! y
+ n5 C6 x8 S9 q' H#关闭防火墙
( u+ T5 y! a P
systemctl stop firewalld && systemctl disable firewalld
5 g( `4 p H, b4 e' Q5 Q5 @1 G+ n! o, e* q; e/ ]2 \4 R
#关闭SELinux
& e- L2 t: f5 s( t; @* Ssetenforce 0
/ i6 L0 A5 Z- c; R( Bsed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config
. C, g1 j( M" M) I
$ M- @5 f4 V6 x2 ~# a#关闭swap分区
: Y- ?/ A" B6 v5 O, m. } `
swapoff -a
8 F$ k+ e8 z# R$ w& }$ tsed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
( p' ~ o6 B6 B! p. Z* C+ S" S6 p) T
#设置内核
' X: P( b9 c. M! ?* ]* cmodprobe bridge
+ Q+ {8 `4 d' |+ v. j: e0 E- _' a: U2 ~modprobe br_netfilter
7 L4 i/ i2 X# s$ F# U9 ?cat > /etc/sysconfig/modules/neutron.modules <<EOF
2 H" @: M) z) }) e
#!/bin/bash
3 J1 z5 v, m# |/ _
modprobe -- bridge
7 n" E+ G @1 I3 Z6 v) }3 g
modprobe -- br_netfilter
, O& q& w4 }! ^EOF
2 C! u4 G c! j9 Z8 T2 c2 j0 ]
chmod 755 /etc/sysconfig/modules/neutron.modules && bash /etc/sysconfig/modules/neutron.modules
) g: P4 p1 F4 o: E3 l% V
echo "vm.max_map_count=262144" >> /etc/sysctl.conf
+ D1 \( ^7 {; ~1 b' q) Mecho "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
8 N: _# v6 _3 A! a4 I4 q4 u* ^
echo "net.bridge.bridge-nf-call-iptables=1" >> /etc/sysctl.conf
& C+ Q0 ~( P1 h: z" J$ Q
echo "net.bridge.bridge-nf-call-ip6tables=1" >> /etc/sysctl.conf
4 @- N4 D/ R. S: Rsysctl -p
, U( s/ U: r8 u9 q- s$ s
6 h, o) U% f0 x#设置时间同步
* S" b( ?/ R2 O( T
yum install -y chrony && yum -y autoremove
8 R4 D1 H+ v0 C2 M! O" v& {9 M/ Msed -i '/^pool/d' /etc/chrony.conf
5 P# F4 r7 m! d6 x3 h
sed -i '/^server/d' /etc/chrony.conf
, l; {, |/ ?$ u) e1 ~4 fecho "pool ntp.aliyun.com iburst" >> /etc/chrony.conf
# @# E: k, z# t; m3 T# i4 d
systemctl start chronyd.service && systemctl enable chronyd.service
4 n: Z& S N5 S' q% v/ k& L
: @1 M- X" @* P/ R" q#控制节点 设置hostname
* I; w% u- L* _8 B$ `hostnamectl set-hostname controller
" r w _% D) h3 Y: Y# g7 O9 J
T6 z: C2 x9 C#计算节点 设置hostname
& b) B" D7 u: l9 V3 o- Yhostnamectl set-hostname compute1
6 e) t7 Y7 }% P. S% B
! T/ [: M6 o* i9 X- ~+ J0 b
#添加host
& T- m8 q# N- O2 F/ `' eecho "10.0.0.11 controller" >> /etc/hosts
3 A* R0 c Z0 C
echo "10.0.0.31 compute1" >> /etc/hosts
+ Z' U( l) S# }; M! G) C- `8 F$ j8 A+ h4 P1 D1 j
#安装基础组件
( k8 p$ P3 ?6 B
yum install -y centos-release-openstack-ussuri
- i5 ~3 o$ Q2 e9 [2 \yum config-manager --set-enabled PowerTools
/ o* q% H" Y5 @1 C& F4 e
yum upgrade -y
" L5 ^3 ^5 |& C) S5 K
yum install -y python3-openstackclient
]/ A r! y+ ^# [% u# _
2 [( @6 h2 {$ H, O. j#控制节点 安装Mariadb
# F9 \$ X% o1 H6 H# tyum install -y mariadb mariadb-server python2-PyMySQL
9 y# l j& ^* J" ~# L# } L8 x0 _+ ~tee /etc/my.cnf.d/openstack.cnf <<-'EOF'
6 i- h' G* z1 D[mysqld]
; M) V- p& Q% Q6 B- K8 Y
bind-address = 10.0.0.11
6 m7 f& h" e( N0 w; Rdefault-storage-engine = innodb
% N+ K2 H6 M5 J+ v: t
innodb_file_per_table = on
) b z) l4 m: Y6 w9 x
max_connections = 4096
( W7 Z5 J8 I; s! p) g; w
collation-server = utf8_general_ci
6 n# U& Y" I$ b. n) Icharacter-set-server = utf8
/ |4 C: Y5 g! C' f8 q. D+ VEOF
8 U# f; [! T. ^$ `
systemctl enable mariadb.service && systemctl start mariadb.service
+ u+ I" ]( P4 J, w) ~3 Vecho -e "\nY\n123456\n123456\nY\nn\nY\nY\n" | mysql_secure_installation
- j" e9 z6 d% _ L! ~
- j; `( o- R ~# O0 j( k#控制节点 安装RabbitMQ
, J$ k$ P& J7 }4 H, }
yum install -y rabbitmq-server
1 c* j8 p" F( l, L" F
systemctl enable rabbitmq-server.service && systemctl start rabbitmq-server.service
8 a( ]5 @& j4 S) ?0 T7 c5 X5 Wrabbitmqctl add_user openstack 123456
2 T+ ~& h7 H1 [rabbitmqctl set_permissions openstack ".*" ".*" ".*"
0 g5 m) C- y, I3 O b- l
: b* b9 n4 U- i! C9 U#控制节点 安装Memcached
- O, @) C0 @, z7 W& Jyum install -y memcached python3-memcached
# o: c7 O8 N% h5 S+ ]+ x( u) T" g' r
sed -i "s/-l 127.0.0.1,::1/-l 127.0.0.1,::1,controller/g" /etc/sysconfig/memcached
. H, G. K7 E2 a+ l* jsystemctl enable memcached.service && systemctl start memcached.service
4 R' U2 j# w4 @$ ~( {) ^; Q H6 R" a
$ f2 A# z, f) G& V#控制节点 安装Etcd
3 |1 `: j$ ~- S1 f' g& o" tyum install -y etcd
* ~0 X8 A# ]+ O$ N& F1 j$ R9 v
rm -f /etc/etcd/etcd.conf
; I h& d8 y# r% q+ a; Vtee /etc/etcd/etcd.conf <<-'EOF'
% V8 K* }$ ^! D) P/ ~' K* D6 s#[Member]
# ~8 b# ^7 U, }& w/ ?* R9 tETCD_DATA_DIR="/var/lib/etcd/default.etcd"
7 T6 ~' n: V' \+ `$ Y2 h
ETCD_LISTEN_PEER_URLS="http://10.0.0.11:2380
" - x$ M |1 \& `, ]
ETCD_LISTEN_CLIENT_URLS="http://10.0.0.11:2379
"
6 ?) ?; X1 v' D" \9 hETCD_NAME="controller"
" }$ E8 [, F- G! N7 _* u' n#[Clustering]
& I S: S% A+ [! m" OETCD_INITIAL_ADVERTISE_PEER_URLS="http://10.0.0.11:2380
"
- T5 `; n1 U# A$ ~) h* _ETCD_ADVERTISE_CLIENT_URLS="http://10.0.0.11:2379
" , r% s" _4 h( z2 V+ F5 b8 ]
ETCD_INITIAL_CLUSTER="controller=http://10.0.0.11:2380
"
. \" ^" C. F/ T! |: _ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster-01"
2 N: L+ d0 O. ?+ LETCD_INITIAL_CLUSTER_STATE="new"
' M0 g: L; ]0 _# X* d4 Y
EOF
* p3 E" n/ u. _4 m
systemctl enable etcd && systemctl start etcd
% t4 u- V: a- J: g3 C
4 S- R( M+ @% u( O6 g#控制节点 安装Identity service
, v: D8 s' Q5 V
mysql -uroot -p123456 -e "CREATE DATABASE keystone"
) N+ ~4 O, o4 v/ L! {- ^# u" Qmysql -uroot -p123456 -e "GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'localhost' IDENTIFIED BY '123456'"
8 \& j. @# c* D y( F
mysql -uroot -p123456 -e "GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'%' IDENTIFIED BY '123456'"
4 B% j) h h+ y: i R V0 `
yum install -y openstack-keystone httpd python3-mod_wsgi
" [! Q7 w: |* o; Dsed -i "556c connection = mysql+pymysql://keystone:123456@controller/keystone
" /etc/keystone/keystone.conf
$ N4 H/ o% o0 p! J4 ?; Esed -i "2418c provider = fernet" /etc/keystone/keystone.conf
; P w- `) ^' `1 E, b
su -s /bin/sh -c "keystone-manage db_sync" keystone
+ e; v5 |. b Zkeystone-manage fernet_setup --keystone-user keystone --keystone-group keystone
! B* ?; ^8 P z! s& g- J- c
keystone-manage credential_setup --keystone-user keystone --keystone-group keystone
' `3 J" I7 Q" i' k5 G/ Bkeystone-manage bootstrap --bootstrap-password 123456 \
- v* u* x4 p" x1 A9 U
--bootstrap-admin-url http://controller:5000/v3/ \
W1 ^' M3 [; F% u --bootstrap-internal-url http://controller:5000/v3/ \
- q6 e5 Y+ }5 z8 ?; _
--bootstrap-public-url http://controller:5000/v3/ \
5 l. c- n, O# D i9 h+ m
--bootstrap-region-id RegionOne
3 B5 C, j- m2 T. T5 S6 d4 Necho "ServerName controller" >> /etc/httpd/conf/httpd.conf
! `) F1 O" |; [$ d8 R
ln -s /usr/share/keystone/wsgi-keystone.conf /etc/httpd/conf.d/
" s2 v5 J! G. R7 T! Fsystemctl enable httpd.service && systemctl start httpd.service
) `7 F% K D! Oecho "export OS_USERNAME=admin" >> /etc/profile
; a7 \& O; s ]) Oecho "export OS_PASSWORD=123456" >> /etc/profile
% o% f( T' Q) ]
echo "export OS_PROJECT_NAME=admin" >> /etc/profile
) e h9 b6 k- Yecho "export OS_USER_DOMAIN_NAME=Default" >> /etc/profile
$ k" K4 c! x# I4 f3 m3 p0 `
echo "export OS_PROJECT_DOMAIN_NAME=Default" >> /etc/profile
3 m1 U1 x: A7 Q- D" ^
echo "export OS_AUTH_URL=http://controller:5000/v3
" >> /etc/profile M( d8 O; N, j6 ~: A0 G' m1 m& i
echo "export OS_IDENTITY_API_VERSION=3" >> /etc/profile
6 z/ J2 n- m. C/ Q7 Ksource /etc/profile
0 v& j% |: t4 |openstack project create --domain default --description "Service Project" service
' F3 l* C3 M! b
- C3 [; s3 g# ?' T6 t4 J
#控制节点 安装Image service
' \. s- x1 J6 n" d* N8 I
mysql -uroot -p123456 -e "CREATE DATABASE glance"
& P- `: X$ v7 Fmysql -uroot -p123456 -e "GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'localhost' IDENTIFIED BY '123456'"
: }8 P4 o8 a; u& C, g, J) H4 gmysql -uroot -p123456 -e "GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'%' IDENTIFIED BY '123456'"
; y/ q' v5 j. V5 n9 c( [* qopenstack user create --domain default --password 123456 glance
9 `. j G% u# m' z) e
openstack role add --project service --user glance admin
( l2 F& y0 W) C
openstack service create --name glance --description "OpenStack Image" image
: [4 p/ N3 a, y( W- |( w+ e) |8 @openstack endpoint create --region RegionOne image public http://controller:9292
+ Q$ U* }( }7 n3 r- Sopenstack endpoint create --region RegionOne image internal http://controller:9292
# \& R" W/ h9 ^; R( `5 Q o! V8 Gopenstack endpoint create --region RegionOne image admin http://controller:9292
+ J0 N7 {1 \6 c l, C5 [3 ^' k
yum install -y openstack-glance
' y7 q. ^) q7 c: E3 ^* E! E% rsed -i "2062c connection = mysql+pymysql://glance:123456@controller/glance
" /etc/glance/glance-api.conf
" d- U) |/ {# B' `! Z R2 [- Esed -i "5034c www_authenticate_uri = http://controller:5000
" /etc/glance/glance-api.conf 7 x+ B0 }7 {* ?, `
sed -i "5035c auth_url = http://controller:5000
" /etc/glance/glance-api.conf
$ q0 P- N7 N% `, H0 J( Z& O. `sed -i "5036c memcached_servers = controller:11211" /etc/glance/glance-api.conf
1 z, r5 T$ ?8 u3 c; h6 D, U
sed -i "5037c auth_type = password" /etc/glance/glance-api.conf
: ~/ m" j. p8 m
sed -i "5038c project_domain_name = Default" /etc/glance/glance-api.conf
O6 U9 w( e2 V5 F1 q& psed -i "5039c user_domain_name = Default" /etc/glance/glance-api.conf
' k' f! ?$ e$ o" h
sed -i "5040c project_name = service" /etc/glance/glance-api.conf
' U) W- y* i# D8 c
sed -i "5041c username = glance" /etc/glance/glance-api.conf
/ k& H h, N0 x$ Tsed -i "5042c password = 123456" /etc/glance/glance-api.conf
6 d5 F. }% K7 m
sed -i "5678c flavor = keystone" /etc/glance/glance-api.conf
6 s+ H" F" l+ G, i, f8 ~sed -i "3413c stores = file,http" /etc/glance/glance-api.conf
; _+ x0 x6 J( d+ Y5 Q
sed -i "3414c default_store = file" /etc/glance/glance-api.conf
: ]% b1 J* i& a8 vsed -i "3415c filesystem_store_datadir = /var/lib/glance/images/" /etc/glance/glance-api.conf
( w% }# e' }/ G- _- ]8 w, Msu -s /bin/sh -c "glance-manage db_sync" glance
0 i4 r" ^: j/ i- C" qsystemctl enable openstack-glance-api.service && systemctl start openstack-glance-api.service
) o! a3 Y$ z. a' m5 V4 {, ]
1 ~9 Q2 A3 I& `( Q! k#控制节点 安装Placement service
5 Q% x) w; B$ X# b3 A# h
mysql -uroot -p123456 -e "CREATE DATABASE placement"
7 V3 a. Q7 S+ R5 q
mysql -uroot -p123456 -e "GRANT ALL PRIVILEGES ON placement.* TO 'placement'@'localhost' IDENTIFIED BY '123456'"
% z" |: `& T% M1 f% c9 I
mysql -uroot -p123456 -e "GRANT ALL PRIVILEGES ON placement.* TO 'placement'@'%' IDENTIFIED BY '123456'"
2 |! Z6 b" J) Popenstack user create --domain default --password 123456 placement
2 Q2 e) {* A0 A! |: N8 Z- _% r6 Jopenstack role add --project service --user placement admin
* A) f+ D+ ?$ [* ? gopenstack service create --name placement --description "Placement API" placement
! C$ ~% |% ]4 I5 E5 _openstack endpoint create --region RegionOne placement public http://controller:8778
! J: j- A7 n- v1 V# X* x h8 e5 O
openstack endpoint create --region RegionOne placement internal http://controller:8778
5 ?8 t; v. n( _openstack endpoint create --region RegionOne placement admin http://controller:8778
5 _, G! R; h5 B( X7 uyum install -y openstack-placement-api
6 a: F* i" d b, V' D5 G! y* P$ \
sed -i "507c connection = mysql+pymysql://placement:123456@controller/placement
" /etc/placement/placement.conf
6 j4 C" V8 ^+ G; b6 D1 J% Bsed -i "192c auth_strategy = keystone" /etc/placement/placement.conf
* I$ b. d: h. G6 U7 g, o; w
sed -i "241c auth_url = http://controller:5000/v3
" /etc/placement/placement.conf % W# F/ I, ?/ M
sed -i "242c memcached_servers = controller:11211" /etc/placement/placement.conf
4 D2 j) U0 t8 k
sed -i "243c auth_type = password" /etc/placement/placement.conf
* n j0 a1 I1 r( V& |+ e2 qsed -i "244c project_domain_name = Default" /etc/placement/placement.conf
$ d3 d! Y1 j v; T( q, nsed -i "245c user_domain_name = Default" /etc/placement/placement.conf
/ n' K+ w: }, K: X/ n
sed -i "246c project_name = service" /etc/placement/placement.conf
, k' J6 ^* d* A+ j& a
sed -i "247c username = placement" /etc/placement/placement.conf
/ o( ?, s- Q7 o- ]7 q* ised -i "248c password = 123456" /etc/placement/placement.conf
$ c; v( ^; \1 i! usu -s /bin/sh -c "placement-manage db sync" placement
6 [( r5 o* f' B' Xsystemctl restart httpd
8 h' O' N, S+ \* V& Y
f2 a" a0 N3 J* I; R
#控制节点 安装Compute service
8 f6 v7 i7 i8 }, j- W& P0 Qmysql -uroot -p123456 -e "CREATE DATABASE nova_api"
7 W; e, W; G( p/ t7 u, z1 c
mysql -uroot -p123456 -e "CREATE DATABASE nova"
; Q7 e9 U- ~. x
mysql -uroot -p123456 -e "CREATE DATABASE nova_cell0"
* c/ I* e) ?, Z6 ^3 Emysql -uroot -p123456 -e "GRANT ALL PRIVILEGES ON nova_api.* TO 'nova'@'localhost' IDENTIFIED BY '123456'"
7 i) A v4 z- Q: m5 lmysql -uroot -p123456 -e "GRANT ALL PRIVILEGES ON nova_api.* TO 'nova'@'%' IDENTIFIED BY '123456'"
; g0 S4 A+ ^$ S P
mysql -uroot -p123456 -e "GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'localhost' IDENTIFIED BY '123456'"
4 D. ~# A/ P9 P) M( q
mysql -uroot -p123456 -e "GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'%' IDENTIFIED BY '123456'"
) P/ B6 _( u' r$ B# imysql -uroot -p123456 -e "GRANT ALL PRIVILEGES ON nova_cell0.* TO 'nova'@'localhost' IDENTIFIED BY '123456'"
8 a$ S; \# g! S3 L
mysql -uroot -p123456 -e "GRANT ALL PRIVILEGES ON nova_cell0.* TO 'nova'@'%' IDENTIFIED BY '123456'"
1 a4 l2 R% N/ Q* k6 q! A2 Wopenstack user create --domain default --password 123456 nova
l" M3 f1 H$ t. ~openstack role add --project service --user nova admin
" Q3 W4 f' U( [) T2 mopenstack service create --name nova --description "OpenStack Compute" compute
9 B- m8 f! Q) l: A" p+ \
openstack endpoint create --region RegionOne compute public http://controller:8774/v2.1
( B# q$ W- m- b8 k' copenstack endpoint create --region RegionOne compute internal http://controller:8774/v2.1
' k# S1 v& D8 C. C; i. R, _: ~
openstack endpoint create --region RegionOne compute admin http://controller:8774/v2.1
: `9 ^' P9 Y+ J, f( N2 ryum install -y openstack-nova-api openstack-nova-conductor openstack-nova-novncproxy openstack-nova-scheduler
# _6 c4 L7 K8 n O6 {sed -i "2c enabled_apis = osapi_compute,metadata" /etc/nova/nova.conf
5 e; x* E* Q! D1 Fsed -i "3c transport_url = rabbit://openstack:123456@controller:5672/
" /etc/nova/nova.conf + L. w/ [6 U% x( d; B! H1 G
sed -i "4c my_ip = 10.0.0.11" /etc/nova/nova.conf
0 N0 G/ N$ o- L6 ~7 S! Z
sed -i "1079c connection = mysql+pymysql://nova:123456@controller/nova_api
" /etc/nova/nova.conf " E9 o: i" \& J2 |
sed -i "1622c connection = mysql+pymysql://nova:123456@controller/nova
" /etc/nova/nova.conf 0 E5 w- [; }+ C5 \ G$ Q( ?" R
sed -i "872c auth_strategy = keystone" /etc/nova/nova.conf
) L) E7 p' Y1 X4 O
sed -i "2561c www_authenticate_uri = http://controller:5000/
" /etc/nova/nova.conf
3 T9 Q/ U0 m1 k+ `' u& lsed -i "2562c auth_url = http://controller:5000/
" /etc/nova/nova.conf
' q! E4 Z! n! ?8 q4 C9 zsed -i "2563c memcached_servers = controller:11211" /etc/nova/nova.conf
9 a$ ]+ E0 j. r7 J) r& i
sed -i "2564c auth_type = password" /etc/nova/nova.conf
6 P! U- }7 `! e2 d- jsed -i "2565c project_domain_name = Default" /etc/nova/nova.conf
- f" d7 f& P' `0 Y3 Q/ H
sed -i "2566c user_domain_name = Default" /etc/nova/nova.conf
3 k C+ X& y% m- ` ^0 x
sed -i "2567c project_name = service" /etc/nova/nova.conf
# U+ V9 X ]. E7 D0 Used -i "2568c username = nova" /etc/nova/nova.conf
: ]) l4 V( v0 F( \; q; E1 L, |. `sed -i "2569c password = 123456" /etc/nova/nova.conf
9 n7 n* b- s' M
sed -i "5171c enabled = true" /etc/nova/nova.conf
0 E$ o n1 Z/ }& V s1 p# D4 psed -i '5172c server_listen = $my_ip' /etc/nova/nova.conf
2 T! L% g, L3 L; Ksed -i '5173c server_proxyclient_address = $my_ip' /etc/nova/nova.conf
% I, D6 e- x6 m9 S4 Y6 w
sed -i "1937c api_servers = http://controller:9292
" /etc/nova/nova.conf / Z' k* q6 Z$ G# g9 E( r- R
sed -i "3571c lock_path = /var/lib/nova/tmp" /etc/nova/nova.conf
: G- \. L2 X3 k8 Q0 I) @sed -i "4093c region_name = RegionOne" /etc/nova/nova.conf
5 m' g% X- z+ ^+ x4 J5 X/ U
sed -i "4094c project_domain_name = Default" /etc/nova/nova.conf
+ V, e0 d* b7 A) Q
sed -i "4095c project_name = service" /etc/nova/nova.conf
6 H0 I( f- `+ c+ |5 E& u9 R7 h* C2 D- qsed -i "4096c auth_type = password" /etc/nova/nova.conf
$ x! @. A2 p1 [sed -i "4097c user_domain_name = Default" /etc/nova/nova.conf
: j+ d& B5 X( K' @0 n! }4 s- a+ Osed -i "4098c auth_url = http://controller:5000/v3
" /etc/nova/nova.conf ! N1 i+ W. r5 ?; |+ `* e
sed -i "4099c username = placement" /etc/nova/nova.conf
5 ^4 P5 U$ e( f7 Lsed -i "4100c password = 123456" /etc/nova/nova.conf
7 `0 m) l5 o1 @3 o9 b8 Q
sed -i "4509c discover_hosts_in_cells_interval = 300" /etc/nova/nova.conf
3 [# {: X1 G: A, _
su -s /bin/sh -c "nova-manage api_db sync" nova
) _. \/ A$ M% z/ u K. lsu -s /bin/sh -c "nova-manage cell_v2 map_cell0" nova
: G8 v, n4 D3 e( E/ Tsu -s /bin/sh -c "nova-manage cell_v2 create_cell --name=cell1 --verbose" nova
1 L3 @) W! i# H6 K- w0 p5 r5 Tsu -s /bin/sh -c "nova-manage db sync" nova
" w% A) Y/ u. F: i6 U9 \
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
g0 |5 Q6 M+ v9 X: a0 K: a/ B' [5 T
#计算节点 安装Compute service
0 n* p4 U3 r# D, v+ Pyum install -y openstack-nova-compute
& X0 \2 J) |9 L1 O1 U
sed -i "2c enabled_apis = osapi_compute,metadata" /etc/nova/nova.conf
/ E1 C, Z9 i4 W: ], o; ased -i "3c transport_url = rabbit://openstack:123456@controller
" /etc/nova/nova.conf & R$ ?2 h; v3 c6 j! ^9 F6 k
sed -i "4c my_ip = 10.0.0.31" /etc/nova/nova.conf
6 ]2 S; H+ t. ?1 Rsed -i "872c auth_strategy = keystone" /etc/nova/nova.conf
6 h! I9 w4 ]8 }& V4 ^* \sed -i "2561c www_authenticate_uri = http://controller:5000/
" /etc/nova/nova.conf
* T* V/ h) N) h" f0 w& Used -i "2562c auth_url = http://controller:5000/
" /etc/nova/nova.conf " I, g5 J K4 A) _* E8 J% @
sed -i "2563c memcached_servers = controller:11211" /etc/nova/nova.conf
7 S. p" X: i, Q4 `; |$ e3 r, ^
sed -i "2564c auth_type = password" /etc/nova/nova.conf
' U5 q2 Z9 k: i( s1 Csed -i "2565c project_domain_name = Default" /etc/nova/nova.conf
+ l8 m/ e7 k$ D$ wsed -i "2566c user_domain_name = Default" /etc/nova/nova.conf
; t$ v; a% B) }* y5 p
sed -i "2567c project_name = service" /etc/nova/nova.conf
: i+ P/ U6 G+ ~) _) u9 O w. ~, ysed -i "2568c username = nova" /etc/nova/nova.conf
5 t3 |0 s7 [. { O/ _; @; Msed -i "2569c password = 123456" /etc/nova/nova.conf
: a" c2 D% R9 u8 n: v3 f
sed -i "5171c enabled = true" /etc/nova/nova.conf
+ K, _0 ]: m1 o5 X3 n( t7 c
sed -i "5172c server_listen = 0.0.0.0" /etc/nova/nova.conf
; C+ u. J1 Z, ^7 m$ w$ t* `3 B
sed -i '5173c server_proxyclient_address = $my_ip' /etc/nova/nova.conf
# p! \6 N+ p1 j* esed -i "5174c novncproxy_base_url = http://controller:6080/vnc_auto.html
" /etc/nova/nova.conf
* k/ a8 \/ o1 {7 y9 csed -i "1937c api_servers = http://controller:9292
" /etc/nova/nova.conf
4 A* V6 @) F2 T+ t+ l& O' Dsed -i "3571c lock_path = /var/lib/nova/tmp" /etc/nova/nova.conf
8 u, c/ z& r. u' V
sed -i "4093c region_name = RegionOne" /etc/nova/nova.conf
0 V" w7 w( Z: M' g C# p, E, q$ W
sed -i "4094c project_domain_name = Default" /etc/nova/nova.conf
( R# U4 n2 m3 P3 h# e$ ~sed -i "4095c project_name = service" /etc/nova/nova.conf
, j1 Z; }2 G8 g! _+ wsed -i "4096c auth_type = password" /etc/nova/nova.conf
5 K4 b! D" W1 H9 Lsed -i "4097c user_domain_name = Default" /etc/nova/nova.conf
, M( V2 q( a; r9 T$ S [sed -i "4098c auth_url = http://controller:5000/v3
" /etc/nova/nova.conf + b# Y3 p8 d- M5 h
sed -i "4099c username = placement" /etc/nova/nova.conf
& ]3 F, Y# u% X/ c% Tsed -i "4100c password = 123456" /etc/nova/nova.conf
! U! g* { G% y8 _8 O' l( D( b! i; p/ P" }# P
#执行命令,查看是否支持CPU虚拟化,如果大于0则支持。
' w7 T0 C4 h |
egrep -c '(vmx|svm)' /proc/cpuinfo
0 r4 z" n% D7 h& {9 L#如果不支持的话还需要执行下面的命令
* c x( y6 F' g) x3 @9 b7 Q
sed -i "2722c virt_type = qemu" /etc/nova/nova.conf
$ ?$ A# C. r3 q' M4 U
8 f3 R* e; h Asystemctl enable libvirtd.service openstack-nova-compute.service && systemctl start libvirtd.service openstack-nova-compute.service
, U, [' B' A! G2 j# K' R* N! ~, \' b, m
#控制节点 计算节点从注册到发现会有延迟,根据discover_hosts_in_cells_interval 配置轮询发现时间,可以执行下面命令手动发现计算节点
8 U+ d2 t/ I$ isu -s /bin/sh -c "nova-manage cell_v2 discover_hosts --verbose" nova
/ u/ o+ d; ^, ]" }6 T4 u* w2 V6 E& J
#控制节点 安装Networking service
' _' w' m8 U* J
mysql -uroot -p123456 -e "CREATE DATABASE neutron"
/ j% q6 G* Z# e) a+ b2 S7 |5 t+ Q$ Z5 Qmysql -uroot -p123456 -e "GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'localhost' IDENTIFIED BY '123456'"
1 A! D0 W$ Y! K8 x1 o6 J# Hmysql -uroot -p123456 -e "GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'%' IDENTIFIED BY '123456'"
; ~5 P8 ?# S& {% u& x7 h" d7 F
openstack user create --domain default --password 123456 neutron
6 \0 q" Q- `( e& k/ k
openstack role add --project service --user neutron admin
! i! w% k7 `: v' D& N. vopenstack service create --name neutron --description "OpenStack Networking" network
: d }6 K0 P l" _; {* s( qopenstack endpoint create --region RegionOne network public http://controller:9696
& v3 k$ {7 Y: J9 f
openstack endpoint create --region RegionOne network internal http://controller:9696
; Z! W1 S# h! m: A) k& M" S. p
openstack endpoint create --region RegionOne network admin http://controller:9696
; B5 ?" F- \( l% U* {% c7 F# iyum install -y openstack-neutron openstack-neutron-ml2 openstack-neutron-linuxbridge ebtables
" t- _: e7 j7 g3 }#配置服务器组件
t2 E- Z1 m) E2 i
sed -i "2c core_plugin = ml2" /etc/neutron/neutron.conf
3 W: D' t' c5 Hsed -i "3c service_plugins = router" /etc/neutron/neutron.conf
( u6 w, H4 g( F3 zsed -i "4c allow_overlapping_ips = true" /etc/neutron/neutron.conf
% ]3 P' @. ^4 M. ~# G, I
sed -i "5c transport_url = rabbit://openstack:123456@controller
" /etc/neutron/neutron.conf 0 L8 d7 f# J, y3 {* c5 L7 ~* M" e
sed -i "6c auth_strategy = keystone" /etc/neutron/neutron.conf
% q8 u @8 V. L4 k
sed -i "7c notify_nova_on_port_status_changes = true" /etc/neutron/neutron.conf
x }) m2 C7 u+ Xsed -i "8c notify_nova_on_port_data_changes = true" /etc/neutron/neutron.conf
" y. k8 V0 Z& C/ f2 t% _sed -i "254c connection = mysql+pymysql://neutron:123456@controller/neutron
" /etc/neutron/neutron.conf
+ P( z: b' y5 W r/ n, `! [+ }1 \sed -i "359c www_authenticate_uri = http://controller:5000
" /etc/neutron/neutron.conf
- ?: k- s6 C Q! L+ h; Nsed -i "360c auth_url = http://controller:5000
" /etc/neutron/neutron.conf O- t3 j+ g2 b4 i Q3 z H
sed -i "361c memcached_servers = controller:11211" /etc/neutron/neutron.conf
7 D' i3 W/ a: G8 ]sed -i "362c auth_type = password" /etc/neutron/neutron.conf
9 q7 _& b4 x2 u8 J9 Osed -i "363c project_domain_name = default" /etc/neutron/neutron.conf
* U% m9 H. o& t7 O6 S1 h w2 ]
sed -i "364c user_domain_name = default" /etc/neutron/neutron.conf
9 l" s8 e& x3 b; Qsed -i "365c project_name = service" /etc/neutron/neutron.conf
, ?5 ~+ {4 x" Q0 c
sed -i "366c username = neutron" /etc/neutron/neutron.conf
- s% E8 b8 y$ X2 nsed -i "367c password = 123456" /etc/neutron/neutron.conf
* |4 r3 Q; |/ S1 Ased -i "521c lock_path = /var/lib/neutron/tmp" /etc/neutron/neutron.conf
, ~$ p3 q5 x; l- C9 }
echo "[nova]" >> /etc/neutron/neutron.conf
7 J1 z9 J% C' k, _5 `echo "auth_url = http://controller:5000
" >> /etc/neutron/neutron.conf
H: @3 N8 z7 p1 o' Becho "auth_type = password" >> /etc/neutron/neutron.conf
% y" n) j+ `: @
echo "project_domain_name = default" >> /etc/neutron/neutron.conf
; Y: k+ q$ y( C* q9 {9 Wecho "user_domain_name = default" >> /etc/neutron/neutron.conf
/ {9 q. D+ [$ a$ p7 o, [echo "region_name = RegionOne" >> /etc/neutron/neutron.conf
' C( f8 y5 M% ]2 E) i- N# `8 B. ~, ^echo "project_name = service" >> /etc/neutron/neutron.conf
$ l" a k9 [- m" w- z6 gecho "username = nova" >> /etc/neutron/neutron.conf
8 [# J9 c2 C Z9 y7 O9 Necho "password = 123456" >> /etc/neutron/neutron.conf
1 e9 Y( U# P, Y; P# G' c* {/ h! t
#配置Modular Layer 2 (ML2) plug-in
* t. T, g1 B5 C/ k [2 aecho "[ml2]" >> /etc/neutron/plugins/ml2/ml2_conf.ini
% y$ N) S+ r: k2 Xecho "type_drivers = flat,vlan,vxlan" >> /etc/neutron/plugins/ml2/ml2_conf.ini
5 s& N; g6 S2 y/ u, w5 ~9 ?7 `
echo "tenant_network_types = vxlan" >> /etc/neutron/plugins/ml2/ml2_conf.ini
1 I: v ^4 x- P3 T7 H$ o$ o: {echo "mechanism_drivers = linuxbridge,l2population" >> /etc/neutron/plugins/ml2/ml2_conf.ini
2 C! U% [, v1 V" J( Xecho "extension_drivers = port_security" >> /etc/neutron/plugins/ml2/ml2_conf.ini
% z$ m) ?1 V, A$ e0 l8 Yecho "[ml2_type_flat]" >> /etc/neutron/plugins/ml2/ml2_conf.ini
u# s" y! K8 t, K
echo "flat_networks = provider" >> /etc/neutron/plugins/ml2/ml2_conf.ini
) S1 r2 z7 @; i* W
echo "vni_ranges = 1:1000" >> /etc/neutron/plugins/ml2/ml2_conf.ini
9 X/ [/ L6 _! {7 z8 @5 w7 X
echo "[securitygroup]" >> /etc/neutron/plugins/ml2/ml2_conf.ini
J+ l# p# ^* _
echo "enable_ipset = true" >> /etc/neutron/plugins/ml2/ml2_conf.ini
+ Y" C, u0 A: w1 C#配置Linux bridge agent
( I! G& ~* {7 ?: y+ Y; H) R# Eecho "[linux_bridge]" >> /etc/neutron/plugins/ml2/linuxbridge_agent.ini
+ F d, K ]0 d1 ^5 n! ~1 i
#eth1为另外第二张网卡
_5 ?4 y+ x+ H# N: p T) iecho "physical_interface_mappings = provider:eth1" >> /etc/neutron/plugins/ml2/linuxbridge_agent.ini
3 T) o' e7 z9 {. T* e& Mecho "[vxlan]" >> /etc/neutron/plugins/ml2/linuxbridge_agent.ini
3 A: X5 r/ w. s9 Y: C) kecho "enable_vxlan = true" >> /etc/neutron/plugins/ml2/linuxbridge_agent.ini
! U' k6 C. M5 o* O0 ?#10.0.0.12为第二张网卡的IP
3 y. } a" Y1 pecho "local_ip = 10.0.0.12" >> /etc/neutron/plugins/ml2/linuxbridge_agent.ini
7 l6 }- Z( I2 q. F2 `8 `
echo "l2_population = true" >> /etc/neutron/plugins/ml2/linuxbridge_agent.ini
! L/ c+ k5 N% U- p; p) r6 Aecho "[securitygroup]" >> /etc/neutron/plugins/ml2/linuxbridge_agent.ini
% s" s$ @' @$ J5 a; D! Secho "enable_security_group = true" >> /etc/neutron/plugins/ml2/linuxbridge_agent.ini
. U. p6 D+ U$ S8 uecho "firewall_driver = neutron.agent.linux.iptables_firewall.IptablesFirewallDriver" >> /etc/neutron/plugins/ml2/linuxbridge_agent.ini
$ }* n" |- Y- f! m7 V% u
#配置layer-3 agent
5 T! T2 S8 o% g/ w( W4 V9 P$ qsed -i "2c interface_driver = linuxbridge" /etc/neutron/l3_agent.ini
( i$ N0 ?# i8 |. S) t- S7 D#配置DHCP agent
. X1 ~; A& [+ Y/ ? Y" N% X1 B" p' L
sed -i "2c interface_driver = linuxbridge" /etc/neutron/dhcp_agent.ini
, M$ h" s& w4 |0 j4 bsed -i "3c dhcp_driver = neutron.agent.linux.dhcp.Dnsmasq" /etc/neutron/dhcp_agent.ini
; X# Q# y* D0 Used -i "4c enable_isolated_metadata = true" /etc/neutron/dhcp_agent.ini
$ ]0 o' \% k2 q4 b- z% s p#配置metadata agent
8 w7 n* Z1 B# ^) E3 ]# y
sed -i "2c nova_metadata_host = controller" /etc/neutron/metadata_agent.ini
8 x! y' `; f: S I$ |' z6 v& Rsed -i "3c metadata_proxy_shared_secret = 123456" /etc/neutron/metadata_agent.ini
( k: U9 G+ o3 J% \/ L9 W/ M#配置计算服务使用网络服务
+ P ?2 k3 j% w) {sed -i " 3334c auth_url = http://controller:5000
" /etc/nova/nova.conf
/ H3 U+ n) T+ O" j/ K* z, ised -i " 3335c auth_type = password" /etc/nova/nova.conf
4 }7 k9 ^$ q. b' R! psed -i " 3336c project_domain_name = default" /etc/nova/nova.conf
" n9 w$ m1 m7 Q. L6 b. msed -i " 3337c user_domain_name = default" /etc/nova/nova.conf
+ ^: J" p9 E+ N
sed -i " 3338c region_name = RegionOne" /etc/nova/nova.conf
6 ?/ ^ X$ O0 }" K. z! c6 Jsed -i " 3339c project_name = service" /etc/nova/nova.conf
W4 v$ a3 _( a( p3 Msed -i " 3340c username = neutron" /etc/nova/nova.conf
" o! S0 E; r# e' P) X" i9 a) T
sed -i " 3341c password = 123456" /etc/nova/nova.conf
! o' r5 s4 E# s: M# {+ j) w0 I/ Nsed -i " 3342c service_metadata_proxy = true" /etc/nova/nova.conf
) d* Y% {5 b& V3 e8 _" U, B
sed -i " 3343c metadata_proxy_shared_secret = 123456" /etc/nova/nova.conf
% w$ {7 Y. v# z. S4 X1 ]1 _ln -s /etc/neutron/plugins/ml2/ml2_conf.ini /etc/neutron/plugin.ini
7 P7 ^6 e- {$ B+ J7 F5 Tsu -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
& k/ x/ O$ p K+ ^* c7 W9 Bsystemctl restart openstack-nova-api.service
; E m' S/ }$ e' G4 y5 e2 asystemctl 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
4 w; m- Z& Z; V+ E g: _5 N
systemctl enable neutron-l3-agent.service && systemctl start neutron-l3-agent.service
. y1 O. r/ V3 D1 r7 l0 E6 Q' ^9 P
7 Q' p; d0 j" O1 H% S#计算节点 安装Networking service
0 M) F) {. a9 Z, U4 Tyum install -y openstack-neutron-linuxbridge ebtables ipset
5 \: q5 ?4 f0 s* f& y2 z& L
sed -i "2c transport_url = rabbit://openstack:123456@controller
" /etc/neutron/neutron.conf , K: e( ~/ _+ P) |2 ?5 n- \) f
sed -i "3c auth_strategy = keystone" /etc/neutron/neutron.conf
- A, `6 F% i6 Y3 Osed -i "359c www_authenticate_uri = http://controller:5000
" /etc/neutron/neutron.conf
8 I! l9 M- ]) ?/ fsed -i "360c auth_url = http://controller:5000
" /etc/neutron/neutron.conf 1 l) G! ^3 R s& c& u2 p) a
sed -i "361c memcached_servers = controller:11211" /etc/neutron/neutron.conf
7 D5 x# O0 S2 m. R8 `8 X
sed -i "362c auth_type = password" /etc/neutron/neutron.conf
: ^- Y7 L% @7 W% R2 ?
sed -i "363c project_domain_name = default" /etc/neutron/neutron.conf
! _3 e* n/ p- d ]0 ased -i "364c user_domain_name = default" /etc/neutron/neutron.conf
e% j% c7 z2 Y+ } H4 y
sed -i "365c project_name = service" /etc/neutron/neutron.conf
% U7 w6 @( t9 ?/ B
sed -i "366c username = neutron" /etc/neutron/neutron.conf
1 O, `; W' U+ b3 s& }- ]
sed -i "367c password = 123456" /etc/neutron/neutron.conf
# C7 u. q* s& p" A! {# J) x; Qsed -i "521c lock_path = /var/lib/neutron/tmp" /etc/neutron/neutron.conf
% f& D! Q' H0 f' X0 t9 @
echo "[linux_bridge]" >> /etc/neutron/plugins/ml2/linuxbridge_agent.ini
2 y4 a" _7 o" e1 J( y
#eth1为另外第二张网卡
x! `; R" k. Secho "physical_interface_mappings = provider:eth1" >> /etc/neutron/plugins/ml2/linuxbridge_agent.ini
1 {, a9 c+ {9 x9 K- S: Y: o2 hecho "[vxlan]" >> /etc/neutron/plugins/ml2/linuxbridge_agent.ini
( H9 N- H U" v" \9 u& i$ M
echo "enable_vxlan = true" >> /etc/neutron/plugins/ml2/linuxbridge_agent.ini
* z( |1 y% ` P5 h3 W# o8 {
#10.0.0.32为第二张网卡的IP
2 l$ }2 k9 n8 M6 F0 qecho "local_ip = 10.0.0.32" >> /etc/neutron/plugins/ml2/linuxbridge_agent.ini
% q) X3 E+ l3 b/ g
echo "l2_population = true" >> /etc/neutron/plugins/ml2/linuxbridge_agent.ini
1 h. j. Y2 v: q8 i& E
echo "[securitygroup]" >> /etc/neutron/plugins/ml2/linuxbridge_agent.ini
( x9 y; ^, Z+ x0 }# ]echo "enable_security_group = true" >> /etc/neutron/plugins/ml2/linuxbridge_agent.ini
2 z& J7 R( P6 W* H. R
echo "firewall_driver = neutron.agent.linux.iptables_firewall.IptablesFirewallDriver" >> /etc/neutron/plugins/ml2/linuxbridge_agent.ini
, b6 F5 m0 Q: s, C( F9 h. x
#配置计算服务使用网络服务
# Y( z; q# f7 f7 ~ L& S7 H5 @
sed -i " 3334c auth_url = http://controller:5000
" /etc/nova/nova.conf % S9 R3 `6 E: Q) v$ ^
sed -i " 3335c auth_type = password" /etc/nova/nova.conf
! r9 G& `+ ?# h; K
sed -i " 3336c project_domain_name = default" /etc/nova/nova.conf
9 g2 b/ n# P7 X+ F, h( m
sed -i " 3337c user_domain_name = default" /etc/nova/nova.conf
7 d; R; w: ?7 ^
sed -i " 3338c region_name = RegionOne" /etc/nova/nova.conf
5 B5 r: Y2 ~; d. [ O; l1 ased -i " 3339c project_name = service" /etc/nova/nova.conf
8 U7 Z4 n3 c" Z% ^+ jsed -i " 3340c username = neutron" /etc/nova/nova.conf
7 c& |3 k& E% ksed -i " 3341c password = 123456" /etc/nova/nova.conf
) w% U# c# T! N( u* x
systemctl restart openstack-nova-compute.service
6 R/ a4 `* K. p2 e+ k) e
systemctl enable neutron-linuxbridge-agent.service && systemctl start neutron-linuxbridge-agent.service
9 _# O5 l B9 i
% ~( w: K* u) t I#控制节点 安装Dashboard
1 T' c* {+ {6 c2 _% @- tyum install -y openstack-dashboard
, P) a, n6 H. N2 K7 M& m8 x
sed -i '118c OPENSTACK_HOST = "controller"' /etc/openstack-dashboard/local_settings
2 G$ i4 D) P" [ D
sed -i "39c ALLOWED_HOSTS = ['*']" /etc/openstack-dashboard/local_settings
1 h; F0 N2 k! Gsed -i "104c SESSION_ENGINE = 'django.contrib.sessions.backends.cache'" /etc/openstack-dashboard/local_settings
- ^7 u) J/ G5 y
sed -i "94c CACHES = {" /etc/openstack-dashboard/local_settings
; G. _1 s" U$ ?
sed -i "95c 'default': {" /etc/openstack-dashboard/local_settings
6 Z* N# k8 D/ U3 ssed -i "96c 'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache'," /etc/openstack-dashboard/local_settings
H- Y1 d& }5 A
sed -i "97c 'LOCATION': 'controller:11211'," /etc/openstack-dashboard/local_settings
: C% ?+ E7 K$ G
sed -i "98c }" /etc/openstack-dashboard/local_settings
9 a& K1 e. b4 p* _# }- s0 T' ~
sed -i "99c }" /etc/openstack-dashboard/local_settings
; d: c" {; F9 ^. d" A2 Xsed -i '119c OPENSTACK_KEYSTONE_URL = "http://%s:5000/v3
" % OPENSTACK_HOST' /etc/openstack-dashboard/local_settings 5 d9 ?# Q8 o% D7 G
echo 'OPENSTACK_KEYSTONE_MULTIDOMAIN_SUPPORT = True' >> /etc/openstack-dashboard/local_settings
/ i7 p3 B: G1 M' o5 \. A0 t- Decho 'OPENSTACK_API_VERSIONS = {' >> /etc/openstack-dashboard/local_settings
- s, \8 l/ K& \9 z9 I" T- J
echo ' "identity": 3,' >> /etc/openstack-dashboard/local_settings
, P9 c. \% f7 X+ y2 ?echo ' "image": 2,' >> /etc/openstack-dashboard/local_settings
L2 N, {1 E& D+ Recho ' "volume": 3' >> /etc/openstack-dashboard/local_settings
* Z: w' g3 c7 Z1 T! `' U' Q0 ~echo '}' >> /etc/openstack-dashboard/local_settings
- G1 `' V; [6 z: B
echo 'OPENSTACK_KEYSTONE_DEFAULT_DOMAIN = "Default"' >> /etc/openstack-dashboard/local_settings
$ d0 I5 ~" s9 G! { `- Q
echo 'OPENSTACK_KEYSTONE_DEFAULT_ROLE = "user"' >> /etc/openstack-dashboard/local_settings
, U4 }' v) \8 f$ x6 t
sed -i '123c TIME_ZONE = "Asia/Shanghai"' /etc/openstack-dashboard/local_settings
$ V( Q2 V- ^, w% n1 lecho "WEBROOT = '/dashboard/'" >> /etc/openstack-dashboard/local_settings
! B8 f* z. P8 \- D
echo 'WSGIApplicationGroup %{GLOBAL}' >> /etc/httpd/conf.d/openstack-dashboard.conf
# L7 \& r& s9 k9 ^$ G8 s& L! dsystemctl restart httpd.service memcached.service
6 ?% i6 Q: k" h. R) i
0 E. E# Y. G% d( S- B; c9 _#安装完成,可访问http://10.0.0.11/dashboard/
查看
2 f. O6 p; ]0 \# a8 H7 C, a