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

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

[复制链接]

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
发表于 2023-4-4 15:20:58 | 显示全部楼层 |阅读模式
前期准备! F; R0 f& `( r9 R) _
本文环境
- A* X( r* ?3 T: M3 o3 g* e/ O控制节点:controller: d: _3 J* |# D' o) ~. g0 M% G
3 N1 o& X4 j$ Y. s! o
计算节点:node1, \8 e( ?, j$ h
/ f6 q6 E( o2 g7 `7 t" W! \
OpenStack版本:Ussuri. |2 Q' y* q$ s7 n- D) B

+ M! e3 ]  F+ e( K操作系统:CentOS 8 stream 9 f& i; z9 {! j2 K
, K, Z7 H. _1 \
最小配置要求  u1 b; _! H% h# v/ g
8G内存,40G硬盘,三网卡! w1 n# J  q2 l) C

9 P3 k7 x" J! \# I6 W更改主机名
" s1 Y7 r1 u  B$ Y- g& ]5 ?: ^控制节点, B* \' `* h; Q2 w+ Y6 `$ Y

# U+ w/ v$ H1 G0 A: Fhostnamectl set-hostname controller; C' S+ n8 i  |3 b3 o
计算节点
( [. d8 A! N* c# G7 m- X
3 r5 t3 o  J& t9 Jhostnamectl set-hostname node1
' W6 F. E6 ^0 T  J  z# Y4 T) V主机名解析
9 a7 b% u" e; u  C' A编辑/etc/hosts,增加条目(所有节点)
1 q3 ?& Y* b, Z. Q- L2 T: ?
; G2 [, |/ t2 n3 T- x192.168.13.133 controller
  [  c6 j0 S0 |; p+ Z! Z192.168.13.134 node1
* c5 E3 g; z& G5 L  o: _/ H" \& u+ M创建cinder-volumes卷组(可选,用于LVM). k4 r; V" b8 O% \+ g1 R% _, E
所有计算节点,准备一个分区用来创建vg,这里创建一个sdb1的主分区7 P0 h1 x' ^( l- R  d( L7 f0 P" b/ `
' ]6 ]4 D/ J+ U2 q6 |" f
fdisk /dev/sdb
* n# l+ \* J8 f4 ^9 a5 [5 F  q  n -> ... -> w  # 依次选择- m# N3 w  \! I. U) b

  P, [4 m- _" W# j, ]( j// 刷新分区表
: R2 {8 F$ F- Lpartprobe ! }) L- O2 Y# O# E
9 C: c+ S8 X& Y9 B  E3 g1 `
// 创建pv 6 @; O7 h  ]5 i: v9 B, m
pvcreate /dev/sdb1
( W6 j- N( U# f5 v$ i  a$ l3 B1 G! I* X0 @8 D- g: @
// 创建vg
8 p) s3 y$ J3 D: Z" d4 Y3 d* ~: |vgcreate cinder-volumes /dev/sdb1$ z. D. K' _/ o1 b
安装依赖
. Y8 K! I+ ~3 N7 M- N+ D* Wcd /etc/yum.repos.d/ $ a: F+ N7 {8 c7 w% t& ^
mv CentOS-Base.repo CentOS-Base.repo.bak
% a6 {8 o3 x; l1 hwget -O CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-8.repo
# ~# r+ \; L& q) r
! k( G% W( j0 s5 xdnf clean all
; K4 g% k+ q9 D" ~  Xdnf makecache
1 S( `5 v- _3 |+ |dnf install epel-release ; ], j4 w, |9 \, V1 K
dnf update # f7 `, F  A: {7 |% h) w
% B; Y: R. j3 x1 }. ^1 S5 p: m
dnf install -y make gcc zlib-devel openssl-devel python3-devel libffi-devel python3-libselinux' V( K4 h/ b1 d# o$ j
1. 安装Python39 [2 Z* c9 g; h
! }" H. L# z3 x4 g8 a3 d
wget https://www.python.org/ftp/python/3.7.9/Python-3.7.9.tgz
# b2 c; X+ i& x# ~tar -xf Python-3.7.9.tgz $ I/ `/ @2 J7 g7 N) E9 |
cd Python-3.7.9/ , Z; f  t) ~6 c( W. q# U
./configure --with-ssl
  p+ \* k( C) h' n; U% M* t; v! Qmake -j 4 && make install% b7 Q0 V' ?; I6 `8 @
2. 准备Python虚拟环境(推荐,非必须)
; P2 Y1 k) r+ h) e7 q" ^  t* ~: w4 c# q  e8 ?( L
创建虚拟环境$ O8 v2 t0 }9 M  a1 F
# // (/PATH/TO/venv,这里使用/usr/lib/python3/venv) * h- ?% X5 J" V! q+ V9 M2 g3 Q
python3 -m venv /usr/lib/python3/venv
& m8 X" j: Q7 k) A: [3 Lsource /usr/lib/python3/venv/bin/activate* |3 b7 q/ L* v& l% j# [6 G  X
升级pip
2 L* c; r% |4 \* L3 Xpip install -U pip+ }- z( T+ m! U. g3 G: R
如果启用了虚拟环境,后续所有操作需要在虚拟环境下进行
! ]  e) K8 Q1 l; {: m; _3 Y, Z5 E, y* ^) U) B$ z, |$ x* H
参考:
  X  v; _5 Y# {$ z
4 E& u2 \" D- o# |. u  x* Dhttps://docs.openstack.org/kolla ... l-environments.html8 ^) A( B$ T  \3 p2 ~$ r& p: @

7 X# `0 U7 T5 m7 V' Z. x( C3. 安装docker
- z5 }& d8 c. V8 G$ f$ |( o. E& J, N& @. `
安装docker服务(所有节点)# z- h0 f% F. ?% `8 D7 h. k4 p
cd /etc/yum.repos.d/
  @. R5 B# g! ^" [" U+ \( ^, Pwget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo * v1 f$ {; h% {4 f  f5 g. w$ g

- D: B6 ~& e" H  M; @& V2 w// CentOS8 需要升级containerd.io版本 7 ~, V  q2 F6 A0 k
dnf install https://mirrors.aliyun.com/docke ... -3.1.el7.x86_64.rpm / w# z! W: e/ j) F$ a. ]6 k
dnf install docker-ce docker-ce-cli
  o7 X# C6 [. g3 t: C- Q' `" O' I% {) c# y7 {' d
systemctl enable docker.service
, s6 f3 u! B1 G. a/ M( tsystemctl start docker.service
5 H; _- Y0 H3 B+ X4 s* p' _镜像加速' z- ]8 d  O' c7 G2 C" Y
执行以下命令,修改docker源( A7 @! M  y% C* ~: Y& [% g
tee /etc/docker/daemon.json <<-'EOF'
- J& g' V, M$ V$ k0 l{
- j- w0 n) d2 Y' C- j/ d    "registry-mirrors": ["https://reg-mirror.qiniu.com", "https://hub-mirror.c.163.com/"] & ~6 i6 \1 F" h1 m7 t5 P3 }8 k
} 7 W0 \* f5 `3 X. _8 }, ]
EOF
. `% L- R$ g' i6 @安装python docker模块- Y1 h9 w5 G1 }6 l& i1 P8 Q
pip install docker
& M, o, e8 F& ~4 t8 Y4. 安装kolla-ansible
9 T. W8 v1 d$ d2 y+ G' u6 x( A' Z
3 z* z; f* |4 H4 f+ ?' E0 P安装ansible2 L3 h/ }; q  a3 ^; j
dnf install ansible0 M" C4 T8 @* O4 k- h! z
安装kolla-ansible
  P( s2 M6 M( y  D- U可选择源码安装,或pip安装,这里使用pip! {/ I& e& X0 v5 K8 G: x7 p

- J2 p. y. G9 d7 r' e9 Dpip install 'ansible<2.10'
) r- f! v$ {0 {pip install kolla-ansible0 H+ [1 c3 o+ C
创建kolla配置目录1 L; d. X- r& k5 @) [' @
sudo mkdir -p /etc/kolla
: d/ M# l, q) W* F) Gsudo chown $USER:$USER /etc/kolla, S' q+ b" n+ ]7 B, g4 E; ^
拷贝yml配置文件0 U$ D9 b' B) R: \0 ?9 J: d
cp -r /usr/lib/python3/venv/share/kolla-ansible/etc_examples/kolla/* /etc/kolla* ]! H9 z& u0 O/ c! @+ y$ m  L$ U
拷贝all-in-one、multinode 清单文件到当前目录(任意工作目录,这里是在root目录下)
# j6 o) O, O5 I- q# l& b1 Jcd /root ! L; d1 {/ Q5 X
cp /usr/lib/python3/venv/share/kolla-ansible/ansible/inventory/* .  N; R# H/ e1 w/ L
编辑/etc/ansible/ansible.cfg' A* o* v5 r+ c% e6 ?% G
[defaults] $ ?' p; }- a* N& f
host_key_checking=False * q$ G7 _# T+ z& @, G' t* p+ _
pipelining=True " t! s; W" m: |/ ~8 d
forks=100, I4 P9 c4 t- y, J( b' u
5. ansible初始配置
( I  h) x' Y) B$ u+ L5 y% _' M" {# B7 B2 |
打开当前目录multinode文件7 p9 T6 I" }" y- @) O
修改IP、用户名和密码,并对需要安装的内容进行调整# S# G; ?' c. D
[control]
( T8 S2 B3 ?3 @/ F' ]2 N! S10.0.0.[10:12] ansible_user=root ansible_password=123456 ansible_become=true ! o9 R8 C7 ^9 Q! {8 O( S4 p. t
# Ansible supports syntax like [10:12] - that means 10, 11 and 12. % W+ r: a2 S, m& r; b# c! r
# Become clause means "use sudo". 7 j+ h7 h: U0 b& i. f% M

% ?  ?7 c& G5 J[network:children]
! e$ r$ t( E) ~# n8 Gcontrol / S/ V- Z9 q3 S8 K2 H. C! Y
# when you specify group_name:children, it will use contents of group specified.
. i. m! {3 g+ l
* o+ i; d7 _, d: C; ~6 L[compute]
7 x2 q$ Q3 }7 ]  V  l' H- W10.0.0.[13:14] ansible_user=root ansible_password=123456 ansible_become=true 7 e  A( d( \$ T, z5 I+ l

2 ?+ R2 s  O7 S. |0 ]. z' z: m[monitoring] 10.0.0.10
/ R6 W" q' l- L2 ]  K: @% G" c& P# This group is for monitoring node. ) h/ O1 L; u+ p0 ^
# Fill it with one of the controllers' IP address or some others. 0 X5 ^0 x. s0 f1 R

6 [+ p, U, n  Q' |' {/ q[storage:children] compute [deployment] localhost ansible_connection=local become=true # use localhost and sudo; Z" C! {. j" |9 o
0 G' A1 }- u5 L3 l! V4 C5 X
.. (略)' d1 D6 `- R& Y! a. H, a6 X8 [
检查inventory配置6 S% x4 y& R8 Y! D# `
ansible -i multinode all -m ping8 H- X/ L, g" v8 w1 {' H6 W" u" p. D- N
6. 配置passwords.yml. }& }+ |7 J+ q* R) B9 t

5 d1 c, @; w0 L/etc/kolla/passwords.yml里的初始密码为空,通过下面命令生成随机密码
" T6 q9 a& q, O7 X5 d+ a' i" A# E1 s) m
kolla-genpwd& G' V+ j* Y  u" y0 O+ @$ @3 C
此时,如有需要可以手动编辑passwords.yml文件,更改组件初始密码,如keystone_admin_password。
9 E3 n$ i0 N0 M2 y2 b% Z' g' G% o% x, f
7. 配置global.yml+ Y7 K7 |! M# e8 a
# z* [2 W! v/ ~
global.yml是Kolla-Ansible的主配置文件,编辑/etc/kolla/globals.yml文件。0 X9 X) ]2 ~, s4 M  @( t8 i5 ]
9 |- E6 J6 G. X' [
修改镜像选项: `, o1 D/ W: L" |0 j# E
kolla_base_distro:默认为"centos",如果是其他发行版需要手动更改。
/ N/ ]' ]4 |) ^' r
  n  C3 P& g  R) J2 A- \) Y: r( _6 ukolla_install_type:默认为”binary“
3 A0 T8 E: n& @+ Y" L3 `' w, Y( t$ ~
修改网络选项
+ V1 x6 i( U& W/ V$ Enetwork_interface:管理网络接口,默认为“eth0”
: \; Q1 p  ~( O. |+ `" d: {7 |5 {# o0 S
neutron_external_interface:Neutron外部网络,可以是vlan或flat类型。需要激活并且不配置IP。  L$ e& U! ?$ [4 l% H

) W9 }# y4 V; d; i! Gkolla_internal_vip_address:管理的浮动IP,连接到network_interface,需要设置一个管理网络中未被使用的地址。
% i/ A. s, ~1 D0 n% X3 O1 J3 m$ W' _; F
--enable_*:额外启用的服务,如enable_cinder。( y2 b8 E( E1 ?5 U/ [8 x. ?* K
" s8 M2 V9 v* e0 r* M( e: u; r
--enable_cinder_backend_*: 在启用了cinder后需要至少启用一个cinder后端,如enable_cinder_backend_lvm。0 c/ I2 a& `4 n( y

8 {% o3 F) u$ P+ r8 p; a% w% u8. 部署
* K- ^# N) n" b( c0 O( X* U/ P) u0 F0 H
确保libvirtd服务停止
4 F8 Z$ @5 s: \6 u' j9 G7 |8 ^systemctl stop libvirtd2 M$ s" J5 u4 R' \! t8 o( \8 l8 J$ L1 X( |
检查kolla部署依赖6 S. ]2 P: g& k2 c* U, C$ @
kolla-ansible -i ./multinode bootstrap-servers -e ' ansible_python_interpreter=/etc/kolla/venv/bin/python3': R5 H, x% z9 [8 O
-e 表示加的一些配置,这里指定使用的python解释器5 T. d3 _  \, E6 Z

1 b' n" w, `4 A$ H7 k3 S主机预部署检查
) p3 b+ z, R; }- f: ~3 p+ lkolla-ansible -i ./multinode prechecks -e 'ansible_python_interpreter=/usr/lib/python3/venv/bin/python3'4 `9 D# U  E) ^7 D! s
安装
$ X% B4 k- I9 G! x$ p* mkolla-ansible -i ./multinode deploy -e 'ansible_python_interpreter=/usr/lib/python3/venv/bin/python3', q4 |( ~! W* T4 ^; b

: I; z! L+ L! j  |4 S# R  m8 l' h2 x0 u; ]

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
 楼主| 发表于 2023-4-4 15:22:43 | 显示全部楼层
目标
" l/ c( v" w7 Z! ]* ]部署OpenStack官方提供的Simple Configuration示例配置中的Web Application和Container Optimized两个组件配置清单。
- Y# x6 y2 o9 P* F* A% `; q
9 u6 k% x" X8 f- j/ P其中包括
9 N/ G8 _, U& P5 z  h
) c3 z; D4 Z0 S; ?6 w: H5 TWeb Application:Cinder(块存储)、Glance(镜像服务)、Keystone(身份认证)、Horizon(仪表盘)、Neutron(网络服务)、Nova(计算服务)、Trove(数据库服务)、Swift(对象存储)、Ceilometer(数据收集)、Heat(编排服务)+ h+ P6 s6 o4 O0 A9 c
Container Optimized(增量):Kuryr(容器网络集成)、Barbican(密钥服务)、Designate(DNS服务)、Manila(文件存储)、Octavia(负载均衡器)、Placement(资源监控): t* K3 o& q. s# c
更多OpenStack landscape景观图可以参考官方或者 OPENSTACK LANDSCAPE云原生景观 | OpenStack地图_JamesCurtis的博客-CSDN博客
( F( S) i  v1 R( R$ Q0 W+ c9 O3 X0 K7 x* A5 P
支持的操作系统
, r, F. o8 r4 b) H2 n+ e3 D0 g注意:不再支持 CentOS 7 作为主机操作系统。Train 版本同时支持 CentOS 7 和 8,并提供了迁移路径。有关迁移到 CentOS 8 的信息,请参阅Kolla Ansible Train 文档。
. A8 d/ D3 e+ b  w- }! V( I9 p  i3 t5 R+ M# m0 b" i( `
yoga版本支持以下操作系统:& W1 n# u4 G6 {9 X( s. \
/ i' z& V# y7 r, {1 @
CentOS Stream 8
% N0 O' Z6 H: u/ D) b! a& n" t3 e0 U9 q8 x0 H1 A: @- l
Debian Bullseye (11): t6 h5 }$ m# ~/ C8 ]

1 U" n+ _$ J9 J# [9 mopenEuler 20.03 LTS SP23 p" i4 [+ ^5 _4 _& G5 H

  T& O  [( v) _) ?3 E& e3 \; \. e; l. a* bRHEL 8 (deprecated)
$ A9 I) }8 |; S9 z- u% O: B
6 K3 u* G) H% W& ARocky Linux 81 \* Z* {7 ]& U( H
4 X/ K$ }+ Q; ]8 }$ s# i2 k9 c8 x! f
Ubuntu Focal (20.04); J  o8 V4 ]" r$ L
& p# C6 k% y  J; ~) J6 n; H1 Q, F! Z
我这里使用的是Ubuntu 22.04 LTS(mini安装)
0 @0 a# v; @2 d  {4 n# `$ T7 S$ C
) H8 K' c7 o  u7 a! ?# \8 b! v下面开始安装
6 i5 j) W: e9 k8 F+ j: o
! I' Q9 m$ M9 ~* F( X. [1. 安装系统依赖
7 {8 B, H3 y1 i0 c0 v( N1.1. 更新软件包索引! i! o' s6 k3 ?, ~) c
sudo apt update% t) t# b- E0 w0 x$ w
1.2. 安装python依赖
* x5 c! H. U2 T7 Tsudo apt install git python3-dev libffi-dev gcc libssl-dev
1 t3 N0 D4 H3 O4 W2. 安装python-venv虚拟环境依赖% G" a5 ~; S* q) _. }! s0 F
2.1 安装python3-venv  r7 x8 g$ O$ F9 c+ E$ ^! c1 u' X
sudo apt install python3-venv
5 [3 w4 {  F+ y3 L2.2 创建虚拟环境并激活它! a! j8 i- }& m2 ?+ Z' Q2 [
mkdir /path && mkdir /path/to # 也可以自定路径' t) s$ J3 `) K; u
python3 -m venv /path/to/venv
' i. w6 T1 a9 K9 A( ksource /path/to/venv/bin/activate* J; O7 x# o" X) ^3 s/ q
2.3 确保安装了最新版本的pip0 r2 u2 t$ F1 Z; T2 O- t7 }
python -m pip install -i https://pypi.tuna.tsinghua.edu.cn/simple --upgrade pip! x5 @3 g" h- T: @4 [# {: Z  g, ^1 m8 x
2.4 pypi换源
4 [* j$ v. _/ M. V7 s+ epip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
" ~& D* a8 M! K2 F% Z2.5 安装Ansible) r$ |& h$ g9 I1 B2 n
pip install 'ansible>=4,<6'
* }- s- z( k- O4 y3. 安装Kolla-Ansible5 p# ^! {# H- [* M2 h, b* W# i: q) |- V
3.1 kolla
5 `' S( V. y0 ~6 B+ C/ E# pip install git+https://opendev.org/openstack/kolla-ansible@stable/yoga
2 g" Q; ]) V8 X1 [+ D# 上面是原版命令,建议使用jihulab.com克隆一份
! g+ Q' D- V) A- k7 {' A: h& Kpip install git+https://jihulab.com/james-curtis/kolla-ansible@stable/yoga
0 x4 A, A8 l# C5 m' M3.2 创建文件夹/etc/kolla/ q5 K0 f; T5 n5 C6 _2 C
sudo mkdir -p /etc/kolla
4 t+ d, |# A: wsudo chown $USER:$USER /etc/kolla! K  p6 H! K. U
3.3 复制 globals.yml 和 passwords.yml 到 /etc/kolla
; x1 Q. A( g' \$ N5 z# 如果你使用了自定义路径,记得替换/path/to# f' j) C; \' `2 {9 V' |: B
cp -r /path/to/venv/share/kolla-ansible/etc_examples/kolla/* /etc/kolla
; w$ U+ w8 H+ T3.4 复制清单文件( F! R  n) _9 _4 `
cp /path/to/venv/share/kolla-ansible/ansible/inventory/* .
( Z, P( V/ ^3 a& d1 T4. 安装Ansible Galaxy依赖
7 M" L4 M6 {$ d$ Z. |' a6 A4.1 换源
$ x; ~& j9 z: g* ^找到 /path/to/venv/share/kolla-ansible/requirements.yml 4 d+ F0 L2 S# B6 q% `

7 d# ?. C* O: O" k内容如下
/ i0 ]/ e: K; D8 r# A7 ^( z1 }- z# x2 S! `/ D
---
1 [9 T1 ]; ?4 _collections:
2 L# Q- p2 A6 U4 C  - name: https://opendev.org/openstack/ansible-collection-kolla0 |2 l; N6 s6 B
    type: git
' a, D7 Z( q' }' I6 V; r: \  G    version: stable/yoga
* i  x& l. d1 E" A# x9 C修改这个git仓库地址,如果镜像拉不下,建议去拉github的OpenStack镜像) A$ f6 @  y1 M* b

3 D$ |, ~4 n2 r# B2 @9 q% j* G6 Z修改成如下" |1 M, C8 r1 h5 \& D" a% w

* _1 \& b0 |9 x! S' _, [---# R" }$ R0 C  B: y
collections:
# m* N/ b* S. x3 T$ l$ P  - name: https://jihulab.com/james-curtis/ansible-collection-kolla5 D% B% J" @0 b" m/ ~( e
    type: git
  o0 ?7 D6 k0 m0 x    version: stable/yoga  A" A3 x1 s: a* }7 a
4.2 安装Kolla-Ansible-Collections依赖6 G1 H3 g  L2 }5 z
kolla-ansible install-deps
9 Q6 L5 q$ |2 D$ \/ y4.3  docker换源 && 指定docker版本到20.10.*0 Y+ F- s* U" a* i
这里不换源是可以的。但是截止docker 23.0.0发布时间之后再来使用kolla-ansible,首次安装没问题,后续如果要添加删除组件的话就会报错。原因是docker删除了容器的 `KernelMemory` 属性,但是kolla需要读取,导致数组下标不存在报错
' k7 n. R' m: O4 D) i9 b4 Q7 t) ^' |; ^7 Y: h- ]
请参阅:Kolla-Ansible deploy部署报错 KeyError: \\‘KernelMemory_JamesCurtis的博客-CSDN博客* s# ^: E5 ^1 {
& P4 b+ N# @1 V2 [1 O4 b" ]# K
sed -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.yml2 a* K! J" G& y1 L8 X* M
sed  -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
; ]3 W' w8 l6 \0 Y! e5 B4.4 配置Ansible
. _  T& Z( e( A9 W' ?mkdir /etc/ansible
# V$ Q1 |+ Q$ s" ]) r  w2 techo "[defaults]1 [" A, a( _9 d! P
host_key_checking=False
! r1 s( |. l5 X; y+ ]" upipelining=True
% J4 |. r# x) |: b7 Tforks=100" > /etc/ansible/ansible.cfg
) a* O. O% l$ a* h3 s7 A& G5. 准备初始化配置
1 ~6 F$ I% U6 V4 u2 |* V( @5 r' v如果单机部署,你也可以跳过此步骤,然后使用 all-in-one 清单,后续如果再增加机器可以切换回到 multinode 清单,只需要注意修改好机器主机名就行。" A" a0 g$ Q9 Z  j
$ O; _7 Q# o: B1 D
对于all-in-one虚拟环境中的场景,将以下内容添加到all-in-one清单的最开头! R6 z, D( M7 h

7 {- c# T$ z) @; b/ Jlocalhost ansible_python_interpreter=python
  y! H. f3 y# C6 U5 X, m- U5.1 修改配置文件, f3 f; s1 C, b, K
我这里使用3+1机器演示,) i+ C5 M  i) t; ?9 o6 Y- A

/ d& O% N+ j. q' n) z+ I1 x 部署机:10.10.1.80/243 h# J6 r( X0 a* v

0 S" _9 P2 z$ x2 n- c节点01:10.10.1.81/24 control01  F* L! C' r8 B9 Y

6 Y: Z5 o/ N; V! y节点02:10.10.1.82/24 control02  P  u0 T9 K' V  D9 F
) a7 w8 G) |9 M2 q
节点03:10.10.1.83/24 control03
0 [2 X6 a0 H4 p5 E1 W. z! m9 b' S% N3 _
这里仅仅展示 [baremetal:children] 节点之前的配置文件,切勿照搬!!!
9 L& }9 r  e* a; I
0 P1 i  Y$ O5 n+ l( l# j  e# These initial groups are the only groups required to be modified. The
7 w( a" ~# t3 p% D$ h7 A# additional groups are for more control of the environment.$ q: y  @$ ?, m) j$ p
[control]* \; F6 o* [6 m* N* X8 f
# These hostname must be resolvable from your deployment host
2 H$ j0 Z& a( h0 G- V2 p: U  Bcontrol01  hostname=control01 ansible_user=root ansible_password=1/ C; t* ^% Q. s1 a8 G
control02  hostname=control02 ansible_user=root ansible_password=1
! {% _' v  Q+ I4 C' Ycontrol03  hostname=control03 ansible_user=root ansible_password=1
& k, f/ I" T6 [; U- b1 Q* z
" S; o3 P( M6 b: `# The above can also be specified as follows:/ U4 w) \* v. o: M4 C0 C# W
# control[01:03]     ansible_user=kolla3 A* [1 \& b( D; N5 l: W
! t0 n+ @! T7 U1 K9 o
# The network nodes are where your l3-agent and loadbalancers will run
# }. |$ e& X% g5 N6 _% t# This can be the same as a host in the control group
5 T5 q5 m/ g/ g- O+ h/ c! W# d$ G# [network]1 Q. _( d1 n& a4 f
# network01) F3 h6 M& h9 L+ C
# network02! N9 u' \( ]$ U/ F

" N+ P$ T2 Z. @. s  J# when you specify group_name:children, it will use contents of group specified.6 j5 }/ Z$ J% q- `
[network:children]9 L( _7 e1 \' ?; r; w  p
control+ N$ T8 X, o" @. Y& b% k: H* _
0 Q  j# {( ?3 ?3 `7 s
  M/ A; {/ d( l$ @- N. j4 P
# [compute]
8 w5 S5 S" C, B( J  E# compute01
8 x* \6 Z" m: W9 E[compute:children]; S) L' s9 s: H. p* r
control9 t$ q, T1 y* t  W1 T* W5 L

3 b7 K& c. X: [+ F  Q$ a[monitoring:children]
7 n5 F0 k# Z2 c. C4 w9 P# d, l) r, vcontrol% k/ g. l! {9 r5 r+ C; [& x
# [monitoring]6 }% {- p3 l6 o
# control01   ansible_user=root ansible_password=1 ansible_become=true
6 B  O# O) c+ x) Y9 X0 x# monitoring010 ?$ Q' k; Y% a; ^0 o# C, t& Y

1 @5 H6 g0 u* O# When compute nodes and control nodes use different interfaces,
( ~7 e! D2 i" r& k# you need to comment out "api_interface" and other interfaces from the globals.yml
# j0 p' D3 F0 x0 y2 G2 L# and specify like below:; D2 f, s$ C) p, l, f
#compute01 neutron_external_interface=eth0 api_interface=em1 storage_interface=em1 tunnel_interface=em1
" U' [% p. q3 J( Y  e- q$ O9 r$ I8 g' ~
# [storage]4 B& ~. d* q$ u4 S! u. b5 o
# storage01& j* |8 p( ]3 @( i3 g
[storage:children]
1 I7 ?6 z' k! A- ?control! y5 m# \& a1 }. W

+ k* p6 K- i& L9 B( F  J; p[deployment]
8 |( W) A. g/ B% mdeploy       ansible_connection=local
1 `, `. _+ S. N, ?" i
, X. T0 S: a6 B- A9 S8 M# 下接[baremetal:children]
) h2 Z  H' r4 V* Z5.2 修改hosts- |  h) F6 W" H: B0 t
如果使用 all-in-one 清单,这一步也可以跳过6 O6 e" j4 H; s( k) B
; W: T! P9 S7 f# |! f% c; r) e! t0 z0 T
编辑/etc/hosts文件,注意替换成自己的机器的内网ip
8 u3 E2 u: r0 G" k- w* p) \
& |! X4 q  [6 A* d9 }8 k- |$ G只需要修改部署机。后续使用bootstrap-server命令之后会同步到所有节点% J7 J, |3 e: d- m
1 }; s3 \& m  u" r: d) e! M
# 这里是deploy机器上的文件
& ]' W7 `+ ]6 r127.0.0.1 localhost: P, A" ~+ A' f
10.10.1.80 deploy' [" P+ O) i7 N4 I1 v
10.10.1.81 control012 C# ^- T5 X# [) [1 N: y2 \
10.10.1.82 control02$ A5 L/ w8 X% i
10.10.1.83 control03
. \) O6 K- e% Z) I  I' \5.3 安装 sshpass
) o/ Q! i* K/ A+ F2 G& I3 dapt install sshpass -y
% x& U, u8 ?' T' u5.4 配置ssh密钥对
0 u4 `0 q# d3 p7 Z% zssh-keygen% o  N( N: s, _2 w" U) U
一路回车. {, f* `5 g) o1 ~

  i2 V- H$ k5 z/ Assh-copy-id 10.10.1.81) M* b3 J% r# H( x
# 注意替换自己的内网ip
" d, X8 }9 _7 W* K% k6 `输入yes同意指纹,然后输入密码。就可以了
2 @( P( T' R8 n4 _  k
; f" x+ o; ]/ W' r, \# 看下如下提示就是成功了
* v3 m- ~4 e( G/ q4 uroot@10.10.1.81's password:
2 J) t. G5 o% o- }+ M, B1 W& ^+ w( \5 f1 |2 N) z! q
Number of key(s) added: 1
' S  U* c3 a; [' O
1 Y! x& ~* l7 S% ?  D4 z5 m! Z/ LNow try logging into the machine, with:   "ssh '10.10.1.81'"
8 Q, A! ]; p7 I- M4 @and check to make sure that only the key(s) you wanted were added.8 S% @) `$ n6 q
/ F1 ^2 |3 d! e: }7 }7 R
5.5 检查清单配置是否正确
- I' s$ a( Q  Mansible -i multinode all -m ping
5 ~- t6 F& c6 k. N& u/ E" _& k返回下面结果就是成功
4 q, P2 O' m9 j3 L2 I# `( F
8 E# N; X0 s# K6 s* F( j(venv) root@ubuntu:~# ansible -i multinode all -m ping
4 F5 M0 T2 E3 t0 i9 d& a/ ~[WARNING]: Invalid characters were found in group names but not replaced, use -vvvv to see details) h- f: P5 I+ o% [$ P
localhost | SUCCESS => {
5 i5 a' m4 }% O" f6 P2 G% s    "ansible_facts": {5 r- m2 X. k/ H, v. {
        "discovered_interpreter_python": "/usr/bin/python3"2 o6 H5 v: u$ d
    },
% H9 {; \  ]: Y; p    "changed": false,
1 B5 ]9 y3 k2 B( t( j    "ping": "pong"$ U% F5 |0 d7 u( B6 Z8 b
}5 U+ u7 z! ~$ p: M$ K8 z# F8 R
control01 | SUCCESS => {
) Z4 P  B1 x3 l* |1 }4 e    "ansible_facts": {% U% Q8 o9 F1 q' w
        "discovered_interpreter_python": "/usr/bin/python3"
2 y3 X: k) Y/ `- L/ Y" \3 N9 L    },9 p+ [% `+ a- M# D5 X; ^
    "changed": false,
) Q( O) m0 G3 Z$ Y/ g' n    "ping": "pong"
, O  c  n' V& ]8 t}  i8 U  V. ]3 w0 N# C
6. 生成密码
! J6 z( ?$ ?1 N$ o, `5 A$ J. Gkolla-genpwd. Q- e' q( J* c- u- U
7. 配置globals.yml$ l  T8 F2 o( Y6 z
先安装一下vim
' [4 w9 q5 h9 p% s- [7 b% S- S) O
+ Q) U) C$ ~2 J" a, v) o1 Uapt install vim -y7 }8 D7 T, O3 `+ U2 t, c
编辑
. M* e0 @; F, {) I, b/ \' {
& `7 ]5 H: T& j( N* n5 \vim /etc/kolla/globals.yml1 w1 n/ s0 f! a3 Y+ y
先不要进入编辑模式,输入下面,显示行号9 h, O, ^6 s, p" M* p, p- P8 T
2 K3 I/ U8 L! \! Y2 X- ^7 I
:set number
( x% c; W' Q, t7.1 修改基础镜像发行版
9 ?3 f5 m0 K& K默认是centos,要修改为debian。默认的centos有一些镜像不存在# i. O# e) n! Q  A7 T5 _; r& ~7 O5 d

+ w# ]; J0 y" X0 z0 z2 S  \7 xsed -i.bak 's/#kolla_base_distro: "centos"/kolla_base_distro: "debian"/' /etc/kolla/globals.yml% C. b* `0 _6 p  T
7.2 编辑网络接口
6 o0 _% A4 A+ P! E0 M5 L4 {3 w6 O; j  A这里,vim的基本使用不在赘述$ A% U5 ^+ z# J
0 D  A' A- c( @7 d
搜索第一个网口接口,并修改为对应配置(可以通过 ip a 查看接口名字), q* ]  [! H+ s; |7 _

9 i: [# B3 G" S 设置的第一个接口是“ Network_interface”。这是多个管理类型网络的默认接口。& w' a2 w1 V6 @! o7 \7 T4 x) ^, Z6 y

" [: l) G5 Z# s0 h" e, inetwork_interface: "eth0"* P# q/ F; Y, F; Z
搜索并设置第二个接口
: ]1 r8 c8 j9 w( g+ B" v) T: e2 g4 m9 M9 V$ b5 v
所需的第二个接口专用于Neutron外部(或公共)网络,可以是vlan或flat,这取决于网络的创建方式。此接口应处于活动状态,没有IP地址。否则,实例将无法访问外部网络。% P3 s5 p3 {5 H: s3 i1 P
' N  f& j& q. H0 _
这里说人话,就是第二个接口需要给他一个空闲的网口  Q4 n4 a# g( z& \8 i8 Y

% f9 C" c2 k9 ]# K! p# qneutron_external_interface: "eth1"
6 ^, F2 Q6 U) a" S搜索并设置浮动ip: [( {' i; m- q+ \
% c. b# z* L/ u& o6 h  C
接下来,我们需要为管理流量提供浮动IP。该IP将由keepalive管理,以提供高可用性,并且应设置为在连接到我们网络接口的管理网络中不使用的地址。: Y% Q( ~7 k* ?0 [, X3 o. }

9 W. y0 d4 @% W1 G' y  d1 H这里说人话就是,浮动ip不要和network_interface中的地址冲突(一般是DHCP),比如说network_interface所在DHCP范围是10.1.1.100-10.1.1.200。那么浮动ip就不建议在这个范围内,而应该选择如10.1.1.201
' w. I) x/ p0 m) j. o- g
5 J5 H% [0 x* D: U. i% Fkolla_internal_vip_address: "10.1.0.250"
& f' v" l  v' v5 I2 C编辑完成,按下Esc,再输入, w! O0 K1 b$ i; y# ]( d

  Z8 T% [6 E' d' E% N- s" a:wq& G4 U) r+ i2 V  }
保存退出7 b9 `$ B. r; I; w- k" U
" r4 O) O3 j3 _
8. 部署+ \8 r8 S7 k7 y) Z5 N9 K  U# P& q
8.1 docker quay.io换源
2 [4 s0 D* G; ?+ \# Ssed -i.bak 's/#docker_registry:/docker_registry: quay.nju.edu.cn/g' /etc/kolla/globals.yml6 I* e( r' w8 P3 J
8.2 引导服务器# A; E2 x  d  p& E
kolla-ansible -i ./multinode bootstrap-servers
* B6 J, U! r5 S& K, `完成后检查docker版本,确定在20.10.xx。不然后面所有使用kolla-ansible的改动都会报错KernelMemory2 {4 ^' p3 p' ?0 s  w! u6 |7 a
" L7 j! o7 ], V! O5 ]
确保Server: Docker Engine版本在20.10.xx就行! X* @! q( }7 N
% f$ ~. j* U7 S$ Q
(venv) root@ubuntu:~# docker version3 K( {  k2 k9 i# `6 [
Client: Docker Engine - Community( ]$ g% ]( R( {- Y* x
Version:           23.0.0' M, k! s: n; F* h7 G0 Y' G, l0 y3 f* x  W
API version:       1.41 (downgraded from 1.42)( V4 P. `" F2 A0 `
Go version:        go1.19.5, L1 o3 t6 v* _& w/ ^
Git commit:        e92dd87
' K! a! g* Q& ~5 w- S9 [9 ]6 {! n Built:             Wed Feb  1 17:47:51 2023
* b! W# P6 j( \0 { OS/Arch:           linux/amd64
2 f9 _" X/ b5 v) }3 P; _" b7 Y# t Context:           default
9 N. D2 u! {! _5 ?0 M& [2 \# w
' p, A% y1 M) SServer: Docker Engine - Community
0 V. s) h& h' }3 C! v1 o. P Engine:% P9 A  s% `" K' \6 N, \8 H
  Version:          20.10.23- B% J  v' W' ^' g
  API version:      1.41 (minimum version 1.12)
. ~7 W2 R' r# J1 z  Go version:       go1.18.10! K7 B. l, f3 N& Z: r: }
  Git commit:       6051f14
! e! t/ \( F7 u  Built:            Thu Jan 19 17:42:57 2023
1 p0 h  ]4 j" ?+ i* f( l( d6 I3 G  OS/Arch:          linux/amd64
/ |- S/ x) x# X/ S, b  Experimental:     false9 C+ L- ~# B9 {1 G
containerd:) `. f- W4 s& H6 L5 V; n
  Version:          1.6.169 C  y3 `2 M# h1 Z$ o
  GitCommit:        31aa4358a36870b21a992d3ad2bef29e1d693bec
5 C* Y9 l: y! m: V& J runc:; v/ i! j$ |- z( J  @# _. Q% b
  Version:          1.1.4
+ p( N* _+ g+ b* ]' n2 k1 ?  GitCommit:        v1.1.4-0-g5fd4c4d) L* {! E3 \3 F  J, l
docker-init:% R; Y1 C) X) `/ P2 A
  Version:          0.19.03 l: y' V' P# K
  GitCommit:        de40ad0
/ X- i( K: A/ W2 M* y8.3 对主机进行部署前检查  |% G- _, @8 z: v) B* {
kolla-ansible -i ./multinode prechecks -vvv; S0 ?! A# M& a& I3 C0 g1 b) h
8.4 最后进行实际的 OpenStack 部署1 b' V( q1 z. A9 d" }$ H( q/ {
kolla-ansible -i ./multinode deploy -vvv2 b' M( p. {( j8 x+ c4 p
当本脚本完成时,OpenStack 应该启动、运行并正常运行!# Q! J9 B+ ^7 |, _
* K1 i3 g0 G2 ?2 h1 m
PLAY RECAP ******************************************************************************************************************************************************************
/ P' I# c7 ]% ]; `6 J2 Ucontrol01                  : ok=308  changed=218  unreachable=0    failed=0    skipped=169  rescued=0    ignored=1   
+ j4 {6 Q1 @, [+ P! s! elocalhost                  : ok=4    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
, M" }- y; P/ G% B8 a4 f: m6 G  G9 N# A  @, M
访问浮动ip地址就是前台页面,如果显示证书错误,那意思就是密码错误; u$ P: {" H0 O" L
  l) ?, g5 P3 G, _! y3 s1 B( J0 }# n
: l! T& B. J- D0 h) l" M( w

) |, J/ D8 M! Z: n. `$ U账号为admin
; j5 r" s, M# h6 T- y
% J( J' o, A2 r/ `7 ?查看密码:
# o1 r  o6 s! z+ N+ X: K7 V6 p( B, I& ^
也可以在post-deploy命令执行之后,去这个文件里面看/etc/kolla/admin-openrc.sh
9 {5 p& c% Y  d2 c, g' N8 H/ x. ]
5 k$ C6 ?8 u5 ^  L: zcat /etc/kolla/passwords.yml |grep keystone_admin_password
  U1 o3 M; C( ^. v% P4 m/ O( s: k9 i, h5 |

) ^+ X" [) C7 Z. k4 \9. 使用 OpenStack ' I' p/ A  g: N' O, U7 i6 t8 B
9.1 安装 OpenStack CLI 客户端+ V, t( ~/ f5 G* {
官方命令(网络能通的可以试试)
* J. t/ _. o8 G) M- h8 b' C. W; Q. N; w& H8 a& S& q6 M
pip install python-openstackclient -c https://releases.openstack.org/constraints/upper/yoga
+ {+ d/ Q. T/ t5 U如果文件获取不了建议,打开这个链接,之后会跳转到. J9 b: ^% s( _9 W/ O( D
https://opendev.org/openstack/re ... per-constraints.txt
2 r4 x$ d& N/ a+ a7 @; V再去github的OpenStack镜像,即 github.com/openstack/requirements% e: F7 x' F# f% |
然后克隆这个仓库到jihulab.com. p+ L  \' \" N! t8 P  R

0 P! |" E$ o1 o: C2 d. s" I) T记得选择对应的分支
4 h3 `" B2 p, T$ i1 C7 I1 A* G. M6 K  K1 B0 ^
- |) \5 s8 ]" G( j3 N# s9 k* t: l3 p- s# q9 w( l0 J8 c

- \8 r  x% ~" e% p ,接着找到对应的文件5 W2 P" z7 T2 M& v2 g4 `

; L4 ?$ o3 K  h6 X
: c/ _0 B- X' P$ ^: ]7 y" O, R6 Y& D
打开原始文件,得到下面链接
, P( I: d1 S2 Z( X1 m8 O( f
+ r( R- B3 q/ V( U: ihttps://jihulab.com/james-curtis ... per-constraints.txt! o/ b' ]8 n, X2 I+ N
替换官方命令,并执行
* B2 Q$ {2 n; ^& ?) i1 Q9 p- m
! I+ O0 c, M+ H: p8 P+ S2 Opip install python-openstackclient -c https://jihulab.com/james-curtis ... per-constraints.txt
* C, a# }1 K8 }' y2 I9.2 OpenStack 需要一个 openrc 文件9 R& k7 C: I. c1 M& j5 C/ d
其中设置了管理员用户的凭据。要生成此文件) n, e8 v" V+ v( R( m& Z, u, |3 y

" t. V# L$ q: O+ i: Q' ?' y6 P! Wkolla-ansible post-deploy; _" Q+ |9 S; h" R0 ~0 h, f
. /etc/kolla/admin-openrc.sh7 @1 x2 ?% e: j' d. x  l
.(点)+(空格)+可执行文件 == source+(空格)+可执行文件
+ O0 g. e' i5 K7 i* X3 E9 X% {/ W) a; c: D3 ]! B! ?: Q
接下来就可以使用OpenStack CLI了# r# K$ m7 U* O3 O

" W; d( |  e4 C至此OpenStack安装完成
# J6 M2 t$ f) s6 x* ]& u  G# C! `
后续:1 x- l* t5 N  K" g' j

7 f; ]% Z: f7 V7 H( a" t9 QOpenStack使用Skyline Dashboard面板替换默认Horizon面板) {$ ~8 m- \0 R+ x
OpenStack增加节点或者减少节点,横向拓展节点
2 Y. H: c; d6 ^( y& A/ _% w2 hProxmoxVE+Ceph+OpenStack HCI超融合平台搭建,配置Bcache加速Ceph SDS4 e# f2 E0 P  {$ d' }2 T
6 Q# `! `: w8 x( C' F
) \& \5 F! x5 ~# q
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-6-12 00:16 , Processed in 0.014510 second(s), 22 queries .

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

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