找回密码
 注册
查看: 729|回复: 1

CentOS8 stream版本 上使用kolla-ansible安装OpenStack(Ussuri)

[复制链接]

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
发表于 2023-4-4 15:20:58 | 显示全部楼层 |阅读模式
前期准备4 O$ ?! D9 C% g+ i1 Y# K% `. ^1 V& u
本文环境7 U/ s/ z, d. Q7 V2 }0 ?" Z
控制节点:controller
6 ]" w5 F8 n. b7 k, q
) ^+ a4 q- R  i2 @0 v1 T计算节点:node1
3 @4 k" l6 G  Y7 ]) w# V
3 @, F* j6 e* H8 o  W# Q: B) WOpenStack版本:Ussuri' s1 H/ }) Y& Q0 }
, D4 i( F& P& T4 Y) E* T
操作系统:CentOS 8 stream
( }7 h4 F" u; f* e1 n( R7 v: X& T& u
最小配置要求
3 r" G/ [9 F) Q7 Y8G内存,40G硬盘,三网卡. K0 [% h4 p2 T# J
7 M" U, f9 ^% w9 u. v5 S7 @  M; K
更改主机名8 S. w. c8 |! o) q
控制节点6 G& n+ ^  y5 F2 B9 c8 W
7 m2 N. t; U2 @8 [
hostnamectl set-hostname controller
  ~2 M9 Z' p4 C' s  H! r0 w计算节点1 E" x7 m" q$ p, H* x& S
# G8 k! V) c8 ~1 k% N
hostnamectl set-hostname node1
! _8 G& U0 `9 q主机名解析! s$ D- `) U9 ?; e2 y, n0 J: k' t
编辑/etc/hosts,增加条目(所有节点)
. [$ b9 @4 ?% R; \
' A9 n& G9 Y. t% N! \3 ~$ r2 O! q192.168.13.133 controller
! z' S1 i, o/ [( M9 ?6 N7 \5 a192.168.13.134 node1% {& W' K  P. v+ E
创建cinder-volumes卷组(可选,用于LVM)
+ L) |" h5 b% E+ e所有计算节点,准备一个分区用来创建vg,这里创建一个sdb1的主分区
- o8 n! J& S/ Z) }# l& `/ |2 R! I$ ?2 J" V" F% u: ]. E
fdisk /dev/sdb
" L$ u! G0 v+ l- B  t9 Y9 N( z- B& g  n -> ... -> w  # 依次选择
  u) i; Z' X, H
5 T: {* |' ?# h// 刷新分区表 " j0 ?6 `4 h- j  D
partprobe
% \- Y; c/ X1 n5 s4 T1 c, F% C3 z! o: j  y* y! y
// 创建pv
, K& z. q" {" o# Dpvcreate /dev/sdb1
& s+ x% g0 Y- r/ S- Z& E8 [0 g1 }) m& ^/ p* E1 ?
// 创建vg
) `, H* M4 g' K, Z, T! vvgcreate cinder-volumes /dev/sdb1
9 ?5 M' W; z$ j" j7 w安装依赖, ]4 K' J, p& p" g
cd /etc/yum.repos.d/ ! y* v" c, w$ U9 J) f+ {1 Z
mv CentOS-Base.repo CentOS-Base.repo.bak
, a/ q$ B- @1 ?0 }  ^wget -O CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-8.repo , L  f! }. @. ]' D6 T

' ]: K% g# E+ Y7 ^/ G1 ?3 S4 o; Qdnf clean all / {: A( A4 u4 ~  g# k3 }6 D( w4 c
dnf makecache5 Y1 z( g" T$ A- i
dnf install epel-release   c7 Z1 Y/ E$ }3 l4 v1 Q# {
dnf update 8 \( ~3 v; S) l" t& v( L, S

: \& z# L# P5 d3 ^+ J3 R9 F% ^dnf install -y make gcc zlib-devel openssl-devel python3-devel libffi-devel python3-libselinux6 r$ T1 o  m/ t, M, I
1. 安装Python3' N( M1 G  N, J* q6 ]! J  e. S
, E) ]7 ?7 \, {2 w: T/ {5 l
wget https://www.python.org/ftp/python/3.7.9/Python-3.7.9.tgz
: E4 p6 M  k6 H& {+ t& Ftar -xf Python-3.7.9.tgz
+ t; g* s% V  n3 [3 }9 x& qcd Python-3.7.9/ ) ~' v' j- n( m9 G$ z3 I
./configure --with-ssl - b! ?/ Y" q  w0 ]6 I+ G
make -j 4 && make install
2 i$ t+ L1 b: \+ m6 w2. 准备Python虚拟环境(推荐,非必须)
. K( G& u3 D1 X
: B$ o( ]3 D3 G$ @5 v创建虚拟环境
9 R& i5 W. B9 r) A; U  V/ D- b# // (/PATH/TO/venv,这里使用/usr/lib/python3/venv)
; m8 M7 d$ q) p, V4 i0 V6 Xpython3 -m venv /usr/lib/python3/venv 0 ?0 }+ y+ N( i' V$ `
source /usr/lib/python3/venv/bin/activate
+ [! T/ _+ @; k5 A8 Y1 V9 l升级pip: [" h; `! c6 P  Q! u
pip install -U pip6 {2 F* E, k' {) w* N! P! p
如果启用了虚拟环境,后续所有操作需要在虚拟环境下进行) R5 n; Q- f( ], M1 s5 i2 B8 Q

1 k3 ]+ j6 y- }% |, W, Z' I& P参考:
3 H: d- {3 W/ R
, j* U- _& k' ^. ohttps://docs.openstack.org/kolla ... l-environments.html6 [$ N! B' K4 ~

- _+ ?3 ^+ q) w3. 安装docker) P" N7 R; P$ ^9 x

5 O% ^. \7 ~- R; M6 D* {) V( I$ o" c安装docker服务(所有节点)
5 ~$ Y; Z8 @8 e$ C4 ^1 Ecd /etc/yum.repos.d/
/ Y9 J# M- \$ Dwget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo 0 T7 W3 }0 {0 ]0 {- s

7 @( m9 A, k: X4 u// CentOS8 需要升级containerd.io版本
. u! v! K2 B" |( bdnf install https://mirrors.aliyun.com/docke ... -3.1.el7.x86_64.rpm
2 m, Q4 l) }5 {2 q# vdnf install docker-ce docker-ce-cli * L/ F9 o8 Z2 i: O, g

2 d* f3 u3 e0 I& j  ~( Jsystemctl enable docker.service
* z$ ?) o+ v( I9 Nsystemctl start docker.service
: P. t# N' K  T. W9 x7 ?; H镜像加速! K) ]$ e+ b0 o: b; W3 p8 i6 Z
执行以下命令,修改docker源+ `. m- x7 \% m% S4 N
tee /etc/docker/daemon.json <<-'EOF'
/ ?7 s  r: c& ~/ G{
, Y  L; N4 c4 H. b2 o& n4 V    "registry-mirrors": ["https://reg-mirror.qiniu.com", "https://hub-mirror.c.163.com/"] 6 g: b6 s! \5 w! p2 M( M
} / |: Y9 m5 p' A" e, P% i+ {
EOF
- y! W% ?$ c& L& X. {安装python docker模块* I. u4 @- s6 F3 p, ?0 t
pip install docker
  W) C4 Q. A+ Y" T+ ^4. 安装kolla-ansible
. C2 G1 |$ Q$ O" _
: k+ J/ g" ~: ]安装ansible
4 @! m8 B! y5 p/ S  ^$ Fdnf install ansible& g& l* v$ n; k
安装kolla-ansible* x' n2 L& e1 q/ U- h& f
可选择源码安装,或pip安装,这里使用pip
+ k+ I' a3 b1 S4 c4 ^( M7 |& S1 f- i$ f9 G, i2 s
pip install 'ansible<2.10'
  S) b3 \4 x: ]- A! gpip install kolla-ansible
# _" Z5 i! S7 A% Q创建kolla配置目录
, l8 A% P& Z* Wsudo mkdir -p /etc/kolla 3 c$ S1 |: P$ \5 N4 _2 E. k; Q- T
sudo chown $USER:$USER /etc/kolla
5 B' c, z- n2 m3 F拷贝yml配置文件8 q# }# i0 x, R+ m: T1 }) M
cp -r /usr/lib/python3/venv/share/kolla-ansible/etc_examples/kolla/* /etc/kolla3 Y, I# B6 h9 C4 b0 {. ~& ?
拷贝all-in-one、multinode 清单文件到当前目录(任意工作目录,这里是在root目录下)
( _# p- K2 ~0 k+ @. n3 B) ?) x- Fcd /root
0 ]5 c& B- w, p( z- h7 g' Bcp /usr/lib/python3/venv/share/kolla-ansible/ansible/inventory/* .% c! S$ t+ P1 u
编辑/etc/ansible/ansible.cfg* G/ _0 T/ ?9 G1 v2 q
[defaults]
3 D) U. g, u: [+ |- ?7 Bhost_key_checking=False
: j' O/ [3 H$ U7 N( Hpipelining=True 5 U$ u% L* @" K
forks=100
+ p: b0 V, A5 Y4 H5. ansible初始配置
  w+ E7 X  t+ Y, ~/ R0 f  @+ ]" Z8 M8 K. A  T
  a" P) o: f5 r7 Y. k" q/ V& h. L: @' |4 f打开当前目录multinode文件; C0 o: t' {, [
修改IP、用户名和密码,并对需要安装的内容进行调整( G# [+ W; ^4 P5 s/ E  |
[control] / N* S1 o: i) s  u% {& X
10.0.0.[10:12] ansible_user=root ansible_password=123456 ansible_become=true
# e- |" H& j5 b1 m# Ansible supports syntax like [10:12] - that means 10, 11 and 12. 2 A$ ~) H& e9 v: [
# Become clause means "use sudo". # Y0 R9 Z8 N- t) N6 C

$ Y# X2 Q3 V8 J1 k( S[network:children]
5 Y) ?8 o8 Y6 Q! @3 Y7 }control
) J# o2 ^6 Q  w; @# when you specify group_name:children, it will use contents of group specified. % a( I7 ~) `' [8 ~, |5 t

2 M. l9 }) v! V/ s- m7 L[compute]
$ o' u* u8 c9 A- q10.0.0.[13:14] ansible_user=root ansible_password=123456 ansible_become=true
4 @/ o  F" y- U  z# Z9 v9 v- B
5 |" z" `+ F" N- X2 v[monitoring] 10.0.0.10 ; R/ {  O& j, p6 Z9 z
# This group is for monitoring node.
1 i+ B: O1 V% R6 c( j. m% y. q# Fill it with one of the controllers' IP address or some others. 1 d& J5 C' F3 A

9 L; Y) P! F3 B0 b" y% ?[storage:children] compute [deployment] localhost ansible_connection=local become=true # use localhost and sudo4 i) B+ d# r! ]5 f1 l6 ]
; C, v' V* L) L
.. (略)
/ }% I( u$ I3 _3 d+ R, I检查inventory配置
! u7 i; ~, K. U2 t% `ansible -i multinode all -m ping
  l4 c0 h% a6 i, {3 {6. 配置passwords.yml) v  ?9 [1 B2 \, d
$ j) {0 o5 m5 A7 g3 B$ e+ J
/etc/kolla/passwords.yml里的初始密码为空,通过下面命令生成随机密码
6 B' ^( A/ F8 l) p( P# P- v/ M( n+ d1 @) W
kolla-genpwd6 P( s" g1 [' q' _# ~
此时,如有需要可以手动编辑passwords.yml文件,更改组件初始密码,如keystone_admin_password。
7 N- b8 I" K: L- I- d: N+ N; l3 b" ?4 n1 Y
7. 配置global.yml" E* l, \* ~" r

1 p. {1 Y* W9 D7 Jglobal.yml是Kolla-Ansible的主配置文件,编辑/etc/kolla/globals.yml文件。
3 z% Y  S; ?+ {3 w# L: d/ n; q% N. o# j% J0 R2 f
修改镜像选项
: g: d/ Z5 o. Y1 g5 b% U2 Lkolla_base_distro:默认为"centos",如果是其他发行版需要手动更改。
/ n" g, `* [: t, U8 P4 o2 X% M/ o* k' j  I4 |5 c6 t
kolla_install_type:默认为”binary“. X2 Z: @$ F' I6 X7 o0 d

) C+ W4 m! x2 @. {9 V9 J! V+ f! g" n修改网络选项9 H! W# n/ e! K, E4 b# B) l
network_interface:管理网络接口,默认为“eth0”
9 T" Y4 s, n3 T! b+ [* L# v7 F  k
# V1 {8 m/ D7 B; q6 Eneutron_external_interface:Neutron外部网络,可以是vlan或flat类型。需要激活并且不配置IP。
& O6 b, ^  |0 I$ W, g) Q' O4 [
+ J% C, a) n3 @$ [kolla_internal_vip_address:管理的浮动IP,连接到network_interface,需要设置一个管理网络中未被使用的地址。
8 r7 }3 z( B, R  u
& w; p+ u0 [0 s% K6 C+ i9 G--enable_*:额外启用的服务,如enable_cinder。- V7 }6 l: i4 c0 [

! K$ x) H0 G* z! g: u--enable_cinder_backend_*: 在启用了cinder后需要至少启用一个cinder后端,如enable_cinder_backend_lvm。. Y( u: k' w* y$ ]% s5 p
5 S3 M6 p  D9 ?: ^! K5 i
8. 部署
8 d8 _2 \8 J* e4 q2 \. ]* P  v' o
+ v1 R# v  k) e6 p确保libvirtd服务停止
/ U% i1 Q0 |# E% O5 v0 K- ^systemctl stop libvirtd
3 N9 {" {2 A# H9 k7 |! r检查kolla部署依赖
' y1 z9 a" [+ \- l) G1 Lkolla-ansible -i ./multinode bootstrap-servers -e ' ansible_python_interpreter=/etc/kolla/venv/bin/python3'
, H9 N! W* ~$ k) `/ ^5 D0 `7 p-e 表示加的一些配置,这里指定使用的python解释器# v# U) l/ }7 r- P, m

2 y  M- Q7 @  T- {主机预部署检查/ w. k  y/ n# t0 \+ |) _
kolla-ansible -i ./multinode prechecks -e 'ansible_python_interpreter=/usr/lib/python3/venv/bin/python3'. n" a5 F+ ^% z7 F1 A% [1 A! }
安装
& ]& N3 t# g, \4 A: Rkolla-ansible -i ./multinode deploy -e 'ansible_python_interpreter=/usr/lib/python3/venv/bin/python3'
  |  A' D) L3 Y) Z. L: ]" }* B+ e4 U( `, Q# ?
9 B: x) x3 o$ w, c! `4 \3 B

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
 楼主| 发表于 2023-4-4 15:22:43 | 显示全部楼层
目标
% \- {. a# B3 D, o9 }0 Z/ B部署OpenStack官方提供的Simple Configuration示例配置中的Web Application和Container Optimized两个组件配置清单。5 I# r0 d4 U% D

5 f0 W- L# @6 q2 h' l; L6 p- G8 y! o其中包括; g' M* z8 S6 J8 `: S, T% q3 o

3 v! i# p& h8 [: c; i* vWeb Application:Cinder(块存储)、Glance(镜像服务)、Keystone(身份认证)、Horizon(仪表盘)、Neutron(网络服务)、Nova(计算服务)、Trove(数据库服务)、Swift(对象存储)、Ceilometer(数据收集)、Heat(编排服务)8 a3 e" r# H; D3 q+ h8 O* ~% s2 n
Container Optimized(增量):Kuryr(容器网络集成)、Barbican(密钥服务)、Designate(DNS服务)、Manila(文件存储)、Octavia(负载均衡器)、Placement(资源监控)- L5 R1 G8 j; Y) l) S
更多OpenStack landscape景观图可以参考官方或者 OPENSTACK LANDSCAPE云原生景观 | OpenStack地图_JamesCurtis的博客-CSDN博客) D5 p4 F  O4 S4 a8 z* J3 O
; S% G( @7 s4 o) V8 R
支持的操作系统+ b4 @+ j, X6 u( {* v
注意:不再支持 CentOS 7 作为主机操作系统。Train 版本同时支持 CentOS 7 和 8,并提供了迁移路径。有关迁移到 CentOS 8 的信息,请参阅Kolla Ansible Train 文档。
; V/ ~& u: p' `2 D5 }
9 ]4 @* v) w7 J  m/ gyoga版本支持以下操作系统:; R8 W2 m$ a3 `# q9 H6 I. m
) ]. u" |& W  d2 m/ m- {! Y
CentOS Stream 8
$ E( Y& j( m6 Y* x
: v& A% S0 {2 j/ ]$ H$ {/ @Debian Bullseye (11)
+ P3 ^2 w1 \8 o5 X5 I
3 d/ o) t+ g* x' |' ZopenEuler 20.03 LTS SP2# ~! ^9 G& H, S+ c8 U' C
5 d* \5 s" F  o! w- I
RHEL 8 (deprecated)5 F# ]1 V' P; n) Y; Y9 G8 E( {
$ T- |6 U8 f. i6 b3 w: ]' c
Rocky Linux 8
) I7 D: D" T7 \9 T% k/ i: ?; M0 A9 A
: L7 ?8 {' W! K. v% T& ]Ubuntu Focal (20.04)
) P/ o2 N% J5 r3 R
/ R& h: w1 X2 a8 s7 L2 Y我这里使用的是Ubuntu 22.04 LTS(mini安装)
3 o# a& _. s% O' n5 e
) }7 ^  K4 T' z- f' Z, @7 \. ~下面开始安装
$ m& C% X0 `3 i) I' U9 W0 _3 b2 L9 E5 u  ^2 U1 @
1. 安装系统依赖6 Q4 C( q( g0 }# V" K
1.1. 更新软件包索引. D+ J& N% e8 {' K  M
sudo apt update: B- x2 x6 ?4 V# G0 R; e; z
1.2. 安装python依赖( v& X9 U' c  n, P: C& T
sudo apt install git python3-dev libffi-dev gcc libssl-dev
: O1 n4 F% a0 \$ a/ V2. 安装python-venv虚拟环境依赖. e; k4 l$ \3 T* A2 L
2.1 安装python3-venv! `2 G8 V0 Z. J) m& m
sudo apt install python3-venv
- R* _, z2 m7 [1 Z, V; G  \2.2 创建虚拟环境并激活它0 q# ?8 e! M! A' {4 o
mkdir /path && mkdir /path/to # 也可以自定路径
2 s" D2 Q+ [6 y1 }python3 -m venv /path/to/venv
& R+ T' B# R% {, U7 psource /path/to/venv/bin/activate
* v6 C# @9 D% o% r- S2 u2.3 确保安装了最新版本的pip
# E5 N* ?  T/ H' d0 t4 Kpython -m pip install -i https://pypi.tuna.tsinghua.edu.cn/simple --upgrade pip9 Z9 m! Q, c1 I5 ^9 _
2.4 pypi换源( x# Y2 b+ k2 X" Z
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple: m' O7 U* f& c& a" H0 Q
2.5 安装Ansible( Y) u# [6 E$ M7 q5 w" J( o- g
pip install 'ansible>=4,<6'# u' p* J9 |0 W: \8 b- T
3. 安装Kolla-Ansible* a1 k; q6 o8 _% c6 ]
3.1 kolla* F1 \. L4 d  L& N
# pip install git+https://opendev.org/openstack/kolla-ansible@stable/yoga# x) B- B9 n% X: L! `9 [- x/ i1 `
# 上面是原版命令,建议使用jihulab.com克隆一份& v; ~" Y  Z; \" H4 e7 _
pip install git+https://jihulab.com/james-curtis/kolla-ansible@stable/yoga: j% V. C# v/ I" Y$ a4 y$ O
3.2 创建文件夹/etc/kolla) ?3 k- N: O9 x% e9 f) n( z8 o6 `
sudo mkdir -p /etc/kolla
' a5 y* P) n6 e* C/ i+ ^sudo chown $USER:$USER /etc/kolla
7 Z6 L4 d; w6 |7 G  Q3.3 复制 globals.yml 和 passwords.yml 到 /etc/kolla
4 I; C& x/ b4 H% f/ R# 如果你使用了自定义路径,记得替换/path/to
1 }4 V4 l0 u0 l( j- G: I* S' ]) Scp -r /path/to/venv/share/kolla-ansible/etc_examples/kolla/* /etc/kolla+ Q  q( L) A9 @. Q% Y$ p
3.4 复制清单文件
; W8 R" d2 z) [8 r& ]) u+ Q3 Jcp /path/to/venv/share/kolla-ansible/ansible/inventory/* .
4 h8 D1 M* y& G# f, m4. 安装Ansible Galaxy依赖5 B/ R/ T8 e5 _+ @0 z
4.1 换源+ p" c  n; ^  T2 f; S- t
找到 /path/to/venv/share/kolla-ansible/requirements.yml 8 Y4 _: l3 O$ U2 \7 s! G
: P& ~+ Q. v4 }5 K$ r4 u& R9 z
内容如下( D6 H5 U6 z( U; f( S5 e: X3 T2 X

+ u# a# b' `$ ^---# X8 i/ R/ I. {+ `, Z2 N
collections:
, B. c! _1 x3 y" h% S% H! R  - name: https://opendev.org/openstack/ansible-collection-kolla
7 E2 f- z4 t: m0 |4 o# f/ y    type: git+ h. ^& [7 G$ S8 A# a- R+ a) Q
    version: stable/yoga
1 F* B' U' B% b5 b1 Q8 J, e" Z修改这个git仓库地址,如果镜像拉不下,建议去拉github的OpenStack镜像
" }' b, h" o# V2 o- i: V; ^2 C- c
  }% m  h" ?& V  h( R3 \修改成如下
6 w/ A% Y+ b3 R" U
- _! J& u9 b- e0 ]( D' R---$ V7 O7 n# J$ I7 z$ _$ E
collections:& ~( P3 [5 C0 C7 J. B' p2 @% \! Q
  - name: https://jihulab.com/james-curtis/ansible-collection-kolla6 M3 U& l! r, n8 ]: L0 P
    type: git$ @/ r6 G& G# h5 g6 m
    version: stable/yoga
* Z. W3 \: N6 M) ?5 h4.2 安装Kolla-Ansible-Collections依赖- Q! i+ x' G! m2 M
kolla-ansible install-deps. y, @* q& o6 z& ~$ E
4.3  docker换源 && 指定docker版本到20.10.*- l+ H1 u7 h2 a( b0 Z# g2 ]
这里不换源是可以的。但是截止docker 23.0.0发布时间之后再来使用kolla-ansible,首次安装没问题,后续如果要添加删除组件的话就会报错。原因是docker删除了容器的 `KernelMemory` 属性,但是kolla需要读取,导致数组下标不存在报错
, C: B, q+ f* z1 [; B  T* c! ~
  C" a' N0 [6 c8 s* @& u请参阅:Kolla-Ansible deploy部署报错 KeyError: \\‘KernelMemory_JamesCurtis的博客-CSDN博客
) L- Y0 l7 b& q3 m  `
+ v8 K% S! }) f! Y/ Lsed -i.bak 's/https:\/\/download\.docker\.com/https:\/\/mirrors\.tuna\.tsinghua\.edu\.cn\/docker-ce/g'   /root/.ansible/collections/ansible_collections/openstack/kolla/roles/baremetal/defaults/main.yml
. W' @2 l8 l% y" D9 ~- l. B: L- k( csed  -i.bak  's/_package: "docker-ce"/_package: "docker-ce=5:20.10*"/g'   /root/.ansible/collections/ansible_collections/openstack/kolla/roles/baremetal/defaults/main.yml
: s# r/ E: S* K  ^4.4 配置Ansible' \( I0 d$ ]- Q/ \
mkdir /etc/ansible 6 c" s. V2 `  T$ }+ k4 T
echo "[defaults]
: ~; p4 }% ^5 n! L7 uhost_key_checking=False
2 f/ d& w9 }5 q' Q, ppipelining=True
7 K$ @0 I  k% X* `9 c( \/ Yforks=100" > /etc/ansible/ansible.cfg
3 ]& g% Y7 \. f5. 准备初始化配置
8 S/ k4 m4 F( V  L* W/ @/ r+ J如果单机部署,你也可以跳过此步骤,然后使用 all-in-one 清单,后续如果再增加机器可以切换回到 multinode 清单,只需要注意修改好机器主机名就行。
: L  E* `" m1 p! _/ W  A7 Q+ v% z$ s- @" K! c  W. g1 ^0 [3 P) R: m
对于all-in-one虚拟环境中的场景,将以下内容添加到all-in-one清单的最开头
. x( N) Z2 z, t! {" y
5 @* ~1 q* ?9 p5 X2 V. G* G! Glocalhost ansible_python_interpreter=python: \. _9 F1 D  l8 f$ c
5.1 修改配置文件% \2 [+ D9 b! D9 U4 \4 {7 e
我这里使用3+1机器演示,. }' M+ H' v' c7 K

! {* z4 `3 b0 e+ e. Z2 C4 _. P. T& l1 x 部署机:10.10.1.80/24" Y* A1 Q# X3 R9 O0 N, B; Z

5 R5 T3 j& K$ _: s6 a# T3 m节点01:10.10.1.81/24 control01: ?4 W) k) l/ m% N* c5 n

: P0 w/ x+ z* b' Y- Q/ _0 c# K节点02:10.10.1.82/24 control02
6 J& \* X- L. N# k7 {3 j4 X8 V7 v: Z
节点03:10.10.1.83/24 control03
+ o4 ^4 `" F8 V) m3 T# b4 L- I% O. g
这里仅仅展示 [baremetal:children] 节点之前的配置文件,切勿照搬!!! 7 a/ Q& k; [- f# p+ m; {$ w

& r: Z- P, q: [/ N8 z# These initial groups are the only groups required to be modified. The/ C% N+ \2 u/ S8 @: h1 X/ H: E
# additional groups are for more control of the environment.2 }1 e8 X! a  _2 ?8 K# K
[control]
0 I% M4 U! D" d  }# These hostname must be resolvable from your deployment host
$ m+ }) U# H/ E/ B6 s9 E& d( q6 H$ X0 ccontrol01  hostname=control01 ansible_user=root ansible_password=1
: {) u: W/ l5 Y* _control02  hostname=control02 ansible_user=root ansible_password=1/ y) c) {4 b$ i
control03  hostname=control03 ansible_user=root ansible_password=1( w& K" l6 P$ J6 ^

3 q7 _( L9 l7 G9 F# F3 p( K' E$ }# The above can also be specified as follows:
! ^- l! Q& a* g4 O) a& f7 \# control[01:03]     ansible_user=kolla
+ A6 r  `1 D" w
" V. Y2 _. V& X# X; c8 F2 p3 X# The network nodes are where your l3-agent and loadbalancers will run
9 q1 R/ Z( B7 d+ h% a  v# This can be the same as a host in the control group
# b6 L. V' Q- `# [network]5 m* q: A4 v% O$ {
# network01
( N: i2 b! G& A! z5 S# network02
  j) ~0 q! G  c
& {5 |9 o$ t$ _( R# when you specify group_name:children, it will use contents of group specified.. N! _; J" K& I1 y- k) K' u& h
[network:children]! J5 a# Q% x/ Z# x
control
3 |: ?3 f3 g$ i. F$ J* A' L+ s  E# m9 d

. J. D5 g& f3 h  ^' x# [compute]& F. q5 b1 t- k, x' i. ^0 W
# compute01
. @; w( N, v6 J; h[compute:children]
( f3 F* C+ ^% U- L  Vcontrol6 l! |# }; X$ E! w
8 n9 u3 j6 ^5 }
[monitoring:children]
7 ^' q/ K5 v* m1 S' Y1 ucontrol% H* q9 L+ l  D* }- W- R: {6 ?! A: Y
# [monitoring]
+ S- W: u" ^+ ]) G9 s4 r, V8 E# control01   ansible_user=root ansible_password=1 ansible_become=true
) s; U8 U+ q* ~* Q, L# monitoring01. ]0 Q  l& L( G0 [

! H: \) e. r8 H9 s& T# When compute nodes and control nodes use different interfaces,) J' U7 Y0 o" r9 |) J2 {* w+ E* L$ e
# you need to comment out "api_interface" and other interfaces from the globals.yml1 H" F8 k) Z$ X4 O. ~6 N/ s
# and specify like below:
$ H# h$ Y. z5 w/ v9 H#compute01 neutron_external_interface=eth0 api_interface=em1 storage_interface=em1 tunnel_interface=em11 J% o! S! M+ p, H7 D- T) R5 a, t

+ m7 C; W0 d3 D6 ^+ l3 @# [storage]
4 N# g) f$ J6 b( X# storage01
6 c9 E  `' B. v" n[storage:children]4 B" W" w, P8 E) ?7 M3 E2 u
control& U7 l9 N7 q0 s6 g

/ R; V' L# r4 y[deployment]
0 r0 ]  o. H$ N" \- ?9 r/ a- ?# Jdeploy       ansible_connection=local
8 q4 s& ^' e5 |, V# `* W& O
# s$ M3 }- q# t# d* u. z/ D# 下接[baremetal:children]! G: w% L5 L! i
5.2 修改hosts
/ Z. s/ b, S5 f) f4 d9 C如果使用 all-in-one 清单,这一步也可以跳过: j1 A( a7 P4 q, X7 z* _( r
# U; {( b/ }% K) c* [  ?
编辑/etc/hosts文件,注意替换成自己的机器的内网ip
7 ?. w4 I. J0 P- K9 l, F+ V- T
8 c3 B, h7 [6 `' ?3 I+ g只需要修改部署机。后续使用bootstrap-server命令之后会同步到所有节点7 i/ y) [, J  \& c6 J' T  e) r

* J3 K4 }) o( Y# n" [# 这里是deploy机器上的文件9 r% ^% ^% y; ?+ |6 W
127.0.0.1 localhost! a8 k# k2 R8 h0 n2 ]
10.10.1.80 deploy; A( m# e) s3 @2 g& \
10.10.1.81 control01) f2 u, i  s" ?
10.10.1.82 control028 L4 |1 `3 ?8 [3 c# E  |
10.10.1.83 control03
& k6 w3 _* u7 @4 D5 X( }  n" G" ~5.3 安装 sshpass# U1 L* R0 y% {' R1 L
apt install sshpass -y3 S0 L/ G2 e2 l7 B1 \% _" p
5.4 配置ssh密钥对
! x- w& Q' S* a1 U/ O* lssh-keygen
+ w! F0 Z/ K: ]一路回车0 d3 {) T; A# E4 v/ S

6 ^' w5 w8 Z2 t0 J% \" t& lssh-copy-id 10.10.1.813 a) g' H' F# w% a8 s
# 注意替换自己的内网ip9 W+ P! K  ~1 L* [$ N" }
输入yes同意指纹,然后输入密码。就可以了/ j$ {, S. ?2 Z0 }' J

7 g$ Q/ L& A- l6 x! B# 看下如下提示就是成功了3 L8 Q  Z5 w3 d. ~& I) a+ Z; T3 a
root@10.10.1.81's password:
' k# ^/ r% D5 a0 X4 V8 U- E; z! N2 `  |9 c6 y  G1 Z8 v
Number of key(s) added: 11 X; M6 L3 C8 ~$ c0 q0 W0 N
1 `/ g; Q9 B% E. z0 U" b
Now try logging into the machine, with:   "ssh '10.10.1.81'"
' H  ^$ {3 H: M- U$ {and check to make sure that only the key(s) you wanted were added.* S9 K4 N% H* m

* U8 A8 X0 s9 s. m5 f9 r; B5.5 检查清单配置是否正确
' w5 x1 I5 Q8 ]ansible -i multinode all -m ping' @; }+ n& G# Q/ L' w0 w# M( ?
返回下面结果就是成功
, p6 H3 _  [# X, V9 X1 t- L/ a, J8 }: `% r. ^
(venv) root@ubuntu:~# ansible -i multinode all -m ping! C8 P! ^: x# K: q4 ^
[WARNING]: Invalid characters were found in group names but not replaced, use -vvvv to see details
+ u5 R4 e. P1 H7 ^1 {localhost | SUCCESS => {
: f3 o  m! ]6 b5 z! u: M    "ansible_facts": {
5 d6 m0 ~7 }) ^$ `        "discovered_interpreter_python": "/usr/bin/python3"0 P; f9 |8 R# V0 ]4 \; [
    },
/ b6 z. `1 S; X: k) g    "changed": false,1 n4 R' p% y4 [  W9 {+ D$ L, @
    "ping": "pong"
+ O1 E2 y/ ~/ Q; _$ _9 |}
. Y, G8 }9 z3 A, F5 t% `control01 | SUCCESS => {
$ e: D3 j/ {& s8 q* t/ p    "ansible_facts": {/ \) [# W3 R. K3 @2 t
        "discovered_interpreter_python": "/usr/bin/python3": T- T* h1 E: d" t+ J
    },: y1 q2 y$ h- Q! I( Y
    "changed": false,! ?- t: N7 N7 k3 t1 H4 ~
    "ping": "pong"
$ J7 G0 D% H% \2 Q8 v  d2 B}
" s1 W5 m6 D0 Y) T" k6. 生成密码
+ q$ _5 S8 }. ~4 w1 C& j# G5 okolla-genpwd! w0 d' w$ d6 `" l! X( h
7. 配置globals.yml6 D8 F/ Q" X# |% b2 w$ R4 Z/ Y) U! X
先安装一下vim: J" R# T# N. Q0 M, [

; q4 y. z6 _. Z% fapt install vim -y
( Q1 W8 m$ u& R编辑! M8 m; m' l* o% L, {6 _" _

& C1 P8 v" P" X- K2 m+ q5 zvim /etc/kolla/globals.yml
9 b' I% q0 s1 q 先不要进入编辑模式,输入下面,显示行号
  X1 r! _/ k! V# z- y6 a1 D* |
- o5 y6 g8 |6 e) P:set number
, Y9 ^+ \$ L" m6 B. ]) f% M# ?7.1 修改基础镜像发行版
9 F0 n3 J3 a" {默认是centos,要修改为debian。默认的centos有一些镜像不存在
/ r2 B6 K/ d: a% y, s; N
! s0 [0 a" q& x; ksed -i.bak 's/#kolla_base_distro: "centos"/kolla_base_distro: "debian"/' /etc/kolla/globals.yml! ]* [6 p/ [7 ]+ O* }/ F
7.2 编辑网络接口7 o1 C# S% c" m1 g) B: }
这里,vim的基本使用不在赘述: h  b6 W* ^( R8 A% f

  {7 o) P+ u: n2 B2 V& D搜索第一个网口接口,并修改为对应配置(可以通过 ip a 查看接口名字)9 H9 e- P6 Z5 C) ~0 g4 H. T! [

4 X4 Q& A4 C$ k0 C 设置的第一个接口是“ Network_interface”。这是多个管理类型网络的默认接口。3 B  ]5 w  L& S$ G' q( m# r& s

* S- D* }: ?: B: k8 z8 hnetwork_interface: "eth0"+ _% j0 n( Z  F. H  D: Q
搜索并设置第二个接口; |. @! {; d4 Q4 O3 Y

9 K4 f$ g# L9 H所需的第二个接口专用于Neutron外部(或公共)网络,可以是vlan或flat,这取决于网络的创建方式。此接口应处于活动状态,没有IP地址。否则,实例将无法访问外部网络。
- U. n; M  ?" P+ Q# x( V3 V: U3 q9 {* `. D' K$ j! K9 [6 j/ y/ y
这里说人话,就是第二个接口需要给他一个空闲的网口
- H/ K- u2 C" p$ F  ]" m6 U
! ?0 M+ Z3 n$ d- V' @neutron_external_interface: "eth1"
/ F8 ]% G$ D9 l9 ]+ E6 J搜索并设置浮动ip
. q9 Q8 W+ T' l2 Y  ?9 g6 a1 Z6 t) M. A
接下来,我们需要为管理流量提供浮动IP。该IP将由keepalive管理,以提供高可用性,并且应设置为在连接到我们网络接口的管理网络中不使用的地址。
& b4 D, Z( v# F& x4 j! t9 m6 l" e3 L! p
这里说人话就是,浮动ip不要和network_interface中的地址冲突(一般是DHCP),比如说network_interface所在DHCP范围是10.1.1.100-10.1.1.200。那么浮动ip就不建议在这个范围内,而应该选择如10.1.1.201) c: W! ^" _8 N- B3 S6 `
3 a9 L# V) H) }4 F! g
kolla_internal_vip_address: "10.1.0.250"0 k4 C  N3 a, t( E# u) _! W. A
编辑完成,按下Esc,再输入
0 V  G' ?+ k. Q, Z& z+ M/ Y( M$ ?9 v8 Y+ e1 Q1 F; r( L; u
:wq
; G9 ~+ D9 g* v) T0 q* N保存退出
- Q2 d) j' E8 f% y) f4 z# y0 F2 h% j3 e" f
8. 部署
4 j+ g' M5 }: A( K& l! l0 f/ @8.1 docker quay.io换源* Z) I# v' K& @( N6 ?
sed -i.bak 's/#docker_registry:/docker_registry: quay.nju.edu.cn/g' /etc/kolla/globals.yml% y; g. N6 N. m7 m
8.2 引导服务器- z' R2 h1 u; n% }
kolla-ansible -i ./multinode bootstrap-servers' K7 E. K' O: p% B- B6 g$ M  T9 K2 y7 n
完成后检查docker版本,确定在20.10.xx。不然后面所有使用kolla-ansible的改动都会报错KernelMemory0 @* Y. m' c+ i
5 H5 w# O7 S: X6 B; K
确保Server: Docker Engine版本在20.10.xx就行( f* h& a* \( v+ k

$ w2 I! G+ f3 L/ s7 K5 q* S0 i(venv) root@ubuntu:~# docker version
  l' H# H9 |3 _7 [+ t9 bClient: Docker Engine - Community5 }$ v" D  L% s
Version:           23.0.0
2 K5 A5 t- {! W9 G4 P- A" Q: H API version:       1.41 (downgraded from 1.42)
5 U' \1 ^; x$ S7 z. g Go version:        go1.19.5
3 m6 t9 u& G* a0 T% B: e7 n Git commit:        e92dd87! H6 z& a9 h4 d% t
Built:             Wed Feb  1 17:47:51 2023' N6 ?4 x( M. ^6 i
OS/Arch:           linux/amd64
0 V+ L* S# L3 L# i Context:           default! k- \5 ~$ `$ l$ ~3 ^: ^/ g$ i

" u) w% ?. r' Z$ IServer: Docker Engine - Community
5 ^( I" _, W/ ] Engine:/ _, Y2 G7 R( ?8 v2 c& N6 T
  Version:          20.10.23
+ n7 H: D2 ~, Q$ {/ K9 I& z  API version:      1.41 (minimum version 1.12)8 k' X' Y; D# N. Y3 p' t6 E5 Y
  Go version:       go1.18.10
" s8 O  S% A" M  Git commit:       6051f14
2 C8 A" \! g( p2 q+ o  Built:            Thu Jan 19 17:42:57 2023
! s0 g( F  R# A9 [) O  OS/Arch:          linux/amd64
& K* S; _* i( ]) m2 A  Experimental:     false5 l1 P$ \: \; y) C
containerd:
! g, A! J, y- T. F: g  Version:          1.6.16
4 i( n( q  W" [' t  GitCommit:        31aa4358a36870b21a992d3ad2bef29e1d693bec6 u# h9 M2 M$ R$ i
runc:! O& @( U7 }% p
  Version:          1.1.44 j: {# A! @+ [
  GitCommit:        v1.1.4-0-g5fd4c4d
& Y& a9 p/ B+ I; N/ F  } docker-init:- F' c9 T2 w1 B4 A2 j! ^4 P
  Version:          0.19.0! T+ F( k+ T2 h7 k& Z8 X4 n0 c
  GitCommit:        de40ad0
- e7 R; `, y3 T9 o6 h" P+ N. @$ B8.3 对主机进行部署前检查3 M! h' w$ }: w( `7 v+ R
kolla-ansible -i ./multinode prechecks -vvv  X$ f- A+ Y3 S
8.4 最后进行实际的 OpenStack 部署' H' ~/ B8 d. E9 G
kolla-ansible -i ./multinode deploy -vvv
5 C4 z5 z: a% D  v# V! t2 N& U当本脚本完成时,OpenStack 应该启动、运行并正常运行!
4 @% F( n& @- K9 ?' N* |1 K& b# u) c9 c; `* c1 E! O
PLAY RECAP ******************************************************************************************************************************************************************7 y0 C7 Z1 R7 D' g: \1 W& z
control01                  : ok=308  changed=218  unreachable=0    failed=0    skipped=169  rescued=0    ignored=1   5 H3 s- N) ~0 \7 x6 k3 g6 [6 `" @* F( u4 I
localhost                  : ok=4    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   ; t; Q# Q8 X! h3 g

* z. O/ b+ T5 l9 T% k- r' d. x访问浮动ip地址就是前台页面,如果显示证书错误,那意思就是密码错误
4 O& i* x. p; O2 H& X; U7 s" o5 n
' l' b" g; K1 r7 e: a5 a8 s- T" B, o
  u5 t8 W; G2 i$ e* m. f( j
账号为admin
4 f; C+ K6 U; C  t3 ]( h1 ?; @( P* Z8 o9 f7 G, D) ?
查看密码:: ?( }- w3 O, \: r
& j& U) q: ]$ ?
也可以在post-deploy命令执行之后,去这个文件里面看/etc/kolla/admin-openrc.sh
7 d3 W) H  s! ~. @8 \0 G  B! E/ T4 r) P/ ^+ w7 }6 U: [
cat /etc/kolla/passwords.yml |grep keystone_admin_password8 U* z8 T0 n8 O" u+ o) O
2 G% W' Y1 V! S

; c2 s2 o$ K: ~. Y  G) [( i9. 使用 OpenStack
) e# A. L' T7 Y9 |; w  ^5 k. t8 a4 v0 ]9.1 安装 OpenStack CLI 客户端: e( {- Z% I8 S8 K. L& V
官方命令(网络能通的可以试试)2 T' {, J& s9 i# B2 W
4 e( @  b, q1 h: m( L8 Y' n3 T
pip install python-openstackclient -c https://releases.openstack.org/constraints/upper/yoga
: N/ I) W/ O5 u0 s6 V9 l# x3 K" o如果文件获取不了建议,打开这个链接,之后会跳转到1 t0 X0 B! q' M: H
https://opendev.org/openstack/re ... per-constraints.txt: o1 y/ B9 J. X( }8 a+ I0 I0 r
再去github的OpenStack镜像,即 github.com/openstack/requirements/ i, @6 g$ R' S
然后克隆这个仓库到jihulab.com  c$ y9 L1 _( H

% M7 c( e5 z. e: k7 l2 p% n记得选择对应的分支% T1 j. V3 P& K+ f
1 ?5 g+ G0 s0 O* m

7 n8 P: G. M4 n' h4 m& H& W3 V+ T6 U2 I' S4 C4 W9 N" [$ U6 Z
,接着找到对应的文件
$ k: H3 {$ e, Z+ J2 Q0 d4 o8 i: R$ y6 ?% e3 ~
: {* e# |3 b% U8 I8 X! c, r

$ q# \/ ~1 ~! u( S0 j0 v打开原始文件,得到下面链接( l% j- I' b& F4 _& e
8 x. D/ [# S* P
https://jihulab.com/james-curtis ... per-constraints.txt6 w" `4 v! [/ H) n6 H" E
替换官方命令,并执行
1 U$ Z3 b) @$ b/ N9 j9 E9 }! V% `8 \, k3 q: t
pip install python-openstackclient -c https://jihulab.com/james-curtis ... per-constraints.txt
1 {2 e. _: H4 j9.2 OpenStack 需要一个 openrc 文件
! }: ?: |& x. s" r' u6 |" o: q其中设置了管理员用户的凭据。要生成此文件6 W! f9 b' E9 ?- |, Y! k
0 Q4 S. R' i6 p( I2 p) Q
kolla-ansible post-deploy2 c8 ~  G" _' ~: l% C) R
. /etc/kolla/admin-openrc.sh% v5 U+ C3 }7 a* \* j
.(点)+(空格)+可执行文件 == source+(空格)+可执行文件; |' J( ]2 e/ T& t/ |
6 S5 X: }4 i6 @' Y8 Y0 A; D* A
接下来就可以使用OpenStack CLI了0 F" ]. i- G9 w' L$ m7 o
- H+ m; O: W/ X; I% S( g
至此OpenStack安装完成
5 e2 Y, x: C1 u% L
& V# Y' I( b8 H! X; r9 a3 @! C后续:: t) q) {1 o, z9 U; `6 Q+ |

2 l2 C: ^. O; O  q& ]. vOpenStack使用Skyline Dashboard面板替换默认Horizon面板$ n% `: |3 F) `& e# v" K! b/ U9 g
OpenStack增加节点或者减少节点,横向拓展节点. E: b$ i6 z3 L, L  l
ProxmoxVE+Ceph+OpenStack HCI超融合平台搭建,配置Bcache加速Ceph SDS. o' ?! U- k: u/ C
) V% F: N* S- u+ Q5 w2 k7 n* e

" H6 a$ u) u) ]3 U4 P
您需要登录后才可以回帖 登录 | 注册

本版积分规则

返回首页|Archiver|手机版|小黑屋|易陆发现技术论坛 ( 蜀ICP备2026014127号-1 )

GMT+8, 2026-6-12 01:23 , Processed in 0.017271 second(s), 22 queries .

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表