#!/bin/bash
, A i1 @3 Z( k0 ?5 d5 G: E% i0 [
/ M$ a0 S" k) n; V
8 Q) u3 C$ d0 F l& ?& O#共两台主机,分别是一台控制节点,一台计算节点
- ?4 G- Z3 i+ r2 i/ N
#1、控制节点内存4096M。双网卡,分别为eth0:10.0.0.11,eth1:10.0.0.12
?; d: N) r4 ]* W" \) Y; @#2、计算节点内存4096M。双网卡,分别为eth0:10.0.0.31,eth1:10.0.0.32
1 M9 R3 J1 n/ L0 a8 z
) A4 l' q7 S# a% b# ?+ Q: [, M! ?#设置阿里云yum源
5 @8 N3 Y! @- Y G% U9 r1 E
- X. U2 w- _8 O0 _2 }rm -f /etc/yum.repos.d/CentOS-AppStream.repo /etc/yum.repos.d/CentOS-PowerTools.repo /etc/yum.repos.d/CentOS-centosplus.repo /etc/yum.repos.d/CentOS-Extras.repo && rm -rf /var/cache/yum && yum makecache && yum -y update && yum -y autoremove
2 q" k2 X# {1 X
}% e* M0 \7 g7 Z( [0 ?
#关闭防火墙
+ a+ Y4 z! u- L2 O: a. {- Gsystemctl stop firewalld && systemctl disable firewalld
4 p3 o0 P+ D: Z u0 v3 {
1 H2 {' ]2 p8 U( l- w#关闭SELinux
" C7 w% h& z- M6 M% k$ w: gsetenforce 0
! C) a3 ], x/ W' xsed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config
3 ~8 a3 E2 U: h! _+ C W- r9 T2 i
7 h" p ?; x5 B# @8 T( f) W
#关闭swap分区
/ q4 a3 Q( h0 D$ Z
swapoff -a
5 u8 h: {: H- C/ \
sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
! Y+ E u$ [. ]- o1 m6 g7 X7 N
! h- ?6 \- U. p1 D5 `& G#设置内核
# o1 G; C3 I. [7 Q# ]3 x6 ?modprobe bridge
8 \0 k N- u8 k: ^
modprobe br_netfilter
6 \# D0 m v; ~0 Pcat > /etc/sysconfig/modules/neutron.modules <<EOF
0 B6 W- y- A+ T& O% x0 ~( V+ }#!/bin/bash
; S8 n8 ?& \/ kmodprobe -- bridge
7 Y5 S6 p0 V; |- z, h
modprobe -- br_netfilter
- e/ X8 j: m6 \: M3 [EOF
4 z- L8 G% d* ochmod 755 /etc/sysconfig/modules/neutron.modules && bash /etc/sysconfig/modules/neutron.modules
/ s# u' ]; c- o! @2 H" U. techo "vm.max_map_count=262144" >> /etc/sysctl.conf
; Z: e$ o2 y4 @7 k" E5 ~echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
. i0 |6 }8 \/ A# z6 Q8 y4 B: Necho "net.bridge.bridge-nf-call-iptables=1" >> /etc/sysctl.conf
5 I c1 ~4 b9 G" secho "net.bridge.bridge-nf-call-ip6tables=1" >> /etc/sysctl.conf
% {7 V- o6 N9 M5 r5 Osysctl -p
" F' t# Q8 l( Z& H R
* ]2 a' x& }( _; E
#设置时间同步
4 b% t0 H' H# a% i/ o" u }2 Pyum install -y chrony && yum -y autoremove
0 V6 h6 D9 `7 Y4 t# G# L! {
sed -i '/^pool/d' /etc/chrony.conf
7 V, {/ {- v- U% T; `sed -i '/^server/d' /etc/chrony.conf
# {& F) l" S6 z0 ?! i# {% X
echo "pool ntp.aliyun.com iburst" >> /etc/chrony.conf
1 c9 I. Z; V. G/ m I5 A' i. s2 Qsystemctl start chronyd.service && systemctl enable chronyd.service
1 |, ^/ @2 y& F% c
; N9 |9 N: _( V. y+ W5 f#控制节点 设置hostname
9 U. M1 |' n$ ~! c: H+ Z* fhostnamectl set-hostname controller
2 @+ U$ S6 u; X0 a4 e& f7 d* C4 X) t$ u( V( a e# u
#计算节点 设置hostname
/ j$ U4 u# [& U6 |- X' m( Lhostnamectl set-hostname compute1
* |- v9 I2 X' ~! q( m
- q% c8 I: U8 ?7 l) ?* c#添加host
1 L% j$ Q& L/ n4 |' o
echo "10.0.0.11 controller" >> /etc/hosts
[5 f d& R1 @4 y& [; }
echo "10.0.0.31 compute1" >> /etc/hosts
/ ? o/ t; J" n& A/ W: i+ G8 |
5 T: `" |7 F* m/ D' n |#安装基础组件
% E0 K9 N: f; ^) P
yum install -y centos-release-openstack-ussuri
" P! J( D( m4 K) [/ `& M& p: gyum config-manager --set-enabled PowerTools
/ w0 H# w7 J- ?' F2 F9 ~yum upgrade -y
z1 g( \4 \1 G" H( Yyum install -y python3-openstackclient
f3 b3 V* ]2 D7 n3 [9 F* e9 G O* \
#控制节点 安装Mariadb
( q0 X% }6 i/ W0 {' @2 n$ yyum install -y mariadb mariadb-server python2-PyMySQL
: z, ?4 g3 D k' h3 m: ntee /etc/my.cnf.d/openstack.cnf <<-'EOF'
7 J- `% ?: v( R5 s( A' M9 v[mysqld]
" `! @% K+ P" [) abind-address = 10.0.0.11
( v! N2 W7 m& z ?0 y2 U9 I
default-storage-engine = innodb
8 x7 M/ Y! F9 winnodb_file_per_table = on
( U3 b. n, k# ~; `. y2 O
max_connections = 4096
& J2 X4 T+ C8 M( y# y
collation-server = utf8_general_ci
4 T6 S! R+ ?1 _7 Z: I+ _2 D# Jcharacter-set-server = utf8
% i; C- O0 j5 W; N9 e4 [" E
EOF
) g) i. C. o8 j# N
systemctl enable mariadb.service && systemctl start mariadb.service
( ^8 m: w6 U; S! @# vecho -e "\nY\n123456\n123456\nY\nn\nY\nY\n" | mysql_secure_installation
$ T# D3 a- g T7 U) d: X
% a# L) D ]% O/ q7 c; T1 k) O#控制节点 安装RabbitMQ
: v! }2 D5 M( i$ b& [yum install -y rabbitmq-server
& _) O" @3 g: |5 y
systemctl enable rabbitmq-server.service && systemctl start rabbitmq-server.service
+ h9 S j( U3 n" J
rabbitmqctl add_user openstack 123456
( {% n- e* h% nrabbitmqctl set_permissions openstack ".*" ".*" ".*"
; N( |1 v, o9 Z7 o+ x2 n
, B4 ~ m* |: O
#控制节点 安装Memcached
4 h, a& v, o4 r1 [* N4 i( g; Oyum install -y memcached python3-memcached
( [8 t* l% j+ e. q' p7 k: ~/ o+ S- C
sed -i "s/-l 127.0.0.1,::1/-l 127.0.0.1,::1,controller/g" /etc/sysconfig/memcached
; V! ^8 Q9 o9 s
systemctl enable memcached.service && systemctl start memcached.service
# F% m( l0 s( g9 c' B
3 |1 g0 r, l& r
#控制节点 安装Etcd
/ a' W9 n. B$ S* A
yum install -y etcd
1 e# ^! W! @" Y$ n- I7 |- t7 i6 Prm -f /etc/etcd/etcd.conf
0 [* [; p4 y9 L, e# Ctee /etc/etcd/etcd.conf <<-'EOF'
% |5 t8 S' J* V4 W
#[Member]
# E- f+ p( R( y- \" c9 TETCD_DATA_DIR="/var/lib/etcd/default.etcd"
! G1 u: o5 Q; p5 `( n6 ?$ [3 g+ AETCD_LISTEN_PEER_URLS="http://10.0.0.11:2380
" 9 w( f H* ?' X2 N
ETCD_LISTEN_CLIENT_URLS="http://10.0.0.11:2379
"
6 T5 A# m& C, D! U- lETCD_NAME="controller"
9 X7 A+ {2 d& W0 j+ z: N% Z- A4 P
#[Clustering]
4 G8 ~. X* X& X% n) g6 Q
ETCD_INITIAL_ADVERTISE_PEER_URLS="http://10.0.0.11:2380
"
' w" A: T; c# e# _% o1 vETCD_ADVERTISE_CLIENT_URLS="http://10.0.0.11:2379
" 9 W1 z* E6 L: o5 u3 a8 Y
ETCD_INITIAL_CLUSTER="controller=http://10.0.0.11:2380
"
/ N( h" p# Q4 c7 H' y0 mETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster-01"
/ }0 H8 q4 m) U6 G
ETCD_INITIAL_CLUSTER_STATE="new"
! J' W% L" U8 s2 u8 G7 Y- P$ f( e
EOF
( q* [: R: x }# g; w: Esystemctl enable etcd && systemctl start etcd
; C8 I1 G/ S8 k0 m1 X
& g. q5 x- c P+ D
#控制节点 安装Identity service
& c1 L, c/ q( C- @, I7 U
mysql -uroot -p123456 -e "CREATE DATABASE keystone"
1 b2 ^1 b; h: `$ P6 h
mysql -uroot -p123456 -e "GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'localhost' IDENTIFIED BY '123456'"
7 c) \' u* i T' J/ v0 T5 H; E: V
mysql -uroot -p123456 -e "GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'%' IDENTIFIED BY '123456'"
3 e3 Z9 D7 v! y# c, A6 c Z
yum install -y openstack-keystone httpd python3-mod_wsgi
! L* ?0 o5 `# [0 n
sed -i "556c connection = mysql+pymysql://keystone:123456@controller/keystone
" /etc/keystone/keystone.conf
+ Y4 [; l, a; M2 t6 d6 Jsed -i "2418c provider = fernet" /etc/keystone/keystone.conf
# |, y2 C9 \8 C
su -s /bin/sh -c "keystone-manage db_sync" keystone
* D; ^, x& n$ X" _) @. B* p0 m9 ^9 {
keystone-manage fernet_setup --keystone-user keystone --keystone-group keystone
+ R5 ~) Q9 q3 o2 q6 \* Y" V
keystone-manage credential_setup --keystone-user keystone --keystone-group keystone
J- W L8 r0 q; _/ i5 U
keystone-manage bootstrap --bootstrap-password 123456 \
' X. U% |4 z6 C b& p --bootstrap-admin-url http://controller:5000/v3/ \
2 c% B" ]' G% j& F! V --bootstrap-internal-url http://controller:5000/v3/ \
% r& h' r$ P* |) z4 N --bootstrap-public-url http://controller:5000/v3/ \
5 {* T" }5 {8 p! A/ G9 \" z --bootstrap-region-id RegionOne
* k" I# A+ z) A$ `# b( @9 R' h$ a9 jecho "ServerName controller" >> /etc/httpd/conf/httpd.conf
% y% C; {- |6 l# yln -s /usr/share/keystone/wsgi-keystone.conf /etc/httpd/conf.d/
% ?) F. T1 w2 ]9 u3 a! Osystemctl enable httpd.service && systemctl start httpd.service
$ e2 k e1 d. a
echo "export OS_USERNAME=admin" >> /etc/profile
3 e* D9 u2 u) a8 j3 r. @- ]2 h1 q# O
echo "export OS_PASSWORD=123456" >> /etc/profile
+ m2 V! @2 A9 L3 s! a4 r. i* |6 n
echo "export OS_PROJECT_NAME=admin" >> /etc/profile
# x" M" N! V* N# O) q' o+ O+ Techo "export OS_USER_DOMAIN_NAME=Default" >> /etc/profile
5 [& k3 |- e- P& P: h+ J" w
echo "export OS_PROJECT_DOMAIN_NAME=Default" >> /etc/profile
1 m4 J; t; n& R) E. J9 V) _) ^* {
echo "export OS_AUTH_URL=http://controller:5000/v3
" >> /etc/profile
: U+ q7 D; ~- h2 W9 V! \echo "export OS_IDENTITY_API_VERSION=3" >> /etc/profile
9 I: z1 y* W! \1 Z2 }1 o$ Ksource /etc/profile
1 c+ {5 x r8 m7 W9 n- popenstack project create --domain default --description "Service Project" service
( q% e: f6 G6 N3 [
7 \8 S$ I3 o' K0 O* j& Y& d' I#控制节点 安装Image service
% L* s% N$ ]# U# w) ?4 b9 t
mysql -uroot -p123456 -e "CREATE DATABASE glance"
0 O* c7 C5 R9 g# C/ l3 c7 v. Rmysql -uroot -p123456 -e "GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'localhost' IDENTIFIED BY '123456'"
; @! O) r1 V/ _$ A1 {0 Nmysql -uroot -p123456 -e "GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'%' IDENTIFIED BY '123456'"
- O) `! n4 C, V$ sopenstack user create --domain default --password 123456 glance
$ t' r- W) J7 k. k% O; I: v# z+ u
openstack role add --project service --user glance admin
* b, G2 N/ E3 e+ v, T) h$ n2 Eopenstack service create --name glance --description "OpenStack Image" image
% W$ E' n0 [* V* x' G, v$ }
openstack endpoint create --region RegionOne image public http://controller:9292
6 q* [9 M, T6 {: B7 v( l2 U& i' Iopenstack endpoint create --region RegionOne image internal http://controller:9292
' f! ~) _) c; H- E! Topenstack endpoint create --region RegionOne image admin http://controller:9292
e! _9 ^8 G; E9 J8 N
yum install -y openstack-glance
" V$ c, ^6 Y5 O: X7 l
sed -i "2062c connection = mysql+pymysql://glance:123456@controller/glance
" /etc/glance/glance-api.conf
& w5 g" _. M- E$ \: ~sed -i "5034c www_authenticate_uri = http://controller:5000
" /etc/glance/glance-api.conf ; c+ s$ G( o4 g$ f5 i
sed -i "5035c auth_url = http://controller:5000
" /etc/glance/glance-api.conf
% D3 C5 I2 j! _9 U! D! R( wsed -i "5036c memcached_servers = controller:11211" /etc/glance/glance-api.conf
5 N+ f6 w& Q: ?2 @) a; f0 ~# Q ~6 K, D5 M
sed -i "5037c auth_type = password" /etc/glance/glance-api.conf
( q$ ~7 X; p. @' Q0 N) n* O7 E8 R& c
sed -i "5038c project_domain_name = Default" /etc/glance/glance-api.conf
7 m: P. X; S9 B( Used -i "5039c user_domain_name = Default" /etc/glance/glance-api.conf
g- I5 i, g( z" r2 f
sed -i "5040c project_name = service" /etc/glance/glance-api.conf
! p2 [- G( W" L! N$ K" r9 ~sed -i "5041c username = glance" /etc/glance/glance-api.conf
& k& W4 h0 B- q% N- F6 x* I$ Z
sed -i "5042c password = 123456" /etc/glance/glance-api.conf
7 @5 F0 ?6 U. k) U
sed -i "5678c flavor = keystone" /etc/glance/glance-api.conf
. }3 z% {7 p9 p% e/ ssed -i "3413c stores = file,http" /etc/glance/glance-api.conf
9 @* ~ L7 U w; B* i/ V+ M
sed -i "3414c default_store = file" /etc/glance/glance-api.conf
& b* Q: D* _, ksed -i "3415c filesystem_store_datadir = /var/lib/glance/images/" /etc/glance/glance-api.conf
+ f5 u, J9 z) y) f
su -s /bin/sh -c "glance-manage db_sync" glance
. h1 g2 {* ~$ P% ~ J+ W$ j8 v! {
systemctl enable openstack-glance-api.service && systemctl start openstack-glance-api.service
. f6 E% U$ C* r1 i2 r$ O
6 I, s, u% A/ X+ o/ _6 W#控制节点 安装Placement service
1 \' |$ c2 r! ?0 Amysql -uroot -p123456 -e "CREATE DATABASE placement"
1 V+ ?, [% N' g/ Y$ Pmysql -uroot -p123456 -e "GRANT ALL PRIVILEGES ON placement.* TO 'placement'@'localhost' IDENTIFIED BY '123456'"
0 K4 b) G- @( k I
mysql -uroot -p123456 -e "GRANT ALL PRIVILEGES ON placement.* TO 'placement'@'%' IDENTIFIED BY '123456'"
% u4 N- s3 r+ ]( i4 D% q
openstack user create --domain default --password 123456 placement
( {' ]9 e/ q( C8 b- Y9 q+ R) V
openstack role add --project service --user placement admin
7 F/ u. R& E- R3 O
openstack service create --name placement --description "Placement API" placement
& A, S4 |# I2 S/ X8 X+ |8 M1 aopenstack endpoint create --region RegionOne placement public http://controller:8778
5 ?4 S- { ^5 H& f
openstack endpoint create --region RegionOne placement internal http://controller:8778
$ e6 ^ k% j0 T% T t# @5 popenstack endpoint create --region RegionOne placement admin http://controller:8778
+ `" M2 ^* P( G6 Y! eyum install -y openstack-placement-api
A7 M! Z0 a# l+ Q/ wsed -i "507c connection = mysql+pymysql://placement:123456@controller/placement
" /etc/placement/placement.conf 9 P8 V6 d. x1 K* A( D- N
sed -i "192c auth_strategy = keystone" /etc/placement/placement.conf
$ x8 I5 D7 M9 d d
sed -i "241c auth_url = http://controller:5000/v3
" /etc/placement/placement.conf / |! q) r% a: W5 H% f$ ^* ^ l
sed -i "242c memcached_servers = controller:11211" /etc/placement/placement.conf
* ]% I1 \) ^# P3 d* [6 c- }' D
sed -i "243c auth_type = password" /etc/placement/placement.conf
4 `' |2 `" y, E- X
sed -i "244c project_domain_name = Default" /etc/placement/placement.conf
; S6 t! A5 ?1 nsed -i "245c user_domain_name = Default" /etc/placement/placement.conf
* B0 ^0 p3 b' R& R6 b
sed -i "246c project_name = service" /etc/placement/placement.conf
! X5 @1 E: _+ E: xsed -i "247c username = placement" /etc/placement/placement.conf
3 {$ X( {$ I5 O
sed -i "248c password = 123456" /etc/placement/placement.conf
U0 h+ g2 W( W2 g$ {/ O8 Y+ _
su -s /bin/sh -c "placement-manage db sync" placement
0 [2 @% N5 q6 asystemctl restart httpd
4 l, y# q, D0 L" r6 Z
2 h' d: f0 E ~2 E; W8 b#控制节点 安装Compute service
# `$ v0 w9 l+ \, a% r0 F
mysql -uroot -p123456 -e "CREATE DATABASE nova_api"
1 P2 k8 C& _ l0 E8 tmysql -uroot -p123456 -e "CREATE DATABASE nova"
5 l" [" V' v" z3 s( ]$ @
mysql -uroot -p123456 -e "CREATE DATABASE nova_cell0"
$ A$ _, X. k- q* Q3 X( x4 J
mysql -uroot -p123456 -e "GRANT ALL PRIVILEGES ON nova_api.* TO 'nova'@'localhost' IDENTIFIED BY '123456'"
8 }0 f: w. |4 f9 ]mysql -uroot -p123456 -e "GRANT ALL PRIVILEGES ON nova_api.* TO 'nova'@'%' IDENTIFIED BY '123456'"
- s5 L& Y5 W1 {3 u( L0 U# E5 j
mysql -uroot -p123456 -e "GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'localhost' IDENTIFIED BY '123456'"
E! S+ Z- Z& {& H& j
mysql -uroot -p123456 -e "GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'%' IDENTIFIED BY '123456'"
Y p9 o2 \8 h3 Y3 D' ?# Lmysql -uroot -p123456 -e "GRANT ALL PRIVILEGES ON nova_cell0.* TO 'nova'@'localhost' IDENTIFIED BY '123456'"
, O' F4 }6 B, N) R' b, T% cmysql -uroot -p123456 -e "GRANT ALL PRIVILEGES ON nova_cell0.* TO 'nova'@'%' IDENTIFIED BY '123456'"
9 L/ l6 Z+ N! p0 `2 p Kopenstack user create --domain default --password 123456 nova
+ q( Q, W% f- b! \openstack role add --project service --user nova admin
) b% d6 r4 V# c; @# B0 b5 ~openstack service create --name nova --description "OpenStack Compute" compute
. e" G6 {: h" S( H0 {) y$ l
openstack endpoint create --region RegionOne compute public http://controller:8774/v2.1
( V5 S- K0 o% {" z5 y% K6 h5 R
openstack endpoint create --region RegionOne compute internal http://controller:8774/v2.1
* \! c. v$ d1 m- o9 h
openstack endpoint create --region RegionOne compute admin http://controller:8774/v2.1
, ]+ v& e6 K5 N% B7 z& f3 B
yum install -y openstack-nova-api openstack-nova-conductor openstack-nova-novncproxy openstack-nova-scheduler
- F& U4 S. s' S+ c* \sed -i "2c enabled_apis = osapi_compute,metadata" /etc/nova/nova.conf
J/ D9 I0 m: Q @- F3 K1 Q$ ]# |
sed -i "3c transport_url = rabbit://openstack:123456@controller:5672/
" /etc/nova/nova.conf
& z% \" Y0 B$ u8 d7 H& Xsed -i "4c my_ip = 10.0.0.11" /etc/nova/nova.conf
( _* R/ W1 m% L5 e6 i' z
sed -i "1079c connection = mysql+pymysql://nova:123456@controller/nova_api
" /etc/nova/nova.conf
& U& _4 V* H. f; a/ vsed -i "1622c connection = mysql+pymysql://nova:123456@controller/nova
" /etc/nova/nova.conf 3 \6 E6 i7 {4 O% L5 f
sed -i "872c auth_strategy = keystone" /etc/nova/nova.conf
5 I( Y6 h' Z. i, Z* l, e- r
sed -i "2561c www_authenticate_uri = http://controller:5000/
" /etc/nova/nova.conf
) t( J. ]- C6 zsed -i "2562c auth_url = http://controller:5000/
" /etc/nova/nova.conf
2 g; W4 e" I- D2 H* b0 l. M$ osed -i "2563c memcached_servers = controller:11211" /etc/nova/nova.conf
- o1 D) L9 b( @sed -i "2564c auth_type = password" /etc/nova/nova.conf
: i% r) _6 l& @4 ?, g, n' w
sed -i "2565c project_domain_name = Default" /etc/nova/nova.conf
0 a0 d! ~, O8 n8 q3 gsed -i "2566c user_domain_name = Default" /etc/nova/nova.conf
5 j+ q6 O$ E# w& c' _1 msed -i "2567c project_name = service" /etc/nova/nova.conf
~* T" X! d; d _+ w( V( s
sed -i "2568c username = nova" /etc/nova/nova.conf
6 Z) Z N: B; @
sed -i "2569c password = 123456" /etc/nova/nova.conf
. ^& f, _* V& k! zsed -i "5171c enabled = true" /etc/nova/nova.conf
+ X# C: I% \/ @! U9 T
sed -i '5172c server_listen = $my_ip' /etc/nova/nova.conf
& [8 T+ [$ m, @- F8 I' L3 N8 ]5 h' U2 M
sed -i '5173c server_proxyclient_address = $my_ip' /etc/nova/nova.conf
3 c: Q9 j3 ]4 ^; H* d4 N h
sed -i "1937c api_servers = http://controller:9292
" /etc/nova/nova.conf , F* q1 T0 z9 I* {; S+ P
sed -i "3571c lock_path = /var/lib/nova/tmp" /etc/nova/nova.conf
! s0 K5 t4 W& E, T3 vsed -i "4093c region_name = RegionOne" /etc/nova/nova.conf
3 ]" T# ~% w8 ~sed -i "4094c project_domain_name = Default" /etc/nova/nova.conf
3 c3 D6 w2 A: Z9 G( r, wsed -i "4095c project_name = service" /etc/nova/nova.conf
7 r7 T" S: J0 a; H( r+ ssed -i "4096c auth_type = password" /etc/nova/nova.conf
! j: v9 X, {9 F0 ?& j5 Ysed -i "4097c user_domain_name = Default" /etc/nova/nova.conf
3 s3 \; H% x! j% [: d `
sed -i "4098c auth_url = http://controller:5000/v3
" /etc/nova/nova.conf
9 Q( A$ A/ ]1 j2 j8 V% ised -i "4099c username = placement" /etc/nova/nova.conf
* n2 T" O1 @* N& C9 j/ y, J; \1 }sed -i "4100c password = 123456" /etc/nova/nova.conf
$ I; C: x, j* D, V. D0 \2 R
sed -i "4509c discover_hosts_in_cells_interval = 300" /etc/nova/nova.conf
! v$ Z' \% O; Vsu -s /bin/sh -c "nova-manage api_db sync" nova
3 N, a4 }2 b& p
su -s /bin/sh -c "nova-manage cell_v2 map_cell0" nova
$ ?& Y* r9 b& I9 M3 {8 A/ ] H& A, ~su -s /bin/sh -c "nova-manage cell_v2 create_cell --name=cell1 --verbose" nova
. A1 @ }, l7 M0 Nsu -s /bin/sh -c "nova-manage db sync" nova
0 Z s3 G l2 `4 b; |
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
! M* [+ {3 e9 K7 t$ v- ]3 ?
; x; X+ l2 l. p+ f$ s8 h
#计算节点 安装Compute service
$ w" q) i- Y5 {, Q9 f3 ?
yum install -y openstack-nova-compute
/ }% ^$ T* h9 ^/ {, V4 J) Csed -i "2c enabled_apis = osapi_compute,metadata" /etc/nova/nova.conf
l1 c0 G5 L# {! Y/ m% S
sed -i "3c transport_url = rabbit://openstack:123456@controller
" /etc/nova/nova.conf , f; Z. K( h9 ?
sed -i "4c my_ip = 10.0.0.31" /etc/nova/nova.conf
3 }+ K0 n4 a7 r: r, Ksed -i "872c auth_strategy = keystone" /etc/nova/nova.conf
3 i$ c' W. J6 Used -i "2561c www_authenticate_uri = http://controller:5000/
" /etc/nova/nova.conf 7 t& N* Z$ e" ?. T5 F
sed -i "2562c auth_url = http://controller:5000/
" /etc/nova/nova.conf
7 q$ ?( q( D" O- h9 Nsed -i "2563c memcached_servers = controller:11211" /etc/nova/nova.conf
* q2 I5 x9 l- A1 Qsed -i "2564c auth_type = password" /etc/nova/nova.conf
8 h+ n% D1 Q7 i/ l: R Ksed -i "2565c project_domain_name = Default" /etc/nova/nova.conf
: |/ k) u/ J" r" k; H+ ^
sed -i "2566c user_domain_name = Default" /etc/nova/nova.conf
/ i$ |( a# p. L/ d6 ased -i "2567c project_name = service" /etc/nova/nova.conf
1 r, N1 u, P' v: G
sed -i "2568c username = nova" /etc/nova/nova.conf
; z$ `, `0 s0 u( l+ p0 I
sed -i "2569c password = 123456" /etc/nova/nova.conf
( B/ B) H5 a4 q( w" |4 ]/ n; U
sed -i "5171c enabled = true" /etc/nova/nova.conf
! Q2 z; N, ^. W; x! P* D( y
sed -i "5172c server_listen = 0.0.0.0" /etc/nova/nova.conf
7 s2 L* N+ y- K, K# B2 ?/ _; |, K
sed -i '5173c server_proxyclient_address = $my_ip' /etc/nova/nova.conf
a) ?- U# \( P" v" k: o( wsed -i "5174c novncproxy_base_url = http://controller:6080/vnc_auto.html
" /etc/nova/nova.conf
' w u" w) c% ~% \$ ]sed -i "1937c api_servers = http://controller:9292
" /etc/nova/nova.conf
' J G" m6 _. z" y% R- fsed -i "3571c lock_path = /var/lib/nova/tmp" /etc/nova/nova.conf
7 g" J' g8 R' I \1 c- l/ ised -i "4093c region_name = RegionOne" /etc/nova/nova.conf
' x8 s8 c" T0 b/ p3 |9 b$ D# I
sed -i "4094c project_domain_name = Default" /etc/nova/nova.conf
' h& ^8 C; [" A. Zsed -i "4095c project_name = service" /etc/nova/nova.conf
) m2 d3 F }6 O$ ^sed -i "4096c auth_type = password" /etc/nova/nova.conf
6 v( w) a; T1 D. ]; E3 Fsed -i "4097c user_domain_name = Default" /etc/nova/nova.conf
- c1 _7 B& z$ ]4 {2 F1 S4 E8 p
sed -i "4098c auth_url = http://controller:5000/v3
" /etc/nova/nova.conf % `& m+ |: q2 ?! b L3 t- ^
sed -i "4099c username = placement" /etc/nova/nova.conf
. P+ G- u) [6 |- f. ~" Y5 L0 Xsed -i "4100c password = 123456" /etc/nova/nova.conf
& d# }) T6 k4 [
3 n5 @& F( j8 H0 h# r ~
#执行命令,查看是否支持CPU虚拟化,如果大于0则支持。
' e2 Z* L% R; d/ A9 ^2 k! S( f) f2 Oegrep -c '(vmx|svm)' /proc/cpuinfo
: P2 ?4 B4 ?3 L8 _! v/ I7 y" t
#如果不支持的话还需要执行下面的命令
, m; a4 W8 K! V5 r
sed -i "2722c virt_type = qemu" /etc/nova/nova.conf
. B5 s- A b$ O- F, ~2 p- }' o. P2 @( o
systemctl enable libvirtd.service openstack-nova-compute.service && systemctl start libvirtd.service openstack-nova-compute.service
H. K, e/ D3 C H- N0 T
1 @1 W. p$ U, ]9 ~5 S" z6 o7 J
#控制节点 计算节点从注册到发现会有延迟,根据discover_hosts_in_cells_interval 配置轮询发现时间,可以执行下面命令手动发现计算节点
8 c' y( t6 b/ c) ^* [( _$ C5 k
su -s /bin/sh -c "nova-manage cell_v2 discover_hosts --verbose" nova
' E5 J; l3 i7 V; O6 c# R2 x
! _3 A- V5 y9 m! ]: ]& ~1 F#控制节点 安装Networking service
5 j+ H, w2 O8 H" j K: pmysql -uroot -p123456 -e "CREATE DATABASE neutron"
. H' l) o) c1 t" Y8 f! u9 ^& X
mysql -uroot -p123456 -e "GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'localhost' IDENTIFIED BY '123456'"
- w% Z2 W# n- ~. c' P2 Rmysql -uroot -p123456 -e "GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'%' IDENTIFIED BY '123456'"
" I* Q# t" U# C8 z; P$ ]" Aopenstack user create --domain default --password 123456 neutron
: A: n7 o( J* g+ L2 x: M# ?( wopenstack role add --project service --user neutron admin
: T& N% O# }# u* C* Gopenstack service create --name neutron --description "OpenStack Networking" network
& L4 p% Y7 W" O' _1 x
openstack endpoint create --region RegionOne network public http://controller:9696
& B4 v, Z. J- r6 a; D m- R
openstack endpoint create --region RegionOne network internal http://controller:9696
3 Z% I4 s% j+ x5 K& Z; c2 t6 Yopenstack endpoint create --region RegionOne network admin http://controller:9696
6 O9 U8 `. _/ s. a
yum install -y openstack-neutron openstack-neutron-ml2 openstack-neutron-linuxbridge ebtables
8 e7 m0 a& A3 Q5 B1 ^" A4 @9 [& q#配置服务器组件
4 S0 D- \; s2 u* F& p
sed -i "2c core_plugin = ml2" /etc/neutron/neutron.conf
$ X; C7 ~! \5 j" k: w, X; a' }sed -i "3c service_plugins = router" /etc/neutron/neutron.conf
+ D. r+ g# U7 r) @sed -i "4c allow_overlapping_ips = true" /etc/neutron/neutron.conf
% p1 Y! T5 I1 ised -i "5c transport_url = rabbit://openstack:123456@controller
" /etc/neutron/neutron.conf D! v+ a' R( v; T9 F0 L# [ n+ \
sed -i "6c auth_strategy = keystone" /etc/neutron/neutron.conf
$ i+ D r( X: X) E" |sed -i "7c notify_nova_on_port_status_changes = true" /etc/neutron/neutron.conf
- L2 u# m1 M; _- R w; T& fsed -i "8c notify_nova_on_port_data_changes = true" /etc/neutron/neutron.conf
( A& a- L/ j6 @" {. f
sed -i "254c connection = mysql+pymysql://neutron:123456@controller/neutron
" /etc/neutron/neutron.conf
8 y4 S! J6 v" Used -i "359c www_authenticate_uri = http://controller:5000
" /etc/neutron/neutron.conf 5 O) e. S( {$ M2 M* { R
sed -i "360c auth_url = http://controller:5000
" /etc/neutron/neutron.conf
) m1 ^. p2 B8 X2 d- U2 @* Dsed -i "361c memcached_servers = controller:11211" /etc/neutron/neutron.conf
: d; S: G6 n: [, R' A" [2 N/ p
sed -i "362c auth_type = password" /etc/neutron/neutron.conf
$ |; m. j! U" Ised -i "363c project_domain_name = default" /etc/neutron/neutron.conf
1 e& ?7 t E; O: E
sed -i "364c user_domain_name = default" /etc/neutron/neutron.conf
3 [6 W. [( T! O! C! h! m9 \) m
sed -i "365c project_name = service" /etc/neutron/neutron.conf
1 L* o+ o" C- R$ D; E; W0 t$ Zsed -i "366c username = neutron" /etc/neutron/neutron.conf
. M/ O- q( v0 s) S' \sed -i "367c password = 123456" /etc/neutron/neutron.conf
( F1 a) }; l- v# n0 b4 g; Hsed -i "521c lock_path = /var/lib/neutron/tmp" /etc/neutron/neutron.conf
) w7 M: l4 o( z: r* \echo "[nova]" >> /etc/neutron/neutron.conf
+ x( O5 i" v$ B5 c$ C
echo "auth_url = http://controller:5000
" >> /etc/neutron/neutron.conf # ^& ?/ C0 |$ h3 F7 Z5 _4 i" z
echo "auth_type = password" >> /etc/neutron/neutron.conf
1 U4 ?5 K) w W6 [* M/ P# Becho "project_domain_name = default" >> /etc/neutron/neutron.conf
I# T0 a1 l% Zecho "user_domain_name = default" >> /etc/neutron/neutron.conf
: M! I1 {6 l+ B; k
echo "region_name = RegionOne" >> /etc/neutron/neutron.conf
. r4 I1 L7 ]* a% X5 \$ B/ p9 O1 Zecho "project_name = service" >> /etc/neutron/neutron.conf
+ g" {6 k0 R/ x8 o
echo "username = nova" >> /etc/neutron/neutron.conf
! [* w) {3 ?4 b" d4 L7 ]echo "password = 123456" >> /etc/neutron/neutron.conf
/ G1 I; b9 { L#配置Modular Layer 2 (ML2) plug-in
) @+ U7 v: ?6 ]+ h4 X5 \echo "[ml2]" >> /etc/neutron/plugins/ml2/ml2_conf.ini
+ w- Q8 G; P% A. q8 n# v/ k8 R* A5 ?
echo "type_drivers = flat,vlan,vxlan" >> /etc/neutron/plugins/ml2/ml2_conf.ini
2 W$ o# u" Q9 H9 X' e
echo "tenant_network_types = vxlan" >> /etc/neutron/plugins/ml2/ml2_conf.ini
0 A8 r2 Q( e* kecho "mechanism_drivers = linuxbridge,l2population" >> /etc/neutron/plugins/ml2/ml2_conf.ini
. V2 f# \: L: ^# j& q- P
echo "extension_drivers = port_security" >> /etc/neutron/plugins/ml2/ml2_conf.ini
5 U/ I- S5 K: Z8 n6 Decho "[ml2_type_flat]" >> /etc/neutron/plugins/ml2/ml2_conf.ini
# p3 _0 Q. N* X Q' N% |echo "flat_networks = provider" >> /etc/neutron/plugins/ml2/ml2_conf.ini
# z8 ^9 f" r7 P& g; Z3 `7 O8 K5 pecho "vni_ranges = 1:1000" >> /etc/neutron/plugins/ml2/ml2_conf.ini
! c4 c" d5 O1 O- p
echo "[securitygroup]" >> /etc/neutron/plugins/ml2/ml2_conf.ini
' e$ M$ H# ?( \echo "enable_ipset = true" >> /etc/neutron/plugins/ml2/ml2_conf.ini
5 m) d8 m3 y; C
#配置Linux bridge agent
3 U& f1 a- `& H& b) s
echo "[linux_bridge]" >> /etc/neutron/plugins/ml2/linuxbridge_agent.ini
/ k& V% I/ {* q, f#eth1为另外第二张网卡
. Z( [4 F5 t g% uecho "physical_interface_mappings = provider:eth1" >> /etc/neutron/plugins/ml2/linuxbridge_agent.ini
" ~+ V ?/ A, [/ M8 G) d8 I) X: Y
echo "[vxlan]" >> /etc/neutron/plugins/ml2/linuxbridge_agent.ini
% l& h, }' A* F' |( j' j# Z
echo "enable_vxlan = true" >> /etc/neutron/plugins/ml2/linuxbridge_agent.ini
+ a: s8 B9 I- T1 C# L#10.0.0.12为第二张网卡的IP
2 B' g) m0 H8 j: q+ Oecho "local_ip = 10.0.0.12" >> /etc/neutron/plugins/ml2/linuxbridge_agent.ini
4 \6 X: e6 P! n/ W- j* \1 c6 }echo "l2_population = true" >> /etc/neutron/plugins/ml2/linuxbridge_agent.ini
+ O& ?. P' q; `
echo "[securitygroup]" >> /etc/neutron/plugins/ml2/linuxbridge_agent.ini
3 }, v9 B1 R; T. _& @
echo "enable_security_group = true" >> /etc/neutron/plugins/ml2/linuxbridge_agent.ini
0 v/ c* E7 ]! G+ _2 g/ X. L9 E( ?: a
echo "firewall_driver = neutron.agent.linux.iptables_firewall.IptablesFirewallDriver" >> /etc/neutron/plugins/ml2/linuxbridge_agent.ini
' H2 y7 u3 k/ C) {9 p0 s#配置layer-3 agent
) A+ p3 H3 Z d. Ksed -i "2c interface_driver = linuxbridge" /etc/neutron/l3_agent.ini
% r3 }: y9 t. |4 Z. J#配置DHCP agent
( e1 n2 Y: w" V' _9 K) Y3 t; U
sed -i "2c interface_driver = linuxbridge" /etc/neutron/dhcp_agent.ini
( W/ @1 M1 l# c3 k
sed -i "3c dhcp_driver = neutron.agent.linux.dhcp.Dnsmasq" /etc/neutron/dhcp_agent.ini
. }0 L- W, c& E, W, C& L7 J# O
sed -i "4c enable_isolated_metadata = true" /etc/neutron/dhcp_agent.ini
- m2 L1 |" V( s3 W3 l
#配置metadata agent
b! H, d p7 a- Gsed -i "2c nova_metadata_host = controller" /etc/neutron/metadata_agent.ini
$ W$ i! d, W' T! s" \, G, r0 L# c
sed -i "3c metadata_proxy_shared_secret = 123456" /etc/neutron/metadata_agent.ini
7 I1 v/ s* d9 T
#配置计算服务使用网络服务
3 D4 s$ Y4 m h$ A8 W: w
sed -i " 3334c auth_url = http://controller:5000
" /etc/nova/nova.conf ; E! a- u5 c: @* W9 y! T
sed -i " 3335c auth_type = password" /etc/nova/nova.conf
) Y Z/ _9 y: o, f. O
sed -i " 3336c project_domain_name = default" /etc/nova/nova.conf
; z' f/ @) A0 Y1 V7 B3 s0 p" F% tsed -i " 3337c user_domain_name = default" /etc/nova/nova.conf
8 u5 m( F7 L- ?# G( |/ K3 {8 q
sed -i " 3338c region_name = RegionOne" /etc/nova/nova.conf
) r' [: w, O; Zsed -i " 3339c project_name = service" /etc/nova/nova.conf
+ t: v4 D4 q1 p5 T0 m- @
sed -i " 3340c username = neutron" /etc/nova/nova.conf
, q( g! [4 f+ Q3 t
sed -i " 3341c password = 123456" /etc/nova/nova.conf
6 f/ p$ W M& q+ n! p2 Vsed -i " 3342c service_metadata_proxy = true" /etc/nova/nova.conf
; u; ?9 l/ g: j5 `; Wsed -i " 3343c metadata_proxy_shared_secret = 123456" /etc/nova/nova.conf
% x- P2 X, S* d3 r
ln -s /etc/neutron/plugins/ml2/ml2_conf.ini /etc/neutron/plugin.ini
: O- |6 ~" z( V
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
2 ~5 {+ U7 W# ^: z
systemctl restart openstack-nova-api.service
, i4 M1 K% @7 U6 Y
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
- [) X" h: V6 N4 jsystemctl enable neutron-l3-agent.service && systemctl start neutron-l3-agent.service
* `" P- s( x0 q
0 I# Y; ~) ^: i. w, O" V#计算节点 安装Networking service
; D! {6 d' E: F2 z- n4 f9 nyum install -y openstack-neutron-linuxbridge ebtables ipset
' U9 d' K5 K; R. {7 dsed -i "2c transport_url = rabbit://openstack:123456@controller
" /etc/neutron/neutron.conf 7 y& }! \/ x: a' v" t" d
sed -i "3c auth_strategy = keystone" /etc/neutron/neutron.conf
/ ~' B9 E8 |$ `. `- b
sed -i "359c www_authenticate_uri = http://controller:5000
" /etc/neutron/neutron.conf , C4 J- v3 u" a; \$ ~
sed -i "360c auth_url = http://controller:5000
" /etc/neutron/neutron.conf 4 w* X! }# T$ g; O% a# G( X+ x
sed -i "361c memcached_servers = controller:11211" /etc/neutron/neutron.conf
( R" s2 E& } U2 X; C& C( O+ ~
sed -i "362c auth_type = password" /etc/neutron/neutron.conf
' q9 Y0 g4 a* ~
sed -i "363c project_domain_name = default" /etc/neutron/neutron.conf
( `' J9 M( ?8 `sed -i "364c user_domain_name = default" /etc/neutron/neutron.conf
, X7 @( O, Q6 Z3 Rsed -i "365c project_name = service" /etc/neutron/neutron.conf
' M# Z# j0 l4 ]# E' i9 T( ssed -i "366c username = neutron" /etc/neutron/neutron.conf
' y% v1 w6 Q2 C1 \1 d1 }
sed -i "367c password = 123456" /etc/neutron/neutron.conf
* f C" _+ a0 J. j# \
sed -i "521c lock_path = /var/lib/neutron/tmp" /etc/neutron/neutron.conf
9 j6 L3 R! X ~# V) `( ~$ }
echo "[linux_bridge]" >> /etc/neutron/plugins/ml2/linuxbridge_agent.ini
* Z4 N& d) A; K2 q+ h9 \#eth1为另外第二张网卡
# \, E* _+ H, m4 T" }echo "physical_interface_mappings = provider:eth1" >> /etc/neutron/plugins/ml2/linuxbridge_agent.ini
/ D" V4 q0 u7 y$ K( Z. u
echo "[vxlan]" >> /etc/neutron/plugins/ml2/linuxbridge_agent.ini
" `/ l% G( x. [3 y2 N5 M( fecho "enable_vxlan = true" >> /etc/neutron/plugins/ml2/linuxbridge_agent.ini
3 L9 j3 |" H f! g+ e" v3 e
#10.0.0.32为第二张网卡的IP
9 ^! {1 Z3 r! s8 C
echo "local_ip = 10.0.0.32" >> /etc/neutron/plugins/ml2/linuxbridge_agent.ini
, b! V3 T4 d' ^, c
echo "l2_population = true" >> /etc/neutron/plugins/ml2/linuxbridge_agent.ini
# B) b$ I( R$ K1 X Kecho "[securitygroup]" >> /etc/neutron/plugins/ml2/linuxbridge_agent.ini
5 B( K. }$ ^' a! J; D# `
echo "enable_security_group = true" >> /etc/neutron/plugins/ml2/linuxbridge_agent.ini
& E; H( w: T& w8 F$ g! [* Uecho "firewall_driver = neutron.agent.linux.iptables_firewall.IptablesFirewallDriver" >> /etc/neutron/plugins/ml2/linuxbridge_agent.ini
0 f D2 }8 k' c1 d/ b
#配置计算服务使用网络服务
5 ^( n5 `9 b0 X$ ?
sed -i " 3334c auth_url = http://controller:5000
" /etc/nova/nova.conf A4 D- [) E5 ?
sed -i " 3335c auth_type = password" /etc/nova/nova.conf
2 H! g7 y1 o% }$ R0 C7 Q# S' a
sed -i " 3336c project_domain_name = default" /etc/nova/nova.conf
4 R) B# e+ s3 Q# `% ssed -i " 3337c user_domain_name = default" /etc/nova/nova.conf
, L" _& n# J1 c2 k) C! q* E5 B6 p% ^sed -i " 3338c region_name = RegionOne" /etc/nova/nova.conf
- N) w; e3 X' s, `1 f5 I: i# Bsed -i " 3339c project_name = service" /etc/nova/nova.conf
; |# p* x. T8 H, ^/ g. u
sed -i " 3340c username = neutron" /etc/nova/nova.conf
! ~3 t( h) E. A! |) U. Tsed -i " 3341c password = 123456" /etc/nova/nova.conf
, N7 z8 j l2 p2 H3 |systemctl restart openstack-nova-compute.service
" \0 V, B' v2 q: `: F3 ssystemctl enable neutron-linuxbridge-agent.service && systemctl start neutron-linuxbridge-agent.service
) [+ Q/ m" p; v7 e. k5 k
' r8 ?! _) \( j: k
#控制节点 安装Dashboard
7 i R/ x4 o0 G( `! l
yum install -y openstack-dashboard
. B' d. F. E+ g. }$ } y% psed -i '118c OPENSTACK_HOST = "controller"' /etc/openstack-dashboard/local_settings
6 S: R! p" ?' `% Z! r- q o# A# L) b
sed -i "39c ALLOWED_HOSTS = ['*']" /etc/openstack-dashboard/local_settings
! t# d& ]6 C7 G0 d8 Q0 R4 D1 ?sed -i "104c SESSION_ENGINE = 'django.contrib.sessions.backends.cache'" /etc/openstack-dashboard/local_settings
- S F3 V* d1 o6 ^0 w o6 Q J3 ^
sed -i "94c CACHES = {" /etc/openstack-dashboard/local_settings
" } T" z @; K" u1 M6 x R1 |sed -i "95c 'default': {" /etc/openstack-dashboard/local_settings
4 O2 B0 H& I5 lsed -i "96c 'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache'," /etc/openstack-dashboard/local_settings
9 M2 L, {4 a" l! L$ X+ x* E
sed -i "97c 'LOCATION': 'controller:11211'," /etc/openstack-dashboard/local_settings
( g: m. G) X7 F/ I, t+ d
sed -i "98c }" /etc/openstack-dashboard/local_settings
4 M6 u5 a( F: T+ F3 L
sed -i "99c }" /etc/openstack-dashboard/local_settings
( g( u0 H7 S/ i9 i Y: F; x
sed -i '119c OPENSTACK_KEYSTONE_URL = "http://%s:5000/v3
" % OPENSTACK_HOST' /etc/openstack-dashboard/local_settings
6 f" B, w+ z$ ^, \echo 'OPENSTACK_KEYSTONE_MULTIDOMAIN_SUPPORT = True' >> /etc/openstack-dashboard/local_settings
! Q9 v' ~6 O8 P$ ~- E% ^. u& d1 q7 R6 b. Lecho 'OPENSTACK_API_VERSIONS = {' >> /etc/openstack-dashboard/local_settings
- m% M% h4 j3 n0 b7 F" Secho ' "identity": 3,' >> /etc/openstack-dashboard/local_settings
* X. t, e4 g' Z1 i
echo ' "image": 2,' >> /etc/openstack-dashboard/local_settings
$ N" u1 |7 p ?1 b4 A% y
echo ' "volume": 3' >> /etc/openstack-dashboard/local_settings
6 D. m8 [" @& a; Y8 e& |9 X1 ~. G0 N2 eecho '}' >> /etc/openstack-dashboard/local_settings
( u" b) R* _& M$ Necho 'OPENSTACK_KEYSTONE_DEFAULT_DOMAIN = "Default"' >> /etc/openstack-dashboard/local_settings
' w5 i8 d, {. t
echo 'OPENSTACK_KEYSTONE_DEFAULT_ROLE = "user"' >> /etc/openstack-dashboard/local_settings
0 E) z" R+ A m& M. ]. [5 H! K6 h3 L
sed -i '123c TIME_ZONE = "Asia/Shanghai"' /etc/openstack-dashboard/local_settings
4 M# f' s! g4 q9 {1 decho "WEBROOT = '/dashboard/'" >> /etc/openstack-dashboard/local_settings
: _9 \% ~% Y* C$ W# v; E
echo 'WSGIApplicationGroup %{GLOBAL}' >> /etc/httpd/conf.d/openstack-dashboard.conf
) Z9 M% x+ ?8 |7 u8 ?systemctl restart httpd.service memcached.service
: d3 `9 j/ [ ]* n
! W, c1 S X. u# w0 c4 L3 i#安装完成,可访问http://10.0.0.11/dashboard/
查看 7 T* v9 Z9 t, `