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

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

[复制链接]

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
发表于 2023-4-4 15:20:58 | 显示全部楼层 |阅读模式
前期准备
& Y) {. K' O3 m本文环境
6 V9 H" j# w' c5 I9 }& u" r控制节点:controller
  q5 H1 q7 c$ E& x9 A, W+ w7 I" I
& o+ i0 g1 i! C# {# h8 E计算节点:node1# N, W5 O1 A8 h  c& ~1 H  p1 L$ ]0 s
# F" v# V8 B) S$ W0 j. h
OpenStack版本:Ussuri. ~( b3 w  z3 Y- f

8 u& g8 t- }/ S6 m; p3 C8 ]操作系统:CentOS 8 stream 6 Z1 P" f3 B6 k. d0 i, D- t% O
, j0 Y5 k/ J' }; h% b6 K5 \. W
最小配置要求1 c4 f, o1 x+ o. c7 A
8G内存,40G硬盘,三网卡
  A0 G' Y3 i7 p, B5 E# l
. b1 C, E( C6 D8 {更改主机名
3 X6 m$ m& ]& E0 f* g. H. {控制节点9 G7 a' v; n7 m& M( T; G& }

% ~1 I6 Q  |9 T  `( I- O" [6 Zhostnamectl set-hostname controller4 W6 b- d! _/ Q8 ?
计算节点7 L) t' G" `3 Z6 R

$ Z0 z5 {; N) O7 ]  Khostnamectl set-hostname node1. b. \0 Y) L- t2 A9 _$ [: K: @
主机名解析
3 m' w* a, ]2 f9 i2 k% Y0 D编辑/etc/hosts,增加条目(所有节点)
- _8 J4 S- R/ W- h0 b" P# U+ E
6 s2 G; r2 J: B$ y& X' s2 P% t9 H192.168.13.133 controller ; F" _: z4 g4 \- }% Y
192.168.13.134 node1
* z6 m- v' o8 W4 ]) a# E创建cinder-volumes卷组(可选,用于LVM)
4 U! [: O) }9 S所有计算节点,准备一个分区用来创建vg,这里创建一个sdb1的主分区) q; z+ f; A+ G( t3 p  R3 ^
7 b& H& w' [% j
fdisk /dev/sdb
+ ^0 h$ p0 E4 G1 W% P; n  n -> ... -> w  # 依次选择
2 b: B# |, b. `/ V& v* W, ^. M  n: L) L* E% }; ^6 ^) I0 y, o9 W; K2 y3 D
// 刷新分区表
, y0 o. `1 @* z' M9 }, \1 Rpartprobe # l: ^9 o6 x( y% O$ P
0 D0 G8 ?2 t8 C; O2 ^# O
// 创建pv ; H+ ]) m1 d6 r# g" T
pvcreate /dev/sdb1 $ c6 |4 Z0 I, h, J2 }( j
' A' m: h7 c8 k8 l/ s7 G
// 创建vg
0 S: s  |4 a" o, G, ivgcreate cinder-volumes /dev/sdb1
5 D2 e0 Y) w1 g  g安装依赖& R. q! @2 D. z/ a  n! f) ]- k
cd /etc/yum.repos.d/
. S3 Q8 ~/ J. W7 K* K. kmv CentOS-Base.repo CentOS-Base.repo.bak
4 N* K' c6 x. e5 q5 ~wget -O CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-8.repo
6 H! h+ y/ e4 ~" j$ X' S6 ^- d9 J' S, O
dnf clean all
) ^2 H  j0 g* Odnf makecache
  C& I* N( y; J" B+ J2 Ndnf install epel-release / }* `; v0 Z& y, m2 T" g' X; u
dnf update 6 \) s9 H2 Z. U3 s

: Y9 ]8 I( C% U& hdnf install -y make gcc zlib-devel openssl-devel python3-devel libffi-devel python3-libselinux( t7 k+ p- q6 v+ Z9 ?' Y: L
1. 安装Python3* n7 l# s1 y) z+ d) T2 f

3 E% v- U% E+ I! t3 S- Swget https://www.python.org/ftp/python/3.7.9/Python-3.7.9.tgz 3 u0 m( e2 h* e6 d! b- P
tar -xf Python-3.7.9.tgz
0 ^% ?0 _. b$ ]9 X% qcd Python-3.7.9/ ) ^8 a- |" S- W; n
./configure --with-ssl 6 @1 h. w3 @) y7 |8 P$ ^
make -j 4 && make install
- u% u9 X& p( b5 G2. 准备Python虚拟环境(推荐,非必须)
* @+ e8 @+ W; @) s+ _' [+ N1 u- O7 L, G" D
创建虚拟环境8 d! D1 `6 m2 _
# // (/PATH/TO/venv,这里使用/usr/lib/python3/venv)
, y$ T! K- I# W( p* H3 \  opython3 -m venv /usr/lib/python3/venv
$ q+ B2 R$ s7 g+ H0 B. ^, Qsource /usr/lib/python3/venv/bin/activate2 L  p9 Y* N6 i
升级pip
* c% |# F$ p* T$ y0 ppip install -U pip
% _# l5 C* l( g# @: V. w3 }8 |如果启用了虚拟环境,后续所有操作需要在虚拟环境下进行0 s" M, J2 T; r. j
$ G8 |' Q. S0 m0 \/ n2 e4 h0 K
参考:+ A$ M+ E- T2 A

9 f' b7 }: v  ~0 ^* e8 r6 P% h+ Shttps://docs.openstack.org/kolla ... l-environments.html% p1 ]* I$ L3 Y! S

( f8 ~: U0 ]  c, Q+ T3. 安装docker
( V+ R. g: W  F* @  _! W
# t2 s( H4 u7 F* q安装docker服务(所有节点)" H2 ?5 ], V/ Z
cd /etc/yum.repos.d/ 8 q9 K8 n2 }* d3 z" a" p/ s. i
wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo 2 ~4 W4 m$ t: j& t$ W) L

0 ?$ p1 k  t' Q, K* |& m// CentOS8 需要升级containerd.io版本 . i  t' d2 n* @+ ?# Q- n% W2 S
dnf install https://mirrors.aliyun.com/docke ... -3.1.el7.x86_64.rpm
& S- M# `2 z3 K$ p0 A2 o% [8 wdnf install docker-ce docker-ce-cli
, s- m8 E; \# o* a
1 J- b+ @/ Y* |3 M/ r1 A1 |: ]' ~systemctl enable docker.service
4 s+ v0 H$ i3 B! esystemctl start docker.service/ G8 l; g. \1 P8 F$ ?) k4 @, _
镜像加速
9 j8 \& `( |7 j. `$ H! Z; y0 ]4 o执行以下命令,修改docker源
; P1 {) O: A5 ]tee /etc/docker/daemon.json <<-'EOF' ' D: Z% u/ }& t' }" n2 X. q- O
{
. s6 Z8 e7 m5 v' G4 s+ R    "registry-mirrors": ["https://reg-mirror.qiniu.com", "https://hub-mirror.c.163.com/"] - S# ?/ i- i% M
}
4 ?- w1 e% _8 m8 R$ W" `EOF! @% ]+ S3 m: s, z3 V
安装python docker模块# z* l) H* y7 ]# }/ _% ~# K4 E
pip install docker9 T# z( f( O( f$ m* M4 a
4. 安装kolla-ansible
0 ?0 I6 @$ C4 P- ~$ X  B9 S! N2 ?/ `. S* X/ M3 p, c
安装ansible2 J1 Q( W2 _  ?
dnf install ansible
5 L/ g, G9 X8 V$ M  h, \' _安装kolla-ansible
: P. G! [/ z; \9 G8 s4 E7 z可选择源码安装,或pip安装,这里使用pip
- I0 p1 Z# ]9 J2 G6 P7 U
3 D: e, G/ z5 k0 S* Zpip install 'ansible<2.10' ' g7 m1 y- u* `
pip install kolla-ansible6 h; Y; M5 j) e* D( u6 R+ h% L6 O
创建kolla配置目录
1 k; v& [1 D) H' Y, K2 ?! L' A  ?, ]sudo mkdir -p /etc/kolla
7 ?& W* z9 P, `$ i5 y) ?2 _sudo chown $USER:$USER /etc/kolla/ E3 G& A8 q# e0 J6 U) x& j# J9 I
拷贝yml配置文件
# W" {' F0 N; b; V1 O' G8 Z6 gcp -r /usr/lib/python3/venv/share/kolla-ansible/etc_examples/kolla/* /etc/kolla$ S. ^! r4 i3 l8 U
拷贝all-in-one、multinode 清单文件到当前目录(任意工作目录,这里是在root目录下)
7 N/ Y" m2 w! l* ?cd /root
0 w# }" `* f* {' L+ V7 _! C1 j" \cp /usr/lib/python3/venv/share/kolla-ansible/ansible/inventory/* .1 p; @, v  S. i( C. ]: U
编辑/etc/ansible/ansible.cfg) z4 u0 e% l% o* a
[defaults] ; \/ S8 L" w- j. P% `4 x
host_key_checking=False 2 j' g. Y7 ?3 @$ `$ T, {
pipelining=True & L6 ?( q% I/ r6 L" C6 d1 o
forks=100
' @) u2 J) I. P% x( G% T7 d5. ansible初始配置- U6 p/ @) g2 a* Q

% W! G) N& t8 g1 n; T9 R: p# V打开当前目录multinode文件
; M: T9 Q4 w$ j1 S修改IP、用户名和密码,并对需要安装的内容进行调整, ^3 @$ a" g' G/ s0 T
[control] 3 l9 m7 ^1 I" {4 L3 r
10.0.0.[10:12] ansible_user=root ansible_password=123456 ansible_become=true
! i2 |" q/ B! x& Z  W( d. w- \# Ansible supports syntax like [10:12] - that means 10, 11 and 12.
2 _0 q, H7 y6 O  ]6 j5 L# Become clause means "use sudo". - A9 O' f3 N7 o. j* q

4 m! U  R- ~2 E  c[network:children] ( |/ Q% C: U0 ~' l1 w
control
9 H* x# i& e, I; q# when you specify group_name:children, it will use contents of group specified. 3 ~0 v; o8 G/ I3 E, L' ?" Q5 x( [# m

5 X' J* {9 y- _7 x& @' U[compute]
3 o  ?1 E& l3 G* p0 W" ^" B; l10.0.0.[13:14] ansible_user=root ansible_password=123456 ansible_become=true . Q+ Y) l7 B4 @1 M& h
# Q3 C! g0 e; K* U
[monitoring] 10.0.0.10
8 x, p. p* n  k7 L6 T2 U; j2 l# This group is for monitoring node. 9 F5 ]* @  X0 P" t& v& _
# Fill it with one of the controllers' IP address or some others. ; H0 \0 c! O7 n$ |# a8 R

' j5 U* u# t8 G' d[storage:children] compute [deployment] localhost ansible_connection=local become=true # use localhost and sudo
' n. y) I0 G4 Z9 [5 r2 E' j3 }( s  O+ H
.. (略)% A# R5 w4 r" V! G: n0 U
检查inventory配置7 t6 B; x% J/ G/ R0 p
ansible -i multinode all -m ping) u2 t- T# ?9 N( n* J! _5 @7 [
6. 配置passwords.yml) O  M- R; B- j' w$ g* f5 G0 |
" }" d- y  ?- k  a
/etc/kolla/passwords.yml里的初始密码为空,通过下面命令生成随机密码
- |% w& P# P- I% @' `' V6 s  z. u7 j3 ]6 A+ m
kolla-genpwd
$ @( n9 a1 s. W/ S% k8 j此时,如有需要可以手动编辑passwords.yml文件,更改组件初始密码,如keystone_admin_password。+ I' w/ K$ n2 ~
- J9 b, ~$ J( v) d" N/ o
7. 配置global.yml
; {5 C) i/ M- j! x: k7 U' y% V) V3 W
global.yml是Kolla-Ansible的主配置文件,编辑/etc/kolla/globals.yml文件。
  }6 F9 P+ R1 H  }6 j8 E* B$ Y7 J5 j& ^: h
修改镜像选项
& ]2 f  p4 r( [- O' Ykolla_base_distro:默认为"centos",如果是其他发行版需要手动更改。! v9 D( d- D9 Q, A1 R

+ V7 e6 _8 c! i$ I* A9 Tkolla_install_type:默认为”binary“6 D/ i0 W/ |. q0 V3 R% u: U5 n
2 H, F6 ^6 f% V/ Q0 u( q; S
修改网络选项' @8 S5 Y0 G; [, p
network_interface:管理网络接口,默认为“eth0”+ W  S+ c. x! }

9 s: A! w5 [! o! T$ Z, Q7 q4 A6 yneutron_external_interface:Neutron外部网络,可以是vlan或flat类型。需要激活并且不配置IP。
) b* l% T7 B; o+ |7 J2 L) D, j7 c) w" U
kolla_internal_vip_address:管理的浮动IP,连接到network_interface,需要设置一个管理网络中未被使用的地址。- d& [! Q' X$ {& @6 X5 _

3 f# k5 e+ ~7 d3 k- _--enable_*:额外启用的服务,如enable_cinder。
$ c% G, G- b1 A, u$ Q- j, x5 L, J
--enable_cinder_backend_*: 在启用了cinder后需要至少启用一个cinder后端,如enable_cinder_backend_lvm。4 ?& t4 D4 E% D& R0 q# F( P

/ ~) _, ?! f4 Y) z# [2 N5 D$ l8. 部署! j; K2 C9 b( W
! r0 K5 E. f3 E4 F% Z% S
确保libvirtd服务停止
( c5 f2 p! |% B. T! tsystemctl stop libvirtd; e1 D8 Q: |6 {; e# p; K
检查kolla部署依赖
1 `1 D& I, o9 E5 g# {7 T  m& Fkolla-ansible -i ./multinode bootstrap-servers -e ' ansible_python_interpreter=/etc/kolla/venv/bin/python3'* s. d+ M; Z& N3 f/ i
-e 表示加的一些配置,这里指定使用的python解释器: @9 K/ X- m& x( `' G* }7 k5 G

2 g. X. K% N$ j- ?主机预部署检查
5 v. T4 u2 L0 c0 }% n5 k% U2 wkolla-ansible -i ./multinode prechecks -e 'ansible_python_interpreter=/usr/lib/python3/venv/bin/python3'# q0 N* j$ s% t$ L
安装
1 P/ R; o- k9 N1 y5 @8 @8 q  ykolla-ansible -i ./multinode deploy -e 'ansible_python_interpreter=/usr/lib/python3/venv/bin/python3'
4 O' v0 ^  @) H4 \
6 x3 W  p3 Z& ]% U" f4 o5 |6 T7 i6 o+ V: m1 @7 f$ n

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
 楼主| 发表于 2023-4-4 15:22:43 | 显示全部楼层
目标
, h- W, h* g# X1 N" |) J1 A部署OpenStack官方提供的Simple Configuration示例配置中的Web Application和Container Optimized两个组件配置清单。6 B/ d# U' `) Q3 F% m) |

2 K) W1 V- w5 [) j" O+ |4 b; ?( t) `. f+ w其中包括
. n; G5 L7 w6 @( x* I: X  M
- U+ ^8 c' Q  {9 z: ]- a) \Web Application:Cinder(块存储)、Glance(镜像服务)、Keystone(身份认证)、Horizon(仪表盘)、Neutron(网络服务)、Nova(计算服务)、Trove(数据库服务)、Swift(对象存储)、Ceilometer(数据收集)、Heat(编排服务)$ s8 ~7 b: x  R  d, T
Container Optimized(增量):Kuryr(容器网络集成)、Barbican(密钥服务)、Designate(DNS服务)、Manila(文件存储)、Octavia(负载均衡器)、Placement(资源监控)
! ?8 F$ u- S! }! D& ~' k更多OpenStack landscape景观图可以参考官方或者 OPENSTACK LANDSCAPE云原生景观 | OpenStack地图_JamesCurtis的博客-CSDN博客
+ x& P( c) d) @; m& A- K4 `- M* @2 p
支持的操作系统) U$ ?# P  |# w# Q* j3 I) _
注意:不再支持 CentOS 7 作为主机操作系统。Train 版本同时支持 CentOS 7 和 8,并提供了迁移路径。有关迁移到 CentOS 8 的信息,请参阅Kolla Ansible Train 文档。
/ r9 t4 S' G  J2 h" ~! q( g: u9 d* o9 s% U& x
yoga版本支持以下操作系统:/ y7 ^/ A$ l& ~& R' r& e

( F) K+ z- b+ u7 W4 f; k6 jCentOS Stream 86 N# x) U5 t+ d1 u: d4 Q: B
: h0 @8 e( E7 r. e) s
Debian Bullseye (11)
% k& Z6 Y+ [3 j/ y1 V1 I
2 X5 ?+ z: s$ popenEuler 20.03 LTS SP2  V; m( \$ }4 V- q
2 e* ^2 |9 \* M9 J3 ~8 K4 I
RHEL 8 (deprecated)  {0 K7 F$ Z; `, z& I/ g

1 {4 v) Y/ O2 ARocky Linux 8
8 ^# L0 v5 c: P
. P9 K! Y% F2 n) `1 _7 c% xUbuntu Focal (20.04)) y" e: U. g$ U) ^$ c  Z4 J' ]

9 @- x5 a1 X/ j/ T! C我这里使用的是Ubuntu 22.04 LTS(mini安装)
) v) D5 M1 }5 o1 Y2 b
& J, b2 m2 E9 w" h- t- I下面开始安装
# m+ R1 K: k) p- l3 s8 w, p0 `/ L. m3 A1 M4 p
1. 安装系统依赖7 y. y  F- D$ c& j7 K2 P  t1 B
1.1. 更新软件包索引
; V3 o! |& G3 y; Csudo apt update
5 ~* q+ H% I) G1.2. 安装python依赖
/ _4 t3 j* P% X1 msudo apt install git python3-dev libffi-dev gcc libssl-dev% }+ k: \! z2 \7 v! J5 U% @
2. 安装python-venv虚拟环境依赖
3 `0 d  G6 N0 A, B2.1 安装python3-venv1 G( ^% r! f( ^5 l/ r/ [5 U
sudo apt install python3-venv
# s5 `. D: K1 a- W* U3 \! w2.2 创建虚拟环境并激活它8 j8 K3 `% s$ W: D* q
mkdir /path && mkdir /path/to # 也可以自定路径5 G; g" [% L4 Y0 B+ ~
python3 -m venv /path/to/venv0 i( b7 D8 V+ I* u+ _3 l3 T# U
source /path/to/venv/bin/activate0 g$ R) ^7 t1 r$ z
2.3 确保安装了最新版本的pip
" Z+ P' ?- ?, w3 B9 opython -m pip install -i https://pypi.tuna.tsinghua.edu.cn/simple --upgrade pip
  @) P; Z9 P, B 2.4 pypi换源
& X6 M+ l9 m$ R7 \pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
. B9 w6 Z1 \4 w7 S/ @# `% X2.5 安装Ansible
" p: ~2 a6 g5 ~( opip install 'ansible>=4,<6'0 O/ b, W: C3 b; e
3. 安装Kolla-Ansible& E$ M1 x* z7 j4 L3 v2 }. X
3.1 kolla+ |+ b  @8 m  F+ }6 J+ {
# pip install git+https://opendev.org/openstack/kolla-ansible@stable/yoga
  j2 O( Q" \$ v8 t# g4 r# 上面是原版命令,建议使用jihulab.com克隆一份
2 R6 K: D2 X+ C  _6 m1 W1 Vpip install git+https://jihulab.com/james-curtis/kolla-ansible@stable/yoga
1 g& S8 m5 ^, D- ], a5 d1 i: O' K# `3.2 创建文件夹/etc/kolla% {! e( e6 W1 s' `: B
sudo mkdir -p /etc/kolla
) U2 \( |. f  U" g" [5 P# ksudo chown $USER:$USER /etc/kolla* W" C. W1 P+ O6 q; [+ k3 E
3.3 复制 globals.yml 和 passwords.yml 到 /etc/kolla3 W. f5 K8 i6 M6 m
# 如果你使用了自定义路径,记得替换/path/to
5 N1 z; j+ k" B2 |- M9 y+ ecp -r /path/to/venv/share/kolla-ansible/etc_examples/kolla/* /etc/kolla$ V% l5 {; i% m! T: M9 Q  X5 \* K% z
3.4 复制清单文件
5 W! N2 \8 u5 t6 d& s  d* ?cp /path/to/venv/share/kolla-ansible/ansible/inventory/* .+ {* V! o3 }# U( ~
4. 安装Ansible Galaxy依赖. x7 F$ O  l# d$ D
4.1 换源
+ V2 ?/ }% X) U; q8 Z9 i找到 /path/to/venv/share/kolla-ansible/requirements.yml ; Y! `8 s+ Y2 Y2 H' L+ w+ n/ T

$ s' o5 z& h) ]( d2 N! Z6 H内容如下; k% e; @7 i' r& o) f
1 J* c$ Q% e; _
---5 v0 o" W$ K4 w, R# n% n
collections:
9 V1 G3 v# c" \: \  - name: https://opendev.org/openstack/ansible-collection-kolla" R4 h1 I' _- g( k. _
    type: git- E5 T' A$ d3 z
    version: stable/yoga+ n, U. a6 M( c# M
修改这个git仓库地址,如果镜像拉不下,建议去拉github的OpenStack镜像
; ?4 Z5 ~1 l( l3 K0 v- \1 D( \. k' |4 j9 ~% p( I. j
修改成如下
9 m1 h3 Z" x6 m3 @
2 q6 O6 N" Q, s1 O3 b---: }$ J4 Q% z/ o7 Y( m. X9 s: k
collections:
  Y! \/ K! r  d7 g  - name: https://jihulab.com/james-curtis/ansible-collection-kolla! s" D1 j6 Y. d: \9 j- w
    type: git9 ^  W, B0 t  C# X! X; g
    version: stable/yoga
) Z. [* |+ p5 e3 i) g5 M4.2 安装Kolla-Ansible-Collections依赖* L4 F( \8 g9 s  [+ {3 l8 S$ T$ ?
kolla-ansible install-deps/ e0 t/ e, {% ?
4.3  docker换源 && 指定docker版本到20.10.*
; N* E  \# b7 P/ K' E这里不换源是可以的。但是截止docker 23.0.0发布时间之后再来使用kolla-ansible,首次安装没问题,后续如果要添加删除组件的话就会报错。原因是docker删除了容器的 `KernelMemory` 属性,但是kolla需要读取,导致数组下标不存在报错
3 }2 b% q& B2 ~" o. `9 a( W/ J. R& Z* w$ p* p
请参阅:Kolla-Ansible deploy部署报错 KeyError: \\‘KernelMemory_JamesCurtis的博客-CSDN博客
$ I5 _/ n2 N: A" S! ~
9 y9 O$ {/ l$ g- x, a! @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.yml$ `2 q3 a( K% c8 u2 U, 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/ g9 T# W0 [/ u' v9 x
4.4 配置Ansible8 E; Q: i% K- C6 |- R
mkdir /etc/ansible
' c* n' v% g" ?$ l3 a* becho "[defaults]9 m9 d, O8 V1 H! g! v" M% O; v
host_key_checking=False. q0 \, d2 ~2 K
pipelining=True( [* F. B5 v) }; k
forks=100" > /etc/ansible/ansible.cfg
9 J! T. S" y8 |7 B. v6 I/ A5. 准备初始化配置6 t# r$ x$ ]+ h6 v: T7 @
如果单机部署,你也可以跳过此步骤,然后使用 all-in-one 清单,后续如果再增加机器可以切换回到 multinode 清单,只需要注意修改好机器主机名就行。4 R! q& z2 z7 g

) p( w  Y! W- v. X( E9 ?( P; V- b对于all-in-one虚拟环境中的场景,将以下内容添加到all-in-one清单的最开头& U. T( k0 W4 e* Y" ?' Q5 X

0 C  q( K" v, Qlocalhost ansible_python_interpreter=python
9 ~4 M( }& ]" C+ c/ l5.1 修改配置文件" A% n7 ^3 {! b4 C: Y" q- `# ?
我这里使用3+1机器演示,* e' H( l) \( e" T% K# D0 j

, [3 P4 A- E) d  t! w) P3 {1 x 部署机:10.10.1.80/24
7 X5 o. n9 @- H' ~! ?4 e! h: _' d
节点01:10.10.1.81/24 control01- L8 _5 A6 @/ Z6 p: x4 @  s3 B( \  `

& v0 D4 n7 l' L3 `3 V* o9 N节点02:10.10.1.82/24 control02
5 G7 |3 z) b& p& H; K! I/ H4 @' e# a+ u2 y7 {; w8 J
节点03:10.10.1.83/24 control03
! |) B* j/ P# R  n0 x4 g2 a# Z
4 L  B2 X7 K" Z9 ~* R, K# x这里仅仅展示 [baremetal:children] 节点之前的配置文件,切勿照搬!!! 8 H7 G, w' b5 W' A) B+ ^3 P+ [8 m! \' ^
* F6 {0 r$ _3 q$ R! U8 d1 ]4 K2 h, V
# These initial groups are the only groups required to be modified. The
" S* P. r, M) ^# additional groups are for more control of the environment.& `+ }5 B' A. f( D
[control]
- L9 r, J0 D8 b! Q( [# These hostname must be resolvable from your deployment host
7 t8 d; _9 h6 i' O9 [. F# [control01  hostname=control01 ansible_user=root ansible_password=17 m+ Q/ R+ @+ i
control02  hostname=control02 ansible_user=root ansible_password=1% b# ^" H5 Q+ }8 X- G: Z* }6 n
control03  hostname=control03 ansible_user=root ansible_password=1* s. s0 p" z# Q

! I. M9 E% C; L# The above can also be specified as follows:
! T9 j$ Z3 n* K/ q# control[01:03]     ansible_user=kolla
% \4 O0 W3 m1 b7 S: T+ E
6 X" x: w) N; ~  g- C# The network nodes are where your l3-agent and loadbalancers will run
% }* [5 F6 ]: N6 j- _* ^% [. G# This can be the same as a host in the control group0 Q! L) c( D6 g6 Y  E
# [network]- z. P$ e5 S/ c$ b0 o
# network01/ @  L! m; Q9 o6 u) P- _
# network02
6 u- v0 _6 m1 q0 O2 v; |% A8 H, v* s
# when you specify group_name:children, it will use contents of group specified.3 B' J0 \7 d1 d0 S* v- G! k
[network:children]
2 E+ o/ D9 p$ F4 f+ bcontrol
& R& w/ y2 f( q- q  k* Q% y9 c  r/ B, s
$ m) a3 W. d  ^, A9 a* F/ G
# [compute]
3 \! w+ ]( b. b( m8 R! @1 y" a# compute01
) r2 Z/ D4 U: q) x" _[compute:children]
- D. j2 w+ H7 [$ U" s0 lcontrol
5 M* F. a% n1 U; t& o. k3 C: ^: u' E* U# o2 q% R+ h7 I9 F7 @
[monitoring:children]: C7 w& J# f1 L# i9 ^
control
+ o, V! Z2 `  Z" f% Z* _# [monitoring]
9 U% |8 y6 ^) N5 _& ]8 R; @# control01   ansible_user=root ansible_password=1 ansible_become=true# Q' E( O* B! C/ b3 s; g
# monitoring01
4 _  U! T; w0 d; A' @* t9 J% o
# When compute nodes and control nodes use different interfaces,
4 ^9 [0 Y3 x# z/ V5 R) E# you need to comment out "api_interface" and other interfaces from the globals.yml
# O0 r2 h' R" [# and specify like below:
, d$ ]' m) X  s, F9 M#compute01 neutron_external_interface=eth0 api_interface=em1 storage_interface=em1 tunnel_interface=em17 v: c( a; ?$ s& R
3 T, \' U' G* r) Q; d, ?
# [storage]
4 S. p( ^2 ^) z. T7 b# storage01/ d7 t1 O3 q7 R, X! S, o/ h
[storage:children]
' Y5 b& Z2 M" v4 Y* R- Q2 x% m$ j' T- Ccontrol) E0 u6 ^& D* O6 v8 P' z

! \" J- Y% A7 ^5 R[deployment]
% \7 v* I: D: g4 _% w8 G: X" gdeploy       ansible_connection=local1 _( z: A+ A7 g5 G2 b" K  N
, V5 S; d- x$ O
# 下接[baremetal:children]9 B) @, `# i% W
5.2 修改hosts3 A8 A) t% n+ H! Y5 G  u
如果使用 all-in-one 清单,这一步也可以跳过: ~: @6 ?; G' ^4 P
$ g! Y/ U# y6 Y8 h
编辑/etc/hosts文件,注意替换成自己的机器的内网ip2 `8 T5 G' Q; E

, r  S7 y: V3 g4 l/ Q! l* B& p; p4 c" b只需要修改部署机。后续使用bootstrap-server命令之后会同步到所有节点! }0 t) F* `1 c8 K; v# h' ^; e1 U5 j/ U/ i
# o8 L0 C/ [9 r# j$ _/ n, z; ]8 i
# 这里是deploy机器上的文件+ f5 z* q, A8 Q) [0 T! u
127.0.0.1 localhost+ X3 T, I2 c# D8 `3 {  q2 F
10.10.1.80 deploy& `  ?9 l4 J0 \( s7 O
10.10.1.81 control01* Q& c9 H0 D8 z4 V
10.10.1.82 control02
* K4 ?1 p0 x+ ]4 w6 s" G: y1 h10.10.1.83 control03
$ t+ [! W# r! F. A# y5.3 安装 sshpass
" E" h  \3 |  papt install sshpass -y
9 Q$ _3 E8 a) ~5.4 配置ssh密钥对0 S0 |% p# k8 z5 V/ T
ssh-keygen
  X0 Z9 z9 A8 n* F1 o) n0 @3 k一路回车
' C7 l- [, k/ v: I0 X! B3 T7 g- ^% d1 U
ssh-copy-id 10.10.1.81* ^+ m2 {! T! y- {9 e
# 注意替换自己的内网ip$ g1 y1 _! @0 F1 k8 T2 S1 r
输入yes同意指纹,然后输入密码。就可以了
4 U7 {8 F* D7 ^; r# {( ?' r% y. j) X4 U$ E
# 看下如下提示就是成功了
! t  Y: X: C1 aroot@10.10.1.81's password: 5 S* Z1 H' q" |6 V; F; R

! G" h$ Y" e9 }Number of key(s) added: 1- b7 [2 u8 R( U1 B$ e1 y. I
' I, h4 h; W1 I, f+ |* I2 ~
Now try logging into the machine, with:   "ssh '10.10.1.81'"2 l0 ]/ R* K  x# |( B7 I+ K3 \( C2 U: e
and check to make sure that only the key(s) you wanted were added.* A% [& F- S) D: F) C% D- K

7 C  O4 r, o  @( N5.5 检查清单配置是否正确& x, ~) }3 y4 v* u/ M8 h  H
ansible -i multinode all -m ping
7 G4 E( z: c, r% J返回下面结果就是成功
+ d4 j- j9 F. T' S8 K
- C+ ^7 f3 y- S4 l/ U$ S2 v(venv) root@ubuntu:~# ansible -i multinode all -m ping& ~* |; b9 g7 w# n
[WARNING]: Invalid characters were found in group names but not replaced, use -vvvv to see details
9 n% \7 i1 A+ ~' f$ `localhost | SUCCESS => {
0 J! Y; M$ @+ ]: w8 N    "ansible_facts": {
" t% h% E7 w* N  {  a& _' @        "discovered_interpreter_python": "/usr/bin/python3": r- G  r$ s8 O7 U3 V9 l* W% `2 J
    },$ u% c( D4 M( C1 M/ @
    "changed": false,
$ e5 f$ Y$ w% D" d7 D    "ping": "pong"
7 G6 z0 Q% E  d9 Q* d) y5 n}. J! n9 f, E5 ?' Z# e) g
control01 | SUCCESS => {
) o) I# x! E; H" {* E! @2 n" p6 `( m    "ansible_facts": {5 S% f! b3 s7 C& c/ L
        "discovered_interpreter_python": "/usr/bin/python3"4 t5 g5 \& g/ @0 j8 \, S' D, L
    },
8 K3 N* K/ C0 f. J& S    "changed": false,' i. D' _) ~, w
    "ping": "pong": N8 T% l5 F: \8 A8 X
}
) S+ s' o; z8 @) b- H) ?1 [6. 生成密码
; o" D4 \0 C8 n) ]* Vkolla-genpwd( S; C( f7 L) a, l  D9 `
7. 配置globals.yml4 {9 Z  k0 C) V1 U
先安装一下vim
: K6 ]5 t2 l$ h- L6 p2 Z* H
; l/ g+ j( ]: O0 J; B4 c4 Hapt install vim -y
; |' B' r4 r6 S  J1 V9 ?2 \! r+ k/ l编辑
; X: R) n- g0 s- W- O2 T. E
; X' P4 X3 n) B+ Ovim /etc/kolla/globals.yml: w& ~+ I9 W% O! Z( L( C) P
先不要进入编辑模式,输入下面,显示行号* c/ {3 q+ {- v# g" X( x* d

" ?! `# c  S, Z% H) N. y/ A" R! e:set number& i1 T2 x. m" N! N, l* n- {1 M
7.1 修改基础镜像发行版
! Q* h7 h' v* ]8 j9 N$ d) u默认是centos,要修改为debian。默认的centos有一些镜像不存在& ^% u: T( N6 U

% i# [  b8 ~* d( O4 ised -i.bak 's/#kolla_base_distro: "centos"/kolla_base_distro: "debian"/' /etc/kolla/globals.yml
* v  }1 f! F% n7 l0 q! i7.2 编辑网络接口
* q, U6 Z" ], c  Y( y6 N7 X这里,vim的基本使用不在赘述! E+ u/ K" S" j5 q; c; Y7 b
: v' ~3 a1 f# M# S: F) ^" `9 N- _$ \
搜索第一个网口接口,并修改为对应配置(可以通过 ip a 查看接口名字)
; ]) P2 [4 _# q1 M- E7 z
4 n2 W5 E$ n- D$ n/ w9 q5 I9 X8 \ 设置的第一个接口是“ Network_interface”。这是多个管理类型网络的默认接口。% m3 v1 o4 H7 ]$ F# L) @2 `
2 h4 x1 w# h' r. F: k, n
network_interface: "eth0"7 J# v8 P6 W, q( A. ^
搜索并设置第二个接口
8 j- [9 ^, S) X% t9 d! u
! O3 x1 K% |, t) S9 m6 e, ?所需的第二个接口专用于Neutron外部(或公共)网络,可以是vlan或flat,这取决于网络的创建方式。此接口应处于活动状态,没有IP地址。否则,实例将无法访问外部网络。" Z. j5 Z3 w. q* q5 ?) c
) H, Q1 ]% c* W% U5 E
这里说人话,就是第二个接口需要给他一个空闲的网口$ m7 w0 h% }' |
9 b& X. x* Q+ U; u# |* ]
neutron_external_interface: "eth1"% ^2 `; W- U2 d6 l( L; i7 S
搜索并设置浮动ip8 P$ r6 M1 k, @( F$ a- x) _

: Z# p! ^$ a/ G$ w, h6 v0 Z接下来,我们需要为管理流量提供浮动IP。该IP将由keepalive管理,以提供高可用性,并且应设置为在连接到我们网络接口的管理网络中不使用的地址。
& k" B! g! a9 _: x, \+ W7 ]/ \
这里说人话就是,浮动ip不要和network_interface中的地址冲突(一般是DHCP),比如说network_interface所在DHCP范围是10.1.1.100-10.1.1.200。那么浮动ip就不建议在这个范围内,而应该选择如10.1.1.2013 s* [" O6 I' K2 r# N% H" L) k* F

( D# R) ~! y/ s8 Q4 E- ukolla_internal_vip_address: "10.1.0.250"
) r# e4 M/ w4 r- i+ Q编辑完成,按下Esc,再输入- U; L- u! g$ p) E+ y- m1 ~2 {
2 }3 c. z) _. U: H* r4 T
:wq
/ m9 |, ?3 C& u, _& t6 V保存退出" }6 e2 e2 A: u/ `" H% g* H7 |9 F

  a2 `/ j& F- E4 p) J4 U# h& P8. 部署. F! @( |6 D, }! M. V' H* p
8.1 docker quay.io换源$ O+ U4 e! v$ @, Z# @& p* u
sed -i.bak 's/#docker_registry:/docker_registry: quay.nju.edu.cn/g' /etc/kolla/globals.yml& B! h* h3 r2 O
8.2 引导服务器
8 l3 J' c9 Z. _7 j7 O+ M; j7 P/ Ekolla-ansible -i ./multinode bootstrap-servers' q- B. @! Z" y" S
完成后检查docker版本,确定在20.10.xx。不然后面所有使用kolla-ansible的改动都会报错KernelMemory9 p( ]8 B9 W' y& I& H; O  Y$ A

6 P2 ]! ]. _  p; |& ~确保Server: Docker Engine版本在20.10.xx就行
. u' V, T8 Y4 O
" O' _' K" \3 W1 r; @(venv) root@ubuntu:~# docker version. Z* |' w5 S! t' d7 G4 h
Client: Docker Engine - Community
& v  P6 `0 G: H5 d, e: T& g, _ Version:           23.0.0( \' X6 {$ f; ^
API version:       1.41 (downgraded from 1.42)
" y+ G2 j; p2 B& v( E Go version:        go1.19.50 }' w; s9 {: v  ~$ K8 u# w3 D
Git commit:        e92dd87% ~# m  j+ L) C; G$ X8 c2 a0 ]
Built:             Wed Feb  1 17:47:51 2023
  k# a' m' u" G OS/Arch:           linux/amd64" _+ u6 x  N8 f: L! E4 ^
Context:           default
* P: F+ s1 K1 T: s6 d! o( r1 ~; s) V4 ~
Server: Docker Engine - Community( Z  r5 k& p6 B2 y2 J8 ~6 z
Engine:
. T8 ]% z2 q! p! n. [: v: d. D+ W3 k  Version:          20.10.23
9 ]8 Y' r: ^# X# R2 X5 \! Y  API version:      1.41 (minimum version 1.12)  f9 o2 m! r4 Y. M9 ~
  Go version:       go1.18.102 r; T- W0 m, m  D0 I* X
  Git commit:       6051f141 ]) I: y; n( N$ L4 k1 M* S7 a
  Built:            Thu Jan 19 17:42:57 20231 [) v) B! C& O* H; [! h
  OS/Arch:          linux/amd64
2 v1 b( R! c# u+ y/ `  Experimental:     false* U$ u, Z6 |. z/ M  G" G1 a2 G; Y; }! M1 o
containerd:
+ L+ N" k8 C, \+ ?  Version:          1.6.16
# `+ ~0 J3 M# L/ H  GitCommit:        31aa4358a36870b21a992d3ad2bef29e1d693bec$ J" b9 x; y- [; Y" f: v2 h8 E1 R1 b
runc:" c# c+ K0 {9 q3 f$ s+ p0 P
  Version:          1.1.4! D2 ^7 Q0 B8 o8 m$ {" ]1 ]5 [
  GitCommit:        v1.1.4-0-g5fd4c4d4 U% I( z- b) P8 `4 o
docker-init:
$ t5 `+ ?8 c8 I# L+ P% {  Version:          0.19.0  K, I" w: o  b+ w; E* Z* Z$ u
  GitCommit:        de40ad0; H! J+ _% Z0 m9 \) `3 D8 J( T
8.3 对主机进行部署前检查
+ D! j/ t. t) n1 X* m0 R- [kolla-ansible -i ./multinode prechecks -vvv
7 J( ?5 }4 l: A1 e8 N8 c8.4 最后进行实际的 OpenStack 部署% K6 _! |2 s; F. S# M
kolla-ansible -i ./multinode deploy -vvv& ^2 C+ y* Y3 [! H" h
当本脚本完成时,OpenStack 应该启动、运行并正常运行!
' @1 U, R: \0 D/ D  b+ b
7 p* J$ `; N- o6 CPLAY RECAP ******************************************************************************************************************************************************************
$ f( ^: p+ `1 [) f7 L# [- Mcontrol01                  : ok=308  changed=218  unreachable=0    failed=0    skipped=169  rescued=0    ignored=1   4 ^, L' C8 O7 \+ k; {: o
localhost                  : ok=4    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
# R) x% ~5 I( N7 r. _1 _9 G$ \; N1 v9 D
访问浮动ip地址就是前台页面,如果显示证书错误,那意思就是密码错误
1 \* d( T  a4 U# d, S
& |( W) T; B- n4 E7 u
. v  o, d' G2 v4 K  a$ W, k2 z
, ~4 ]! ]; u, N9 l) [- H账号为admin, W0 p5 a% E; Q# P( a+ s
! m6 f& K4 ]- N8 ^$ C
查看密码:
4 B' a! f# p% J( a: ~9 g
; t- D3 l6 H) C1 b7 {6 m' i& Z* y% A% K$ L也可以在post-deploy命令执行之后,去这个文件里面看/etc/kolla/admin-openrc.sh# ~) b6 m- h. p* n8 J) b

3 e8 m2 W1 ^8 |: d% n) S$ ecat /etc/kolla/passwords.yml |grep keystone_admin_password8 r5 c/ j8 K3 d2 X8 `
9 o% t9 N  T, I* G: `1 V. Z1 G
9 J( [- {; `" @% [' M6 Q: F" N
9. 使用 OpenStack 7 x2 v/ U& I5 w5 x9 c% F
9.1 安装 OpenStack CLI 客户端; Z8 a; U2 D7 _2 U; M9 \
官方命令(网络能通的可以试试)
4 |8 y2 {7 O3 I, Y9 N3 [0 O- w/ [/ W" V$ C, W) i( J
pip install python-openstackclient -c https://releases.openstack.org/constraints/upper/yoga  L1 U2 D( }. ]1 U7 y) B) }1 Z
如果文件获取不了建议,打开这个链接,之后会跳转到* {/ h0 J8 X/ O' J6 g3 l% n. o( k, G2 C( [
https://opendev.org/openstack/re ... per-constraints.txt
# a. |, x4 f+ m7 R/ y再去github的OpenStack镜像,即 github.com/openstack/requirements
4 }: C' b. `: m  R: P! C+ d' O0 Z然后克隆这个仓库到jihulab.com4 k" u; E4 F% }5 ]$ u4 p4 i

* U8 Q& a* d9 Y: f9 j( w( ^记得选择对应的分支
  R* |- n1 X" W2 q' Z! X' d% F3 ~  n! Q1 F' k- q. A
$ ^4 s% ]/ Y1 D, H- ~3 v

8 @) ]3 D- r0 E' z5 ^6 |6 T ,接着找到对应的文件
$ a* U0 j" g$ G7 c) N( F
6 k: `9 }- w- V, N6 B# m* k; y7 l9 @8 O6 ?/ ?7 P3 M

) i" F1 G* h' J4 i. q' M+ C) X. m打开原始文件,得到下面链接+ g! ^5 ~9 e' ?' ~
7 r4 s2 \1 o1 R: x
https://jihulab.com/james-curtis ... per-constraints.txt, v4 s' Q3 S, `* I1 O
替换官方命令,并执行1 _$ R0 w: M  G+ l6 G$ ]

# [- y  b, Y: C6 N  N1 k2 |( wpip install python-openstackclient -c https://jihulab.com/james-curtis ... per-constraints.txt
2 @. i$ j" |4 t  o/ s9.2 OpenStack 需要一个 openrc 文件0 T4 `3 Z7 G% A' L+ b6 A
其中设置了管理员用户的凭据。要生成此文件/ J/ H% {, `+ w( q6 ^
( X& v+ c7 S( i% {3 i' U  s
kolla-ansible post-deploy
. _2 i! O) i6 j8 ~% G5 Y. /etc/kolla/admin-openrc.sh
8 ?2 X, ?5 P0 s" N$ G  M+ J3 P.(点)+(空格)+可执行文件 == source+(空格)+可执行文件' ^6 Z' I7 W- v7 ]  W5 E
. `- ^  B8 n! w: m
接下来就可以使用OpenStack CLI了
! U, o  g5 T0 H/ B2 J$ Y" d5 \2 r8 D  M' K9 s4 p- V1 {( e
至此OpenStack安装完成
" B8 p* \+ l0 m1 O. A# g& T
) o: }# p$ l( |后续:
8 y0 {6 g- s$ o9 Q# a3 G1 I7 z
4 k0 e3 j6 _$ W7 K7 g+ t) FOpenStack使用Skyline Dashboard面板替换默认Horizon面板
( ^, N* W- Y8 C2 X9 K3 e5 n. J* SOpenStack增加节点或者减少节点,横向拓展节点
3 {3 ~  a# `, p8 C; s2 GProxmoxVE+Ceph+OpenStack HCI超融合平台搭建,配置Bcache加速Ceph SDS7 W2 i3 Z, g' F: q

! ~! V; v0 A8 _: ^5 w9 l7 e5 f. x
/ [  C  }( e" N$ J0 [  F, D! V
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

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