#!/bin/bash
* K- q) D' S+ i# W
1 ]' L0 e9 P+ Y
#Centos8最小化部署安装OpenStack Ussuri
: q- L8 B+ K: M5 a5 R" O/ `$ K2 z! `#共两台主机,分别是一台控制节点,一台计算节点
- s) ~3 O8 a8 H" T, g#1、控制节点内存4096M。双网卡,分别为eth0:10.0.0.11,eth1:10.0.0.12
) P6 a9 o7 g! @#2、计算节点内存4096M。双网卡,分别为eth0:10.0.0.31,eth1:10.0.0.32
2 ~$ ?$ b& }. c% L$ Z
: n8 v" v0 e- f3 z#设置阿里云yum源
k& _- E+ C1 S
5 q$ M8 i/ |. s0 \9 V3 _4 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
# Z2 V/ W3 j6 B! J
- p) D) P) R3 r: l$ b; I# G
#关闭防火墙
# ^3 M8 ^1 @9 _% K
systemctl stop firewalld && systemctl disable firewalld
& k' j/ s7 V. ^7 z& c
4 u8 P" b/ y0 g% @0 L9 ~; `- V#关闭SELinux
2 |% A0 n5 p U( ?0 ]
setenforce 0
* S9 t' V$ B$ P3 N
sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config
% T$ @0 V2 i* u/ e+ r6 ~
$ B a. e6 j$ T
#关闭swap分区
2 c7 w l( s6 G/ mswapoff -a
0 G5 v* V6 ?8 r. _sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
5 a! s9 U: Y' P0 H5 W7 ]
0 H! o: v6 C: F* N#设置内核
- H }2 y. u8 l* K* ~
modprobe bridge
7 E/ _$ A# {: e; \/ e. Qmodprobe br_netfilter
: n0 v8 C- ~: x1 c8 g$ C
cat > /etc/sysconfig/modules/neutron.modules <<EOF
p3 B t; w3 [, i4 t) R/ c) U, e, h
#!/bin/bash
) p+ b/ H9 l; C" @. }7 K2 vmodprobe -- bridge
9 _4 @7 z! c; s5 Fmodprobe -- br_netfilter
5 \: E5 E' ~4 J
EOF
$ z5 j6 ]) j ?6 T6 \! t, ]5 Qchmod 755 /etc/sysconfig/modules/neutron.modules && bash /etc/sysconfig/modules/neutron.modules
* {: h8 ^" W7 K/ q4 r& ~0 r; `
echo "vm.max_map_count=262144" >> /etc/sysctl.conf
z6 q0 }* M- j# secho "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
' j7 G/ X9 E$ ^7 }+ zecho "net.bridge.bridge-nf-call-iptables=1" >> /etc/sysctl.conf
! @7 O) o/ W3 m! X7 H" ~- ]
echo "net.bridge.bridge-nf-call-ip6tables=1" >> /etc/sysctl.conf
. T6 T: ?, C c* Ysysctl -p
: w( C; q+ C; ~( j E' p" k+ |
) y1 J; P) ^# ^; v, b; J; a#设置时间同步
, W! c. l" A% ]1 p4 _yum install -y chrony && yum -y autoremove
' i8 f; Z4 M7 r, ?sed -i '/^pool/d' /etc/chrony.conf
& D, E& T3 p$ a3 q6 n
sed -i '/^server/d' /etc/chrony.conf
4 P T& h9 {. l7 Q ]. }. f
echo "pool ntp.aliyun.com iburst" >> /etc/chrony.conf
3 z3 U1 V; W [' e9 ]2 hsystemctl start chronyd.service && systemctl enable chronyd.service
2 [. f& A; ~! B8 n3 C+ s# K$ P
; q+ T1 R7 A' V% W2 @" E3 A! ?# \
#控制节点 设置hostname
# |+ H" C6 L% s/ O. w) v
hostnamectl set-hostname controller
# X8 b+ L3 X/ O% n, [
+ t1 J+ V0 q$ y# l2 p5 g3 o#计算节点 设置hostname
. I* _* x# v5 J9 Thostnamectl set-hostname compute1
* d. _+ N& @/ S+ B" H# X
: J2 t" x% R1 W5 q, G) E; T! d#添加host
3 Y% h; q' L' a
echo "10.0.0.11 controller" >> /etc/hosts
3 x0 |4 c. r K5 L
echo "10.0.0.31 compute1" >> /etc/hosts
6 `; G. c, ~( L( r, I
: p) K' l% Q3 Z5 @/ I$ i; ?#安装基础组件
8 @$ P! v) I- F( o: c. E! P/ W
yum install -y centos-release-openstack-ussuri
A j' ^: p9 _! O/ r6 \) W$ C
yum config-manager --set-enabled PowerTools
- N! X$ R* y! A3 c7 J/ t& [; F
yum upgrade -y
9 s$ G- ]$ [, p3 X( N& w. g
yum install -y python3-openstackclient
: `' g4 m+ J& K" w: V' O4 x6 \! S$ G7 p
#控制节点 安装Mariadb
* K ~0 i& A$ w+ x6 \3 I9 V5 Y* @
yum install -y mariadb mariadb-server python2-PyMySQL
. l$ c5 N) Y% ?
tee /etc/my.cnf.d/openstack.cnf <<-'EOF'
8 X# `& H/ [8 C+ s( D[mysqld]
! D' `4 [$ P* m1 Wbind-address = 10.0.0.11
* q# q7 a- ?$ d8 d' k l
default-storage-engine = innodb
/ B, D2 v/ A5 h5 t, l# X
innodb_file_per_table = on
0 g9 P# C+ R/ Z$ Y
max_connections = 4096
; R9 C' l& u: K q( R- o4 ]
collation-server = utf8_general_ci
. L- Z% \/ b) g% d0 E
character-set-server = utf8
- d/ W$ e% n% k
EOF
/ z; O+ x M7 H% B! ?( Psystemctl enable mariadb.service && systemctl start mariadb.service
! H G. J2 ]+ L3 a1 X3 X1 s/ {+ Y0 H
echo -e "\nY\n123456\n123456\nY\nn\nY\nY\n" | mysql_secure_installation
; j- k* S& y* f- O, b* x5 M2 c, J1 V$ T5 m% y' K K
#控制节点 安装RabbitMQ
4 [1 Z; F' o4 t. S7 |- Y! J: Nyum install -y rabbitmq-server
0 S( p d/ G/ H v
systemctl enable rabbitmq-server.service && systemctl start rabbitmq-server.service
' H* a0 u# J: xrabbitmqctl add_user openstack 123456
# I5 D y2 f* h) j
rabbitmqctl set_permissions openstack ".*" ".*" ".*"
2 ~4 U/ Z% t2 y3 F# i2 m: \+ I: V4 x
9 V3 [ @" F: E! H, j- m! m
#控制节点 安装Memcached
' H6 p2 S t& r. T
yum install -y memcached python3-memcached
4 E* F/ Y8 u. T! M/ p
sed -i "s/-l 127.0.0.1,::1/-l 127.0.0.1,::1,controller/g" /etc/sysconfig/memcached
! r! q0 O7 l. G$ | @ v& T7 m% Tsystemctl enable memcached.service && systemctl start memcached.service
, Z' o; s3 n* z# B+ g9 t2 B
. R8 _8 k7 V" E# m: ?
#控制节点 安装Etcd
6 v4 n, M) q3 O* Y
yum install -y etcd
; r) j5 F3 c5 s4 W, G0 g3 Yrm -f /etc/etcd/etcd.conf
7 v0 r, t" I* E H4 L7 b9 ]
tee /etc/etcd/etcd.conf <<-'EOF'
5 [; T* t7 B' z' X6 E#[Member]
' G; z* b& Q: }- ?ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
1 ~0 W: K |) c q7 X* A, a
ETCD_LISTEN_PEER_URLS="http://10.0.0.11:2380
"
, l& J2 H: Z" IETCD_LISTEN_CLIENT_URLS="http://10.0.0.11:2379
"
. M. b' h* k& K% @8 KETCD_NAME="controller"
6 @- V# w9 a. a+ b* d9 G1 E, r
#[Clustering]
$ U! }" D2 U5 i$ t8 F; ^8 R1 x2 bETCD_INITIAL_ADVERTISE_PEER_URLS="http://10.0.0.11:2380
"
5 E3 P: H. u& R# BETCD_ADVERTISE_CLIENT_URLS="http://10.0.0.11:2379
" & R% a) m# y$ T: @. R
ETCD_INITIAL_CLUSTER="controller=http://10.0.0.11:2380
" + i% O% G1 V$ n7 Z/ [4 }
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster-01"
' j+ h- y/ Z& g$ F8 i! \2 ~1 O
ETCD_INITIAL_CLUSTER_STATE="new"
! P5 k+ i* V* E& ^- q2 KEOF
z: @( ~, M. q
systemctl enable etcd && systemctl start etcd
n/ w3 A$ S9 l" O0 J, B
9 e- `* k7 x9 { ~: l#控制节点 安装Identity service
+ C6 g4 O T6 F7 }
mysql -uroot -p123456 -e "CREATE DATABASE keystone"
. r9 Q5 Z/ h4 }
mysql -uroot -p123456 -e "GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'localhost' IDENTIFIED BY '123456'"
# u% Y1 a% `9 L) ^# b' E9 Z0 {) a. [mysql -uroot -p123456 -e "GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'%' IDENTIFIED BY '123456'"
7 Z5 g' _# ]: @
yum install -y openstack-keystone httpd python3-mod_wsgi
* F0 {6 ]5 j3 s f3 j
sed -i "556c connection = mysql+pymysql://keystone:123456@controller/keystone
" /etc/keystone/keystone.conf
" D G! c1 J4 m$ ]! R9 }sed -i "2418c provider = fernet" /etc/keystone/keystone.conf
/ M5 u3 k; I2 X' r) h# R& V
su -s /bin/sh -c "keystone-manage db_sync" keystone
+ a, ^6 u8 e7 k9 p
keystone-manage fernet_setup --keystone-user keystone --keystone-group keystone
# E9 g% w, y0 j- W, s6 w" J8 s
keystone-manage credential_setup --keystone-user keystone --keystone-group keystone
# i5 B# e% N2 [, A% Y
keystone-manage bootstrap --bootstrap-password 123456 \
1 p5 B) C' T8 s2 s3 B; } --bootstrap-admin-url http://controller:5000/v3/ \
* ]3 N% b1 X* W' p+ B* H7 ?3 e
--bootstrap-internal-url http://controller:5000/v3/ \
% b0 {2 M% Q0 b
--bootstrap-public-url http://controller:5000/v3/ \
2 r; S8 B5 [! g! l7 c
--bootstrap-region-id RegionOne
# A7 p( k" E4 F2 j, |( |
echo "ServerName controller" >> /etc/httpd/conf/httpd.conf
4 ^4 @1 U, \$ ?( F Uln -s /usr/share/keystone/wsgi-keystone.conf /etc/httpd/conf.d/
& P7 W, q. y! l Jsystemctl enable httpd.service && systemctl start httpd.service
' r9 ?) t/ w- x
echo "export OS_USERNAME=admin" >> /etc/profile
( w& O5 k- Y) |
echo "export OS_PASSWORD=123456" >> /etc/profile
% B' `9 U# y C
echo "export OS_PROJECT_NAME=admin" >> /etc/profile
s1 n/ Y" q. G" ?
echo "export OS_USER_DOMAIN_NAME=Default" >> /etc/profile
: E% W/ I# U L! ^, Secho "export OS_PROJECT_DOMAIN_NAME=Default" >> /etc/profile
- M5 K' H1 I- j: t0 [2 e
echo "export OS_AUTH_URL=http://controller:5000/v3
" >> /etc/profile 1 q7 }* T7 h% m0 o
echo "export OS_IDENTITY_API_VERSION=3" >> /etc/profile
# q h1 U; L, b L0 D. u+ M# \source /etc/profile
) {2 D; z+ t6 ~$ p4 Qopenstack project create --domain default --description "Service Project" service
. y4 s5 N" j" d7 _6 \! a; d" ^- w1 P4 f) |4 [' {; y
#控制节点 安装Image service
( O& Y- H7 j5 b. r a$ x
mysql -uroot -p123456 -e "CREATE DATABASE glance"
3 u: z5 a2 ~. G$ p* i) i- v" F! b
mysql -uroot -p123456 -e "GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'localhost' IDENTIFIED BY '123456'"
! S: W( T/ Y, D9 J! P" Umysql -uroot -p123456 -e "GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'%' IDENTIFIED BY '123456'"
7 f; y/ \- `2 D) T4 }, Yopenstack user create --domain default --password 123456 glance
, v7 N4 p# R8 p+ |9 g" u
openstack role add --project service --user glance admin
! d; s5 F( j8 [& n4 y7 @, jopenstack service create --name glance --description "OpenStack Image" image
9 ]9 H9 [+ `0 ~# Q4 }9 T. z9 aopenstack endpoint create --region RegionOne image public http://controller:9292
; K0 C$ W- X4 Iopenstack endpoint create --region RegionOne image internal http://controller:9292
; b! |/ I! m3 M5 z$ X
openstack endpoint create --region RegionOne image admin http://controller:9292
( L7 L& p+ L$ X( Syum install -y openstack-glance
9 l# o" T( C8 ~) Q& n
sed -i "2062c connection = mysql+pymysql://glance:123456@controller/glance
" /etc/glance/glance-api.conf / M, f: S5 P+ V' e5 s
sed -i "5034c www_authenticate_uri = http://controller:5000
" /etc/glance/glance-api.conf : n2 a( g! w/ h9 |2 Q2 F! X! Y$ ~# w
sed -i "5035c auth_url = http://controller:5000
" /etc/glance/glance-api.conf
1 I# y) y; ^ ~( n0 g; o0 Z* Osed -i "5036c memcached_servers = controller:11211" /etc/glance/glance-api.conf
7 d! v/ K# Z) L( e0 n6 }7 [0 ysed -i "5037c auth_type = password" /etc/glance/glance-api.conf
; ~! h% l% i6 c% w8 ~* E; v& C" ksed -i "5038c project_domain_name = Default" /etc/glance/glance-api.conf
: k, J- ?/ F4 @3 _9 r+ M3 @sed -i "5039c user_domain_name = Default" /etc/glance/glance-api.conf
4 C- z8 l) w& u: }& g% tsed -i "5040c project_name = service" /etc/glance/glance-api.conf
' s7 u1 k2 n/ f
sed -i "5041c username = glance" /etc/glance/glance-api.conf
6 `" I! {* S* l+ U- a1 ]
sed -i "5042c password = 123456" /etc/glance/glance-api.conf
/ q$ L( D# o* U0 c
sed -i "5678c flavor = keystone" /etc/glance/glance-api.conf
# [+ b1 I. e! C; u0 X1 y8 Z' n
sed -i "3413c stores = file,http" /etc/glance/glance-api.conf
( K$ S6 K' @6 p4 w* o. M4 Y& Ised -i "3414c default_store = file" /etc/glance/glance-api.conf
% @* t7 M$ P* p' o' N# Y
sed -i "3415c filesystem_store_datadir = /var/lib/glance/images/" /etc/glance/glance-api.conf
% R5 V, L* O( I7 h9 z% `" p( A
su -s /bin/sh -c "glance-manage db_sync" glance
- G' a/ {- Y1 Q8 b* j* S( X- Jsystemctl enable openstack-glance-api.service && systemctl start openstack-glance-api.service
" o$ T7 Y M8 J/ i% Z: @3 z
8 R+ U: v7 c* ~, r$ M#控制节点 安装Placement service
$ n0 o! t) _# X- R8 y/ I0 D
mysql -uroot -p123456 -e "CREATE DATABASE placement"
6 q \% U' _6 D# [# N5 _& Wmysql -uroot -p123456 -e "GRANT ALL PRIVILEGES ON placement.* TO 'placement'@'localhost' IDENTIFIED BY '123456'"
+ g$ U: ]4 x) W) }# D5 f0 `mysql -uroot -p123456 -e "GRANT ALL PRIVILEGES ON placement.* TO 'placement'@'%' IDENTIFIED BY '123456'"
6 q4 D: a( i9 L5 d+ N. W8 fopenstack user create --domain default --password 123456 placement
: a# o& U8 p, F9 j9 O# X
openstack role add --project service --user placement admin
! G/ }! G9 \4 @5 g
openstack service create --name placement --description "Placement API" placement
: [5 R# { L l" lopenstack endpoint create --region RegionOne placement public http://controller:8778
7 c& v! B) I% e5 o6 O$ B4 }( Hopenstack endpoint create --region RegionOne placement internal http://controller:8778
' }6 M6 F6 u3 f& D6 _" z
openstack endpoint create --region RegionOne placement admin http://controller:8778
, \* @5 t9 h8 b; R1 A/ P+ Dyum install -y openstack-placement-api
t+ @. w$ W% v. Z* j( y4 W
sed -i "507c connection = mysql+pymysql://placement:123456@controller/placement
" /etc/placement/placement.conf : f7 Q: j, S9 _- m( D
sed -i "192c auth_strategy = keystone" /etc/placement/placement.conf
6 g: l3 U; O+ w; H1 i) B6 e; b4 E) L
sed -i "241c auth_url = http://controller:5000/v3
" /etc/placement/placement.conf
0 L! ?0 J( ?! a% w! [5 u4 u, Esed -i "242c memcached_servers = controller:11211" /etc/placement/placement.conf
1 h; I8 _0 a% p5 K: e8 S
sed -i "243c auth_type = password" /etc/placement/placement.conf
3 U$ j' P" i0 D4 N+ |! O% ksed -i "244c project_domain_name = Default" /etc/placement/placement.conf
* {4 s: C7 o6 o% S' T2 i- psed -i "245c user_domain_name = Default" /etc/placement/placement.conf
; ]! C0 a# K/ j% a$ zsed -i "246c project_name = service" /etc/placement/placement.conf
! W/ s0 Z Q; o0 y* s
sed -i "247c username = placement" /etc/placement/placement.conf
* ]3 B& x# J$ j8 K1 ^sed -i "248c password = 123456" /etc/placement/placement.conf
: q. {/ d4 l& {su -s /bin/sh -c "placement-manage db sync" placement
* C2 i9 j! C6 L$ l- }systemctl restart httpd
0 m! E5 X: ] H9 b. F8 ~8 N7 M2 n5 h& Y2 M E7 ^1 l
#控制节点 安装Compute service
' d6 M4 G$ j; v! @, Mmysql -uroot -p123456 -e "CREATE DATABASE nova_api"
/ J- m/ h! v9 Q
mysql -uroot -p123456 -e "CREATE DATABASE nova"
$ w# {( d& {6 ^, \- V, A
mysql -uroot -p123456 -e "CREATE DATABASE nova_cell0"
0 [- m% L* y" ?# O. i3 X+ O) ~5 ~mysql -uroot -p123456 -e "GRANT ALL PRIVILEGES ON nova_api.* TO 'nova'@'localhost' IDENTIFIED BY '123456'"
3 ]4 @( l# R% i- c% P- _$ nmysql -uroot -p123456 -e "GRANT ALL PRIVILEGES ON nova_api.* TO 'nova'@'%' IDENTIFIED BY '123456'"
8 \+ I2 D% A& U% u% Omysql -uroot -p123456 -e "GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'localhost' IDENTIFIED BY '123456'"
9 `0 y$ ?( m I; A
mysql -uroot -p123456 -e "GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'%' IDENTIFIED BY '123456'"
: d y3 \" h$ a9 Q6 Z& v k" Nmysql -uroot -p123456 -e "GRANT ALL PRIVILEGES ON nova_cell0.* TO 'nova'@'localhost' IDENTIFIED BY '123456'"
# T6 H" S$ N, p9 ymysql -uroot -p123456 -e "GRANT ALL PRIVILEGES ON nova_cell0.* TO 'nova'@'%' IDENTIFIED BY '123456'"
; n A1 M- [# K$ _1 p7 _% u8 p( Nopenstack user create --domain default --password 123456 nova
: L8 B# ~3 p6 P
openstack role add --project service --user nova admin
- }+ U9 g- S* X& Q- G8 o
openstack service create --name nova --description "OpenStack Compute" compute
( C7 ?5 y* ?; xopenstack endpoint create --region RegionOne compute public http://controller:8774/v2.1
4 u9 b5 |% [: K* \openstack endpoint create --region RegionOne compute internal http://controller:8774/v2.1
2 U: U2 i! a6 i( Q
openstack endpoint create --region RegionOne compute admin http://controller:8774/v2.1
+ C, [9 @! C5 B# Z1 \# p6 \yum install -y openstack-nova-api openstack-nova-conductor openstack-nova-novncproxy openstack-nova-scheduler
* Z2 k/ \" M; b+ |6 v: w' Wsed -i "2c enabled_apis = osapi_compute,metadata" /etc/nova/nova.conf
- P' j/ T i' F m: Q# c& Dsed -i "3c transport_url = rabbit://openstack:123456@controller:5672/
" /etc/nova/nova.conf
$ o2 B, d( I+ g% K, H H' jsed -i "4c my_ip = 10.0.0.11" /etc/nova/nova.conf
4 \" u% G+ i( ~, P5 n6 |sed -i "1079c connection = mysql+pymysql://nova:123456@controller/nova_api
" /etc/nova/nova.conf
' z4 D! K' q Q8 p: K- f( Xsed -i "1622c connection = mysql+pymysql://nova:123456@controller/nova
" /etc/nova/nova.conf 6 \8 B* S k P" m5 d; q% c* ? \4 a
sed -i "872c auth_strategy = keystone" /etc/nova/nova.conf
. H2 V3 d! P- {) a L% P+ N/ U2 Q
sed -i "2561c www_authenticate_uri = http://controller:5000/
" /etc/nova/nova.conf - p& j$ Y! A; k8 C( g% i) w6 N; l
sed -i "2562c auth_url = http://controller:5000/
" /etc/nova/nova.conf
1 ~4 E3 ^6 c- `$ csed -i "2563c memcached_servers = controller:11211" /etc/nova/nova.conf
, X" [, n" u9 g) R( B8 ~" z6 Y
sed -i "2564c auth_type = password" /etc/nova/nova.conf
' P$ H* w: d) v5 ?! P
sed -i "2565c project_domain_name = Default" /etc/nova/nova.conf
4 a a7 U# @1 r1 x4 J% ]: n4 T' R
sed -i "2566c user_domain_name = Default" /etc/nova/nova.conf
6 f9 S8 V, E9 v! t) ^. @% w
sed -i "2567c project_name = service" /etc/nova/nova.conf
2 n+ C- A, R) J+ a! b, ^sed -i "2568c username = nova" /etc/nova/nova.conf
3 X% |3 n' r1 g4 \% ~: hsed -i "2569c password = 123456" /etc/nova/nova.conf
( L# r* @0 T) s+ k- C8 b. `' Y: Wsed -i "5171c enabled = true" /etc/nova/nova.conf
$ B. j3 J7 U1 @9 W) u2 v4 S+ n
sed -i '5172c server_listen = $my_ip' /etc/nova/nova.conf
- L/ A/ M, M4 G& N& L
sed -i '5173c server_proxyclient_address = $my_ip' /etc/nova/nova.conf
6 T0 R5 N, |: o0 I0 R
sed -i "1937c api_servers = http://controller:9292
" /etc/nova/nova.conf 5 O" Y! u6 {" I7 b d
sed -i "3571c lock_path = /var/lib/nova/tmp" /etc/nova/nova.conf
) c. v& o9 A# n! s0 [$ Bsed -i "4093c region_name = RegionOne" /etc/nova/nova.conf
* \8 T% u: L& x/ o
sed -i "4094c project_domain_name = Default" /etc/nova/nova.conf
' j7 T: }( I- d$ @/ Y) J. z) L
sed -i "4095c project_name = service" /etc/nova/nova.conf
0 A) p x; u; P: l
sed -i "4096c auth_type = password" /etc/nova/nova.conf
, k5 P$ D/ \+ t4 _/ [sed -i "4097c user_domain_name = Default" /etc/nova/nova.conf
' l* j& B: f. _+ D" o2 lsed -i "4098c auth_url = http://controller:5000/v3
" /etc/nova/nova.conf & y p+ ]$ ]1 C9 n) j w- `1 E+ a- x
sed -i "4099c username = placement" /etc/nova/nova.conf
* q7 ~% T; G9 C6 Used -i "4100c password = 123456" /etc/nova/nova.conf
$ e1 ` r2 x" Z& F m1 \7 d. j
sed -i "4509c discover_hosts_in_cells_interval = 300" /etc/nova/nova.conf
. H' l8 i& @/ V5 R% c9 Z& M' @
su -s /bin/sh -c "nova-manage api_db sync" nova
1 l b" J/ Y% u8 e* \" ^% J0 zsu -s /bin/sh -c "nova-manage cell_v2 map_cell0" nova
7 W/ y# ] R. i2 Z" e- m
su -s /bin/sh -c "nova-manage cell_v2 create_cell --name=cell1 --verbose" nova
6 ]" ?, t) j) ?+ C1 [" qsu -s /bin/sh -c "nova-manage db sync" nova
, X3 e& `. Y+ _6 I
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
5 @4 W2 R. x! L
- z/ q, B* E: L9 K' F5 V
#计算节点 安装Compute service
2 r7 z4 L1 Y6 u, t2 h$ P, W
yum install -y openstack-nova-compute
/ H$ v; v4 T' ]; z& T0 _3 {$ Rsed -i "2c enabled_apis = osapi_compute,metadata" /etc/nova/nova.conf
& F2 O9 {" y% m# `sed -i "3c transport_url = rabbit://openstack:123456@controller
" /etc/nova/nova.conf
: n8 B$ N8 x. E* y$ t1 V8 `sed -i "4c my_ip = 10.0.0.31" /etc/nova/nova.conf
# L6 r. {7 S) }% B
sed -i "872c auth_strategy = keystone" /etc/nova/nova.conf
5 ^# d- A, g6 `# h4 e
sed -i "2561c www_authenticate_uri = http://controller:5000/
" /etc/nova/nova.conf * ]6 T# Y, [) |8 n6 c
sed -i "2562c auth_url = http://controller:5000/
" /etc/nova/nova.conf . D+ _* V/ e7 w( ?
sed -i "2563c memcached_servers = controller:11211" /etc/nova/nova.conf
, Q. K j; W4 P V8 q3 Ised -i "2564c auth_type = password" /etc/nova/nova.conf
3 [, G, @% O. J2 P! z& E9 G/ S
sed -i "2565c project_domain_name = Default" /etc/nova/nova.conf
3 E) `" N) U, ]4 psed -i "2566c user_domain_name = Default" /etc/nova/nova.conf
5 p2 ^) b& d" q
sed -i "2567c project_name = service" /etc/nova/nova.conf
; h1 k6 A2 r; ?
sed -i "2568c username = nova" /etc/nova/nova.conf
- o" k$ S% h' E% B- ~
sed -i "2569c password = 123456" /etc/nova/nova.conf
# R/ b9 t3 w8 `- B+ R- V
sed -i "5171c enabled = true" /etc/nova/nova.conf
& w. w6 }6 @; ^ g3 ?4 ]3 [sed -i "5172c server_listen = 0.0.0.0" /etc/nova/nova.conf
0 h1 ]- X8 p- S
sed -i '5173c server_proxyclient_address = $my_ip' /etc/nova/nova.conf
2 m, h; V4 H5 q9 |% _8 [" A( P
sed -i "5174c novncproxy_base_url = http://controller:6080/vnc_auto.html
" /etc/nova/nova.conf
1 g6 m1 q! Z5 G+ U# X. Used -i "1937c api_servers = http://controller:9292
" /etc/nova/nova.conf ( v* N. T5 F) ~. D1 n6 t1 ^; ]
sed -i "3571c lock_path = /var/lib/nova/tmp" /etc/nova/nova.conf
& d" W* q0 x: _4 k- ^sed -i "4093c region_name = RegionOne" /etc/nova/nova.conf
: z+ C( m# u6 osed -i "4094c project_domain_name = Default" /etc/nova/nova.conf
4 g/ ~4 ?( P* S- p8 o% E3 b0 a# O- `
sed -i "4095c project_name = service" /etc/nova/nova.conf
& I2 a) V: R( v0 J2 y
sed -i "4096c auth_type = password" /etc/nova/nova.conf
$ n- ^/ i$ I9 \( S! P
sed -i "4097c user_domain_name = Default" /etc/nova/nova.conf
i4 f7 b' W3 psed -i "4098c auth_url = http://controller:5000/v3
" /etc/nova/nova.conf ) I7 E+ u# T# v) J
sed -i "4099c username = placement" /etc/nova/nova.conf
- J6 l( \7 h6 P) A9 h0 nsed -i "4100c password = 123456" /etc/nova/nova.conf
. Z6 @2 H+ o3 M2 x4 i0 y& M* Q
4 l1 ?$ O f# N5 h
#执行命令,查看是否支持CPU虚拟化,如果大于0则支持。
$ r: ?8 h- w/ r0 W/ j
egrep -c '(vmx|svm)' /proc/cpuinfo
8 V; i- Q" \' A+ q6 P7 V; v9 d#如果不支持的话还需要执行下面的命令
2 @3 H- H5 V# Z; ?
sed -i "2722c virt_type = qemu" /etc/nova/nova.conf
o8 B. T2 w4 Q7 T6 o
, D' G b' f1 L. msystemctl enable libvirtd.service openstack-nova-compute.service && systemctl start libvirtd.service openstack-nova-compute.service
$ m, q i6 a8 ]% z5 j+ W
. k9 f/ ~$ u' f" q* H5 Y* s#控制节点 计算节点从注册到发现会有延迟,根据discover_hosts_in_cells_interval 配置轮询发现时间,可以执行下面命令手动发现计算节点
5 X$ M! N* H! m* O' R! T
su -s /bin/sh -c "nova-manage cell_v2 discover_hosts --verbose" nova
! ~' U6 c6 t: y' V- ]9 ?, q: l
" F$ G% w, n& u9 S
#控制节点 安装Networking service
0 O8 S" [/ f* rmysql -uroot -p123456 -e "CREATE DATABASE neutron"
5 \0 N' p0 y7 T! E$ h
mysql -uroot -p123456 -e "GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'localhost' IDENTIFIED BY '123456'"
r! f! X; Y* N" p# fmysql -uroot -p123456 -e "GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'%' IDENTIFIED BY '123456'"
" O. l7 F. I: T5 [# `$ l
openstack user create --domain default --password 123456 neutron
7 ?, k, R( a% S" A+ Wopenstack role add --project service --user neutron admin
1 x8 {" L2 H& m/ lopenstack service create --name neutron --description "OpenStack Networking" network
+ W# z: Q2 X: e" D( E q
openstack endpoint create --region RegionOne network public http://controller:9696
8 g4 i" w2 X# P7 `" z% p
openstack endpoint create --region RegionOne network internal http://controller:9696
8 T, c2 _7 j) M+ W: mopenstack endpoint create --region RegionOne network admin http://controller:9696
0 Y" T V. p7 w F0 G! t$ o, z- b6 qyum install -y openstack-neutron openstack-neutron-ml2 openstack-neutron-linuxbridge ebtables
- }6 x: T- B% U3 s
#配置服务器组件
% ~9 s" K: F# \! Z. Ssed -i "2c core_plugin = ml2" /etc/neutron/neutron.conf
$ s8 ]: F/ u3 Q2 s* Vsed -i "3c service_plugins = router" /etc/neutron/neutron.conf
& M8 J$ D7 x' u6 J
sed -i "4c allow_overlapping_ips = true" /etc/neutron/neutron.conf
4 i0 U; g0 M2 J% u
sed -i "5c transport_url = rabbit://openstack:123456@controller
" /etc/neutron/neutron.conf 2 x( N$ v9 E9 U9 E4 C
sed -i "6c auth_strategy = keystone" /etc/neutron/neutron.conf
3 w+ y# a+ k1 O1 I5 Y
sed -i "7c notify_nova_on_port_status_changes = true" /etc/neutron/neutron.conf
% E, D# I5 o% I* h1 J+ W7 u2 Csed -i "8c notify_nova_on_port_data_changes = true" /etc/neutron/neutron.conf
) f& q) ?9 r% O6 O) G% w! bsed -i "254c connection = mysql+pymysql://neutron:123456@controller/neutron
" /etc/neutron/neutron.conf
, O& f# p# [5 \, _- q* _sed -i "359c www_authenticate_uri = http://controller:5000
" /etc/neutron/neutron.conf * w" V0 q4 s. N- \
sed -i "360c auth_url = http://controller:5000
" /etc/neutron/neutron.conf
( l+ R+ Y2 C! C2 e; p9 Y$ l( \ k8 Xsed -i "361c memcached_servers = controller:11211" /etc/neutron/neutron.conf
) C; w" p- w& N. \
sed -i "362c auth_type = password" /etc/neutron/neutron.conf
5 T+ t( S3 i( l9 L. H7 S: Z& y
sed -i "363c project_domain_name = default" /etc/neutron/neutron.conf
: W0 n) A2 l! E% I* Qsed -i "364c user_domain_name = default" /etc/neutron/neutron.conf
( `) S; d% f, c" P5 \sed -i "365c project_name = service" /etc/neutron/neutron.conf
# L8 L$ J* i. Z6 y8 d' w1 r9 e8 _sed -i "366c username = neutron" /etc/neutron/neutron.conf
+ n8 G. [% e$ B# l0 Bsed -i "367c password = 123456" /etc/neutron/neutron.conf
' C, F- d/ r. }' G% n# |& \
sed -i "521c lock_path = /var/lib/neutron/tmp" /etc/neutron/neutron.conf
Y8 c: c" ]( T; Wecho "[nova]" >> /etc/neutron/neutron.conf
4 N1 u: x# x+ @% |! J, \& e @
echo "auth_url = http://controller:5000
" >> /etc/neutron/neutron.conf
& W: a$ ?& L% j' G! \echo "auth_type = password" >> /etc/neutron/neutron.conf
) F6 Z2 P0 b* _" \ mecho "project_domain_name = default" >> /etc/neutron/neutron.conf
1 g* ^0 F9 z% o3 F* X0 R# t- x
echo "user_domain_name = default" >> /etc/neutron/neutron.conf
! l/ G* c' p( p
echo "region_name = RegionOne" >> /etc/neutron/neutron.conf
% g O0 ~* N! L: W. ]+ {7 cecho "project_name = service" >> /etc/neutron/neutron.conf
6 ^1 Z3 g P9 |( N
echo "username = nova" >> /etc/neutron/neutron.conf
3 G s; w6 G \8 q7 g7 Z( o
echo "password = 123456" >> /etc/neutron/neutron.conf
. a y8 h# y) E
#配置Modular Layer 2 (ML2) plug-in
: P, V; U3 f4 ]& O: U
echo "[ml2]" >> /etc/neutron/plugins/ml2/ml2_conf.ini
8 H" O+ Q- ?3 P5 |: E
echo "type_drivers = flat,vlan,vxlan" >> /etc/neutron/plugins/ml2/ml2_conf.ini
, O0 e& a/ j/ d3 e, S8 w2 s$ f. [echo "tenant_network_types = vxlan" >> /etc/neutron/plugins/ml2/ml2_conf.ini
/ s, F! C: [0 z% e# ?6 K, w, uecho "mechanism_drivers = linuxbridge,l2population" >> /etc/neutron/plugins/ml2/ml2_conf.ini
! w# ?" I' P+ y' L$ fecho "extension_drivers = port_security" >> /etc/neutron/plugins/ml2/ml2_conf.ini
; E% e7 w( n S3 z! i1 iecho "[ml2_type_flat]" >> /etc/neutron/plugins/ml2/ml2_conf.ini
! S/ U* t6 I- g4 H3 B: X7 j& t# _
echo "flat_networks = provider" >> /etc/neutron/plugins/ml2/ml2_conf.ini
N0 f- V/ ]) u+ h
echo "vni_ranges = 1:1000" >> /etc/neutron/plugins/ml2/ml2_conf.ini
& K4 `5 q; U* I6 `& G- t
echo "[securitygroup]" >> /etc/neutron/plugins/ml2/ml2_conf.ini
5 V1 V. ^3 p. ^, v; D5 pecho "enable_ipset = true" >> /etc/neutron/plugins/ml2/ml2_conf.ini
1 n. I# b+ v2 L1 D+ [7 l) {
#配置Linux bridge agent
& q+ e; q) f1 C. X& i% u
echo "[linux_bridge]" >> /etc/neutron/plugins/ml2/linuxbridge_agent.ini
1 e4 E, b8 g) t( O$ _#eth1为另外第二张网卡
\3 k" Z1 k" W8 Q1 q
echo "physical_interface_mappings = provider:eth1" >> /etc/neutron/plugins/ml2/linuxbridge_agent.ini
( G4 ^: [: ^* o) X
echo "[vxlan]" >> /etc/neutron/plugins/ml2/linuxbridge_agent.ini
2 f% Q9 M3 L8 M; k# a5 B% l. ? oecho "enable_vxlan = true" >> /etc/neutron/plugins/ml2/linuxbridge_agent.ini
0 G! @! [! A1 x9 \6 g1 V. i& Q
#10.0.0.12为第二张网卡的IP
3 L( V6 }2 E1 [* Decho "local_ip = 10.0.0.12" >> /etc/neutron/plugins/ml2/linuxbridge_agent.ini
* u# d& D' _& R% {echo "l2_population = true" >> /etc/neutron/plugins/ml2/linuxbridge_agent.ini
7 l" b6 j' Q5 E1 Qecho "[securitygroup]" >> /etc/neutron/plugins/ml2/linuxbridge_agent.ini
9 J. N4 F' P" a5 q
echo "enable_security_group = true" >> /etc/neutron/plugins/ml2/linuxbridge_agent.ini
. W+ F# I2 @3 }3 J1 A5 k
echo "firewall_driver = neutron.agent.linux.iptables_firewall.IptablesFirewallDriver" >> /etc/neutron/plugins/ml2/linuxbridge_agent.ini
$ n( T3 L8 {7 k3 G#配置layer-3 agent
- [ Q$ l1 [- n c; j1 g" u2 qsed -i "2c interface_driver = linuxbridge" /etc/neutron/l3_agent.ini
6 l/ u% `* d P) z% a- s
#配置DHCP agent
6 c6 z5 @' M% B* j i5 B7 [
sed -i "2c interface_driver = linuxbridge" /etc/neutron/dhcp_agent.ini
! A4 Q" q- H9 B, V2 N+ \2 c1 b2 p6 C
sed -i "3c dhcp_driver = neutron.agent.linux.dhcp.Dnsmasq" /etc/neutron/dhcp_agent.ini
# T; t) w$ e) c n# j2 M9 Fsed -i "4c enable_isolated_metadata = true" /etc/neutron/dhcp_agent.ini
/ }3 B3 i4 w: |3 H#配置metadata agent
8 y3 J: Z r) A- zsed -i "2c nova_metadata_host = controller" /etc/neutron/metadata_agent.ini
5 | C" N8 {0 R
sed -i "3c metadata_proxy_shared_secret = 123456" /etc/neutron/metadata_agent.ini
# a& l% k) j3 @ |#配置计算服务使用网络服务
: ^. |! R5 Y) O- v; y! ?: U. K2 k' b
sed -i " 3334c auth_url = http://controller:5000
" /etc/nova/nova.conf 5 U% t9 S6 b9 }5 L5 X
sed -i " 3335c auth_type = password" /etc/nova/nova.conf
1 ?$ r- F" h1 h& [6 c7 D" F
sed -i " 3336c project_domain_name = default" /etc/nova/nova.conf
5 r& s1 x: s( m5 f4 @+ p
sed -i " 3337c user_domain_name = default" /etc/nova/nova.conf
8 H2 { @3 I8 K' D ]sed -i " 3338c region_name = RegionOne" /etc/nova/nova.conf
3 b7 C; u2 K$ P8 M t, I
sed -i " 3339c project_name = service" /etc/nova/nova.conf
1 Y [( |& z' z" n; a
sed -i " 3340c username = neutron" /etc/nova/nova.conf
, O9 m* j' _$ [3 T) L% used -i " 3341c password = 123456" /etc/nova/nova.conf
2 M$ o% m1 S! i9 X4 N, T: |# C
sed -i " 3342c service_metadata_proxy = true" /etc/nova/nova.conf
4 u% f) H; M$ d& l" O5 M& Tsed -i " 3343c metadata_proxy_shared_secret = 123456" /etc/nova/nova.conf
" U2 N- Z+ E) J% o: l
ln -s /etc/neutron/plugins/ml2/ml2_conf.ini /etc/neutron/plugin.ini
* x& A( }+ ~5 }" N8 {0 N' H5 w; j9 `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
! l0 ]7 j7 ^) r; L2 b3 L7 ~; ysystemctl restart openstack-nova-api.service
7 L6 _1 v/ s; f6 t5 I) X
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 |8 c7 P5 C
systemctl enable neutron-l3-agent.service && systemctl start neutron-l3-agent.service
6 v* }! E, n3 {) o5 m& Q
& W. o7 _0 D& L' A4 t
#计算节点 安装Networking service
& ?. |) _5 b- w, O. b b, d6 E
yum install -y openstack-neutron-linuxbridge ebtables ipset
3 K4 m2 a; @9 n' Xsed -i "2c transport_url = rabbit://openstack:123456@controller
" /etc/neutron/neutron.conf 5 l) N9 A$ u- S& H$ K, a
sed -i "3c auth_strategy = keystone" /etc/neutron/neutron.conf
! W# h4 C( j V K% P
sed -i "359c www_authenticate_uri = http://controller:5000
" /etc/neutron/neutron.conf
/ x: s$ A" g \6 N# g' \sed -i "360c auth_url = http://controller:5000
" /etc/neutron/neutron.conf - \/ ~# l8 K, w
sed -i "361c memcached_servers = controller:11211" /etc/neutron/neutron.conf
$ X+ P4 m# ]- T+ T) M
sed -i "362c auth_type = password" /etc/neutron/neutron.conf
' R9 X1 H/ i' y. Y8 A
sed -i "363c project_domain_name = default" /etc/neutron/neutron.conf
3 l4 e0 `) e+ v+ }/ Y5 ~# ksed -i "364c user_domain_name = default" /etc/neutron/neutron.conf
- s8 y5 t& d0 I
sed -i "365c project_name = service" /etc/neutron/neutron.conf
; \5 N& ` T' H
sed -i "366c username = neutron" /etc/neutron/neutron.conf
( v5 O( P; w( P* n1 _/ t3 D
sed -i "367c password = 123456" /etc/neutron/neutron.conf
& l/ X7 Z5 J* d+ ]* Q
sed -i "521c lock_path = /var/lib/neutron/tmp" /etc/neutron/neutron.conf
4 E ]% K X: T2 ^
echo "[linux_bridge]" >> /etc/neutron/plugins/ml2/linuxbridge_agent.ini
5 f1 R& A. r8 ^2 S: W5 g
#eth1为另外第二张网卡
1 J* ` D! `% w* f: Y6 uecho "physical_interface_mappings = provider:eth1" >> /etc/neutron/plugins/ml2/linuxbridge_agent.ini
7 j, {3 K! l: W3 \ Z5 T% ]
echo "[vxlan]" >> /etc/neutron/plugins/ml2/linuxbridge_agent.ini
& r* V+ M2 e6 b( d0 h/ l9 _
echo "enable_vxlan = true" >> /etc/neutron/plugins/ml2/linuxbridge_agent.ini
5 w& U% y9 H% P, ?) S: ?#10.0.0.32为第二张网卡的IP
* N, L; w, C8 `' o- w8 d1 x1 `echo "local_ip = 10.0.0.32" >> /etc/neutron/plugins/ml2/linuxbridge_agent.ini
+ g( P: t2 Z* u8 zecho "l2_population = true" >> /etc/neutron/plugins/ml2/linuxbridge_agent.ini
" _/ n, }4 @% g
echo "[securitygroup]" >> /etc/neutron/plugins/ml2/linuxbridge_agent.ini
3 I, p. n3 D5 l( A* h% F1 secho "enable_security_group = true" >> /etc/neutron/plugins/ml2/linuxbridge_agent.ini
1 }+ F* w; Y2 W* P) u/ ^" B% decho "firewall_driver = neutron.agent.linux.iptables_firewall.IptablesFirewallDriver" >> /etc/neutron/plugins/ml2/linuxbridge_agent.ini
, m& J% p/ ` Q7 z$ }% W#配置计算服务使用网络服务
* U/ R$ G! ]! o1 c$ u# R% i' [
sed -i " 3334c auth_url = http://controller:5000
" /etc/nova/nova.conf - J8 f9 d, ]3 c$ H% V- B4 O
sed -i " 3335c auth_type = password" /etc/nova/nova.conf
* w1 Y6 `1 c1 A1 C
sed -i " 3336c project_domain_name = default" /etc/nova/nova.conf
6 O$ r5 d# g# ] ?3 ]2 _; ]sed -i " 3337c user_domain_name = default" /etc/nova/nova.conf
4 L9 {8 n; f5 \; s" M V. J
sed -i " 3338c region_name = RegionOne" /etc/nova/nova.conf
: {3 `6 `/ V5 {7 w9 lsed -i " 3339c project_name = service" /etc/nova/nova.conf
+ V; c% m8 [! W0 H5 C7 A" B5 a
sed -i " 3340c username = neutron" /etc/nova/nova.conf
3 |, X: G) x6 J1 I+ f
sed -i " 3341c password = 123456" /etc/nova/nova.conf
. D& R; w' C/ G- v; nsystemctl restart openstack-nova-compute.service
/ F( q& ]# u' j% A6 n* Zsystemctl enable neutron-linuxbridge-agent.service && systemctl start neutron-linuxbridge-agent.service
% a" z% T7 w; a/ a3 E4 C" c) t$ C+ Z5 V' Q) r. R
#控制节点 安装Dashboard
& P5 z6 m$ m( G0 M/ c) s/ i
yum install -y openstack-dashboard
& H# @& m: G' i" h( e* T4 j @
sed -i '118c OPENSTACK_HOST = "controller"' /etc/openstack-dashboard/local_settings
% T X9 G# V+ b5 q7 f7 s6 t Msed -i "39c ALLOWED_HOSTS = ['*']" /etc/openstack-dashboard/local_settings
' V, f Q7 T A Ased -i "104c SESSION_ENGINE = 'django.contrib.sessions.backends.cache'" /etc/openstack-dashboard/local_settings
1 X1 M5 w% K2 | w5 C& vsed -i "94c CACHES = {" /etc/openstack-dashboard/local_settings
6 F( h( q4 Q U2 o, Ysed -i "95c 'default': {" /etc/openstack-dashboard/local_settings
; z; i0 b2 b1 _0 Y* Q! ased -i "96c 'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache'," /etc/openstack-dashboard/local_settings
6 x, _( J. O) c, `5 A6 x! ~
sed -i "97c 'LOCATION': 'controller:11211'," /etc/openstack-dashboard/local_settings
# m3 W8 c! `$ |6 B( R
sed -i "98c }" /etc/openstack-dashboard/local_settings
5 o- u, i2 I# O7 R5 z! K+ l1 n" [sed -i "99c }" /etc/openstack-dashboard/local_settings
! {: ^3 C U' _8 e! [
sed -i '119c OPENSTACK_KEYSTONE_URL = "http://%s:5000/v3
" % OPENSTACK_HOST' /etc/openstack-dashboard/local_settings # b. ]/ A& c Q3 Y
echo 'OPENSTACK_KEYSTONE_MULTIDOMAIN_SUPPORT = True' >> /etc/openstack-dashboard/local_settings
% k+ s8 z/ R3 yecho 'OPENSTACK_API_VERSIONS = {' >> /etc/openstack-dashboard/local_settings
6 |& O# M. x0 d3 d$ u$ _& lecho ' "identity": 3,' >> /etc/openstack-dashboard/local_settings
. M* z! G' ~2 H
echo ' "image": 2,' >> /etc/openstack-dashboard/local_settings
6 k( }$ U# p1 v) G! D! b* ?8 Secho ' "volume": 3' >> /etc/openstack-dashboard/local_settings
4 q# w1 {& x4 `$ m4 Wecho '}' >> /etc/openstack-dashboard/local_settings
& D l% ]0 [& `. j
echo 'OPENSTACK_KEYSTONE_DEFAULT_DOMAIN = "Default"' >> /etc/openstack-dashboard/local_settings
0 |0 [" D, I% M$ V+ k* d2 l
echo 'OPENSTACK_KEYSTONE_DEFAULT_ROLE = "user"' >> /etc/openstack-dashboard/local_settings
3 w' J; ]" ]& z0 N
sed -i '123c TIME_ZONE = "Asia/Shanghai"' /etc/openstack-dashboard/local_settings
1 s6 v! U+ Z. V9 Q! zecho "WEBROOT = '/dashboard/'" >> /etc/openstack-dashboard/local_settings
4 c' K! L3 g6 D$ G
echo 'WSGIApplicationGroup %{GLOBAL}' >> /etc/httpd/conf.d/openstack-dashboard.conf
4 F" I5 u7 ]9 V. K6 ~: }, [1 `5 Vsystemctl restart httpd.service memcached.service
9 G2 h$ h! {7 i9 m x' E
' F1 L/ @; ?; K& Z( c#安装完成,可访问http://10.0.0.11/dashboard/
查看 / M% z* \) ], ^! n7 z+ A1 m