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

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

[复制链接]

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
发表于 2023-4-4 15:20:58 | 显示全部楼层 |阅读模式
前期准备9 T3 C% v) n8 H2 q* N; @  z7 [5 l
本文环境
; G- I" ]% {7 f: E- T控制节点:controller
  j( e( N; i% p: f$ A5 o# e5 N2 T
计算节点:node1
6 _. ~* o: {# O  M! x7 g+ K* F8 x  z" [6 }- m2 ~
OpenStack版本:Ussuri8 m$ L# k5 m  _& C5 I

0 A3 P2 J; k5 E操作系统:CentOS 8 stream
8 ~, {  Y7 f8 A5 ]  o7 `+ }: i0 i5 w; o- K/ [
最小配置要求2 x+ g3 j- l) \( R: S4 c" \
8G内存,40G硬盘,三网卡
6 |7 H! m7 F3 m6 y0 g) M* I/ u8 d9 j- H1 L# ?3 t
更改主机名
7 m, ~2 y% o* e. [0 _控制节点  @8 e( X  A9 G! X$ K

/ N' q( H/ y, r/ U5 ]9 K% [/ ohostnamectl set-hostname controller, L, P4 |1 ~  j, ^! T) }
计算节点3 L- `6 p! Z& v7 T) C8 B8 b2 c" r

/ \4 \5 h2 R! b: k9 H. ]: x- Uhostnamectl set-hostname node1
! }3 I8 V9 c; x/ n主机名解析
- `7 @" ~- S$ B+ I0 h6 c  B编辑/etc/hosts,增加条目(所有节点)+ r# g% x  t2 @( p; p

- W7 F. I( ^' J! @1 c, w& p192.168.13.133 controller 5 K& G' v1 B) m7 g1 R( @
192.168.13.134 node1
0 z  n' Q; _4 \6 Z3 `创建cinder-volumes卷组(可选,用于LVM)6 g& {" a2 ^7 l9 d" v+ s& Z
所有计算节点,准备一个分区用来创建vg,这里创建一个sdb1的主分区5 y# Y2 c+ S4 H5 M
2 N1 w, _5 f4 T  r; x0 s  d
fdisk /dev/sdb
- H6 i$ s$ ?( Y9 E: Z  n -> ... -> w  # 依次选择
; \7 V" l3 ]2 @  e# L2 b/ B0 A) F1 S
// 刷新分区表
+ t. q+ v* s" Y2 j% @; epartprobe
6 U: m  q+ w- i, g+ W" {+ A$ `3 b# E) d) S
// 创建pv
& u1 x3 y! |. j4 h. z% wpvcreate /dev/sdb1 6 p& x/ r) N3 I  F0 Z0 m% y; Z
1 N# F2 W) m7 q' j1 O
// 创建vg 6 i( A2 D: H* C  X4 {+ e
vgcreate cinder-volumes /dev/sdb19 p( N# e9 m) v2 \# Z  j1 m
安装依赖2 U* g5 t( E3 {4 ?/ l5 y
cd /etc/yum.repos.d/ . q8 T8 l: b' P& \
mv CentOS-Base.repo CentOS-Base.repo.bak 7 j# L7 @4 i! P
wget -O CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-8.repo
0 r" l1 x2 B& e$ B' K! @: Q! G( i& S. n
dnf clean all
2 L; W( j# |, d1 G) Vdnf makecache5 P8 h5 S) t' U& _$ B5 Q
dnf install epel-release & b! n& V2 z  H% Z  t1 }. S7 H
dnf update 6 s3 ?# o; |+ U9 H

* M4 D  ]0 ?3 u7 W, Bdnf install -y make gcc zlib-devel openssl-devel python3-devel libffi-devel python3-libselinux
, j% a, A2 y1 T- J( c5 k9 d  Y1. 安装Python3
) J" a9 E/ k+ Q
! D+ ?" ~8 j* n5 [4 Jwget https://www.python.org/ftp/python/3.7.9/Python-3.7.9.tgz
3 H$ h% a+ x2 U& E6 ]3 Etar -xf Python-3.7.9.tgz % u( s; x9 x; K( p6 Y4 M! `. e
cd Python-3.7.9/ ( z) s: d3 K" t2 S- a) B
./configure --with-ssl + I. f1 j+ S, k, x: ?4 f
make -j 4 && make install
! r" G. X3 a+ ~2 P2. 准备Python虚拟环境(推荐,非必须)- n- p9 P) B4 }, U4 A7 \
3 d5 m: ?8 I: R- [. U7 S; J2 Z
创建虚拟环境
" L- o0 [5 I4 q9 z2 R% n2 v* T# // (/PATH/TO/venv,这里使用/usr/lib/python3/venv)
& U2 E- w7 b1 P5 O! j" D! Kpython3 -m venv /usr/lib/python3/venv ! c  a7 y" c* J
source /usr/lib/python3/venv/bin/activate4 m' O% p8 y* {5 q& s
升级pip$ q8 K8 b$ T2 R* s. c  |
pip install -U pip
/ N1 C' f& b# h0 Y& o如果启用了虚拟环境,后续所有操作需要在虚拟环境下进行  G8 S( E3 q/ h  G. T( v
+ Y. e* ?1 O0 \+ d8 _; [
参考:
2 k% N4 `( l5 V  U4 I, m9 s2 H& d4 C7 ^+ u8 v
https://docs.openstack.org/kolla ... l-environments.html6 @9 z1 J/ f7 D* @3 Q
/ s5 I% C% U# D; j
3. 安装docker  k1 v7 G: p/ \0 p& v/ F7 P

7 d9 B) c) L! B9 l! T3 c/ Z安装docker服务(所有节点)
4 p! `, c) P$ l: Z( ~) o5 \+ Pcd /etc/yum.repos.d/ 6 h: ^7 X3 [! f& u. s  h0 r& d
wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo % f4 l, Q" O9 \; }; a

# y: t+ T, v1 R0 v7 [# o0 }// CentOS8 需要升级containerd.io版本
& ~" X% F5 w0 b% z9 d8 c8 i) T0 |dnf install https://mirrors.aliyun.com/docke ... -3.1.el7.x86_64.rpm * }. ~! p( a9 L2 o( u
dnf install docker-ce docker-ce-cli   ^+ c8 Z( j% ?& X1 J: ~
$ G- c4 j! S' m" c
systemctl enable docker.service
* g' p- V2 s( {" j1 N- nsystemctl start docker.service# P6 k, q! k" G
镜像加速
& `/ U. R: k! w7 x8 ]  A执行以下命令,修改docker源  J3 ?% k! B7 h: C* O
tee /etc/docker/daemon.json <<-'EOF'
4 j8 k' h) I. a2 c{ 0 c, X' S* U/ m8 p9 q
    "registry-mirrors": ["https://reg-mirror.qiniu.com", "https://hub-mirror.c.163.com/"]
  i7 F4 z( A1 s  @" L; z% w}
9 k) R8 Z! ]# n; B; T5 [4 ]EOF
. T" c, |4 b5 S: j安装python docker模块! U- `6 Y4 z- r2 R, h
pip install docker
8 w/ D0 G* t5 O( ]9 r& ~$ `4. 安装kolla-ansible
/ n6 P7 v' i8 m) E% {8 i8 E' {  e9 `' T# j; j6 k/ C$ m# b6 x* U
安装ansible# {2 P3 \1 ]; r0 D3 z
dnf install ansible$ s" T" i& }% f# X7 l, v* V3 n; b. v# ^
安装kolla-ansible
7 E, b! k) W; q+ I( Q0 c可选择源码安装,或pip安装,这里使用pip$ m4 j. S0 }$ m9 g& F3 Q& Y5 b
1 c! M# W! n, [
pip install 'ansible<2.10'
8 i& E. u2 y2 ~4 Z# Ipip install kolla-ansible% O1 l" @' R- H! x3 `$ [( C- z
创建kolla配置目录' j6 V9 U$ f9 @; ^. j' R
sudo mkdir -p /etc/kolla
( U2 K$ L% e# g( k" ~9 B8 tsudo chown $USER:$USER /etc/kolla6 x7 [+ D# F' |, w7 R, A4 |
拷贝yml配置文件1 V. k1 I" c9 p  T# \# R
cp -r /usr/lib/python3/venv/share/kolla-ansible/etc_examples/kolla/* /etc/kolla+ c8 i8 b4 z  t( _$ C; T3 H& `& x
拷贝all-in-one、multinode 清单文件到当前目录(任意工作目录,这里是在root目录下)
1 X: Q; r7 g2 W8 f' H' B! N7 Vcd /root
. U2 K5 d/ A% r/ o% Acp /usr/lib/python3/venv/share/kolla-ansible/ansible/inventory/* .
0 Q8 c  w2 X& t& ?: b0 [编辑/etc/ansible/ansible.cfg
6 P9 x+ H  K0 S9 [0 C! r1 p% g[defaults] & ]' ]$ p/ m; Y- L# R  T
host_key_checking=False 1 ?/ N* ]' z( g# F
pipelining=True
" V. u) c1 @. f) pforks=100' m  z; W; @& j! H
5. ansible初始配置
: D+ w6 E, C0 j
$ s) V7 h) E; ]: d打开当前目录multinode文件8 I9 L) b9 J: j3 f# o
修改IP、用户名和密码,并对需要安装的内容进行调整3 e% r7 I9 A3 ?$ _6 @
[control] 8 L5 x: q: W7 _8 o& k
10.0.0.[10:12] ansible_user=root ansible_password=123456 ansible_become=true " ?; S, \6 @9 M: z; n5 l
# Ansible supports syntax like [10:12] - that means 10, 11 and 12. 0 c2 E* K1 L, \. x/ m. Q( W# }
# Become clause means "use sudo". 5 F7 }" ?9 h" J& p5 h
( y; O3 Z+ K- }' L+ n
[network:children] & X1 w$ Y6 t: |/ e4 l8 }
control : d# K# v; I/ z
# when you specify group_name:children, it will use contents of group specified. ! X: X' a+ W" `( p) v" M

9 B  Z6 D! \+ `! w' w8 O[compute] - D3 n5 p" k. E3 R7 v$ Q
10.0.0.[13:14] ansible_user=root ansible_password=123456 ansible_become=true
) k# X: L  ?# m) @3 `" ?7 \9 w& d4 r0 R
[monitoring] 10.0.0.10 9 U- B) {+ G! a
# This group is for monitoring node.
" _0 K1 a9 S) z, y3 {4 ]% H# Fill it with one of the controllers' IP address or some others. ( w2 |+ X* Q( T0 j8 R5 S3 Z0 G

+ S4 a/ c% m5 R  e[storage:children] compute [deployment] localhost ansible_connection=local become=true # use localhost and sudo
6 j4 @, ^" X' z3 h  `
4 N) j, w- l" s- H8 z/ `. q.. (略)
5 r6 L2 o# ]) ]9 x5 r9 M- n8 @6 v检查inventory配置# R, ~! x: a' S, w6 Q9 h8 {
ansible -i multinode all -m ping
; I' G$ M# ~- Q1 @. h6. 配置passwords.yml
4 W* b* ~) m* B3 G
* f- v2 ^$ o! k4 T" z* b6 V/etc/kolla/passwords.yml里的初始密码为空,通过下面命令生成随机密码! b* f" m3 }3 y' e9 D- g
2 i, s6 d1 U; R9 b0 w. p
kolla-genpwd1 b# M8 T% x4 V$ |
此时,如有需要可以手动编辑passwords.yml文件,更改组件初始密码,如keystone_admin_password。! Y/ V. S/ i9 J, N+ v
( R' t+ E  B. v9 V
7. 配置global.yml0 w4 G, R; a9 ?% R) ~
& [3 w/ H. U7 n( G+ e
global.yml是Kolla-Ansible的主配置文件,编辑/etc/kolla/globals.yml文件。8 y( B8 p& U6 Z1 ?9 {& P8 d6 I
8 d4 O8 G( v& I4 c* ?: H
修改镜像选项
; e7 o$ E& W: A$ M9 j$ Gkolla_base_distro:默认为"centos",如果是其他发行版需要手动更改。! M2 o9 s/ J: {6 M/ a' f

# c( L% v7 M8 A) Bkolla_install_type:默认为”binary“5 M. i- b: z" E, T

  Z% z( P8 z6 o& |# c修改网络选项
$ X* b3 L. P# l- z4 ?/ Dnetwork_interface:管理网络接口,默认为“eth0”, W/ G7 j4 S2 e4 R4 n) o! `% q

5 D3 N+ k, G$ I) Z5 P/ H6 Dneutron_external_interface:Neutron外部网络,可以是vlan或flat类型。需要激活并且不配置IP。  S$ k# J" X9 k0 e

# [  m2 s* p# ~( I" }! c, h( r* Mkolla_internal_vip_address:管理的浮动IP,连接到network_interface,需要设置一个管理网络中未被使用的地址。
& X& s8 W8 @7 K/ }& Q
) }8 Z8 w  e& Q- n8 |5 J# U  L--enable_*:额外启用的服务,如enable_cinder。
% j) l3 w6 X& l3 c3 U2 ^  D4 ~
--enable_cinder_backend_*: 在启用了cinder后需要至少启用一个cinder后端,如enable_cinder_backend_lvm。, m! q. G4 W; _( t
+ M9 B5 N" h3 n" I, Z' ]
8. 部署
9 e2 e$ ]$ e4 E; g+ e* G9 ?, h! W
确保libvirtd服务停止3 f# Z- o3 g4 f9 h
systemctl stop libvirtd6 A6 Q- Z% f: D) H7 m! L
检查kolla部署依赖2 {6 P( I5 \- D& z) G
kolla-ansible -i ./multinode bootstrap-servers -e ' ansible_python_interpreter=/etc/kolla/venv/bin/python3'
" j! T4 F3 V9 W, S) f% n-e 表示加的一些配置,这里指定使用的python解释器  r) q2 M1 f. C/ h& L

/ o+ V' O3 b0 ?9 b0 C: Y主机预部署检查  a& l. _( l. \" q
kolla-ansible -i ./multinode prechecks -e 'ansible_python_interpreter=/usr/lib/python3/venv/bin/python3'( I9 x& f8 b. Q% ^7 u9 }+ o8 V
安装8 P1 D( E3 ^, v) ~1 q8 w- v" ]
kolla-ansible -i ./multinode deploy -e 'ansible_python_interpreter=/usr/lib/python3/venv/bin/python3'4 ^( M: y6 R  F% e! N

, g$ e* L9 e' w' |1 ]1 X) }4 X$ X9 _- k) m6 O' w

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
 楼主| 发表于 2023-4-4 15:22:43 | 显示全部楼层
目标
8 J7 G8 p5 I; T' m# w" z8 J5 U部署OpenStack官方提供的Simple Configuration示例配置中的Web Application和Container Optimized两个组件配置清单。
% `3 ]: W* }  Z& x6 T3 u/ e' ]3 Z4 o+ I
其中包括- T+ c/ u# S3 ~! q

% _$ }, D& e7 o! ]6 a' \6 MWeb Application:Cinder(块存储)、Glance(镜像服务)、Keystone(身份认证)、Horizon(仪表盘)、Neutron(网络服务)、Nova(计算服务)、Trove(数据库服务)、Swift(对象存储)、Ceilometer(数据收集)、Heat(编排服务)
6 e1 R0 ~( F8 LContainer Optimized(增量):Kuryr(容器网络集成)、Barbican(密钥服务)、Designate(DNS服务)、Manila(文件存储)、Octavia(负载均衡器)、Placement(资源监控)  |( E5 E3 g; B
更多OpenStack landscape景观图可以参考官方或者 OPENSTACK LANDSCAPE云原生景观 | OpenStack地图_JamesCurtis的博客-CSDN博客
8 i% s6 s% f: F* }# s0 C  ?( w! F$ q
支持的操作系统- {( ?" O9 E: d: }
注意:不再支持 CentOS 7 作为主机操作系统。Train 版本同时支持 CentOS 7 和 8,并提供了迁移路径。有关迁移到 CentOS 8 的信息,请参阅Kolla Ansible Train 文档。
+ T3 Q1 |1 W5 p, |8 ~! u' k
% y/ a( x  m6 q- ?3 k, E0 Kyoga版本支持以下操作系统:) J1 F4 a+ z+ K5 I4 P  Q; d& c8 w

, I5 f7 N5 i' G7 e4 SCentOS Stream 8
9 `) b+ @' D1 F5 b3 A4 z5 N' |& \# B/ \! X/ n8 M/ G
Debian Bullseye (11)
% W2 N8 r0 l1 E& X! l5 W5 J0 r2 O: T, A' h) |
openEuler 20.03 LTS SP2
" v% [9 B2 Z) u0 |+ A* d; C& U/ p. c4 _  A" C/ Z; [
RHEL 8 (deprecated): Z) J) s, ]8 C' G) K4 O  n, p! R

/ E0 A6 m$ y' w7 s' MRocky Linux 8% z3 V7 H# o4 q
, J1 I4 Q. m( J7 C3 Z# i  J# x
Ubuntu Focal (20.04)/ I- v4 b6 E$ a0 O/ H# N4 a- P# {! w

7 E: \# {, G$ T. [3 ~  z4 b" ]7 b! @我这里使用的是Ubuntu 22.04 LTS(mini安装)
9 S6 w( k! T/ n2 T. X4 ?: K# w# r" u
1 t# F3 \# h1 C下面开始安装; ~" c! @% M+ a5 |* k- @& K" t% i
  r8 \; r9 ~# i
1. 安装系统依赖
- g8 z/ A6 Q  w# w' _" w1.1. 更新软件包索引$ K3 a* e) p% K# k6 D+ V; T
sudo apt update! V7 f9 i& p0 w3 b/ A
1.2. 安装python依赖
: P/ [9 G! `' r7 dsudo apt install git python3-dev libffi-dev gcc libssl-dev
4 p4 V5 T! R& l2 E2. 安装python-venv虚拟环境依赖
; Y/ o- q  p9 r8 v; z9 {4 a1 g2.1 安装python3-venv2 L& @' ]  B- a) l. @
sudo apt install python3-venv
9 s7 X5 X! P! L; ~1 w2.2 创建虚拟环境并激活它& Y+ r, [6 u8 e1 ~- M
mkdir /path && mkdir /path/to # 也可以自定路径
: G& U5 U8 t6 H. ^python3 -m venv /path/to/venv
6 G7 Q' \  P  l% t8 F  fsource /path/to/venv/bin/activate
. `4 Y. I6 i' L+ `0 N2.3 确保安装了最新版本的pip
' _. k! W! @) N5 G5 Y3 r' Hpython -m pip install -i https://pypi.tuna.tsinghua.edu.cn/simple --upgrade pip! A2 d+ `9 g; }; a
2.4 pypi换源  J+ f, |0 P8 x+ [3 s
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
4 n; o; S$ b1 @2.5 安装Ansible
4 v' z& _% J5 H: \3 wpip install 'ansible>=4,<6'1 a& S0 r6 g# x: v( ]- h+ T( i& V
3. 安装Kolla-Ansible
' X4 T+ O1 e" u% Z' V/ a. p3.1 kolla; P3 ^1 `! s; p
# pip install git+https://opendev.org/openstack/kolla-ansible@stable/yoga
8 D- C  x# O% `# 上面是原版命令,建议使用jihulab.com克隆一份
3 m4 J8 E, S( c+ I# ]pip install git+https://jihulab.com/james-curtis/kolla-ansible@stable/yoga, W5 \! H1 t% E! `  X& G5 q( r3 n
3.2 创建文件夹/etc/kolla, M+ ?( [" m- h: f# ^
sudo mkdir -p /etc/kolla
6 F3 q7 Y1 P! B" C+ I; Nsudo chown $USER:$USER /etc/kolla
* L/ ^$ ]& y3 H% h2 ]7 H' w! p% [3.3 复制 globals.yml 和 passwords.yml 到 /etc/kolla
  ]$ b3 f' h: y! M) i2 f# 如果你使用了自定义路径,记得替换/path/to3 o5 j  `* q% ^1 l1 P# [
cp -r /path/to/venv/share/kolla-ansible/etc_examples/kolla/* /etc/kolla
/ a; d" _) |: G" g9 W( b3.4 复制清单文件
9 t- n4 L! t; Ucp /path/to/venv/share/kolla-ansible/ansible/inventory/* .  c% N2 R- i; y  j8 I7 h
4. 安装Ansible Galaxy依赖
' Y) z( E' D: n+ V4.1 换源
% y: W; O  p1 X) d9 o- i找到 /path/to/venv/share/kolla-ansible/requirements.yml
9 G; y) O& W8 _) v' J& ]
) _+ k6 Y) j/ r- U& r2 t内容如下2 \" Y1 T0 Y& b* S
/ x( S! |6 R2 I# R" A! i6 J) K- a/ f
---
: ^& s$ W- r7 @collections:3 Y" I. u! b2 e
  - name: https://opendev.org/openstack/ansible-collection-kolla
$ ?4 ]) [% V" {/ C    type: git
( D. v6 L- {1 f+ J' C- ^, |    version: stable/yoga4 I0 z: n7 a, E+ f" Z+ V
修改这个git仓库地址,如果镜像拉不下,建议去拉github的OpenStack镜像7 T/ Z. m9 n6 Q2 o0 Z

. k9 F" a. s6 ~$ H修改成如下; D0 y+ X" w2 J& S

7 ^8 y7 c3 E* L$ g3 D---" N2 M9 e7 f/ f8 Q8 L1 U
collections:
0 n' u; a/ S' U6 B: S  - name: https://jihulab.com/james-curtis/ansible-collection-kolla
9 P5 z# U4 a" C2 \    type: git
7 r' |. }* W2 L" y    version: stable/yoga
5 m4 h# ]$ _- `% V# X4.2 安装Kolla-Ansible-Collections依赖
$ i0 y# d0 x1 U5 N, wkolla-ansible install-deps
1 }6 n% E# K( w4.3  docker换源 && 指定docker版本到20.10.*
: i2 B7 i1 @6 }这里不换源是可以的。但是截止docker 23.0.0发布时间之后再来使用kolla-ansible,首次安装没问题,后续如果要添加删除组件的话就会报错。原因是docker删除了容器的 `KernelMemory` 属性,但是kolla需要读取,导致数组下标不存在报错
: P3 c' ~6 t# s, u$ E4 h* T5 Z4 f# _0 P) {3 U8 W
请参阅:Kolla-Ansible deploy部署报错 KeyError: \\‘KernelMemory_JamesCurtis的博客-CSDN博客
- w+ {7 Q1 g' Q4 g1 v5 k% J' T# ^; T$ l6 v% w' Y2 N1 P# w
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* H; N3 A+ l& `5 L& O. R" u& c
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# \6 P% \# B# K, v  T
4.4 配置Ansible
7 d! l. v/ X6 ~mkdir /etc/ansible
$ P) i2 W; A" Yecho "[defaults]
% G4 _5 ~3 _0 g2 @2 Q/ |host_key_checking=False
- m, p7 q# t: |, }' Y: {  Vpipelining=True
0 R1 X' v, D* N5 ^' Bforks=100" > /etc/ansible/ansible.cfg' _, P0 _9 X! H! z& T+ Y: t
5. 准备初始化配置
- v* @# ?) {. U( @; ^7 k如果单机部署,你也可以跳过此步骤,然后使用 all-in-one 清单,后续如果再增加机器可以切换回到 multinode 清单,只需要注意修改好机器主机名就行。7 x" H, c8 h" U1 t. u: `+ ?
$ B8 ~) W+ R$ M+ x  `# g/ \
对于all-in-one虚拟环境中的场景,将以下内容添加到all-in-one清单的最开头! @& j- n6 N5 c& J' o- J2 R
0 N3 p. P0 \& d) Z
localhost ansible_python_interpreter=python0 ~8 I. }) M* {( Z
5.1 修改配置文件8 _( @7 C$ k8 g3 w7 f( B" T# g+ {) F
我这里使用3+1机器演示,
! E* P8 s+ B6 n; r8 o( u0 _9 z4 k$ S. j
1 x 部署机:10.10.1.80/246 w* ]% b. Q) r/ s
& ^/ n& g: d4 q
节点01:10.10.1.81/24 control01
% u/ s' x0 J8 Q! N, f# P) X5 E% X/ ]) ]( ?: \* h
节点02:10.10.1.82/24 control02  S/ c% t1 x* h* q% w  W1 w

0 b  O$ Y7 a+ j# |节点03:10.10.1.83/24 control03
' T1 ^) `0 i5 Y" X4 S% C$ @1 N$ }4 z3 ^! f1 C7 w  e) ?- n( U9 Z
这里仅仅展示 [baremetal:children] 节点之前的配置文件,切勿照搬!!!
/ R/ M+ G6 H& J6 Z/ C1 L, P: o2 \: F& Y
# These initial groups are the only groups required to be modified. The
6 g3 p$ j) E2 L4 {7 t2 `# additional groups are for more control of the environment./ C% E* Y; u6 D6 b
[control]
+ Y5 w+ b, B8 ^4 v0 [$ v# These hostname must be resolvable from your deployment host. t% r; h8 x5 C& o) i
control01  hostname=control01 ansible_user=root ansible_password=1
% ]3 E8 o3 q0 F8 ?control02  hostname=control02 ansible_user=root ansible_password=1' j) B# [3 u0 O) X) N0 |9 ^
control03  hostname=control03 ansible_user=root ansible_password=18 ?* D# `% Q; ]6 s0 X' o

" v: K2 g+ J) j* C- Y6 Z# The above can also be specified as follows:( g. H4 I& T5 ?& O1 X; o
# control[01:03]     ansible_user=kolla
/ K) a/ r; }9 t* Z% _! e
6 L0 T- e/ G; J  Z* c# The network nodes are where your l3-agent and loadbalancers will run
5 R: m. R8 P# ^% }3 n# This can be the same as a host in the control group3 c2 V' Z) n: A+ b
# [network]
- e7 C9 D  v* T. W! `& z# network01
2 P4 C) [- p, j# v# ~# network024 l; z7 y  v5 E# ^, b& B% v! m  W+ C
9 R- W% f0 [2 y4 a7 |# H2 s
# when you specify group_name:children, it will use contents of group specified.
6 n* x+ K" O2 r3 Q  |[network:children]
& d1 \+ A1 v: F; k. ycontrol* m+ W& x, [  ]5 |! b
" t2 ~) F5 k' R* g

/ t, d" z  F: \& ^' j# [compute]& v/ r# f5 p: F1 G# p5 c$ u2 R* f6 _
# compute01( V2 p+ c# Z. W# O6 u- S8 r
[compute:children]
: m& I1 v" a. q7 S. U' {6 e6 Bcontrol% F' j' i0 g$ y- \/ j
' P; Q$ x' u) C
[monitoring:children]% Y& ]* o6 a, }8 C. }% G
control% V- Y  s( Q, f$ X
# [monitoring]$ k4 h3 ^7 Q  e& `9 [& ]0 o
# control01   ansible_user=root ansible_password=1 ansible_become=true
( j2 {  l0 v8 L: j# monitoring01. c( ]* H3 ], d& L! y' Z6 Z
, ^) e3 C! r  M: a3 e( ^3 D* g7 P
# When compute nodes and control nodes use different interfaces,
/ U/ a7 b  }: I- r, J  W$ d# you need to comment out "api_interface" and other interfaces from the globals.yml1 E0 l! u6 z* D2 w# b/ T; i( N
# and specify like below:
/ \, b6 A5 [& r#compute01 neutron_external_interface=eth0 api_interface=em1 storage_interface=em1 tunnel_interface=em1
& @9 A9 \& s. f4 ?0 N
& E3 N& b, E+ ]7 j# [storage]% V3 \" Z+ E# x: A. H
# storage013 D2 _1 p% P7 O" F6 G" G9 c
[storage:children]
( X- b  j/ Y9 |: U: {8 acontrol1 ~1 X3 w. l3 b4 W: Q0 v5 _

# X% Q, B- f* p[deployment]
9 Y% v$ V- ?2 v7 c, z' e0 ~deploy       ansible_connection=local5 y0 e# r# p( a3 n

/ v* a8 N. L" P. j# 下接[baremetal:children]& O5 D5 |8 b# C6 ?
5.2 修改hosts
1 I, G  K0 {- A7 S, |" D如果使用 all-in-one 清单,这一步也可以跳过# q% r5 f7 L& B! _* a
! t: J, [8 Q9 |$ A, b% h3 _
编辑/etc/hosts文件,注意替换成自己的机器的内网ip) m+ `/ l& f5 W- l  _6 `0 X  I3 F
1 r( F7 u! ?) \% p
只需要修改部署机。后续使用bootstrap-server命令之后会同步到所有节点
5 ~/ g8 i: p+ e* @' ^) R+ Q' S  J9 g$ c% o+ Y6 q2 m) B
# 这里是deploy机器上的文件
8 Y+ s. ?  n' o127.0.0.1 localhost
% I* J' K: G$ _1 N. ^) S4 G10.10.1.80 deploy
% b% P4 H3 R, E1 V10.10.1.81 control01
$ X! D. @; W2 ^& j10.10.1.82 control02
/ ]& I3 Z  K# C10.10.1.83 control03
2 k3 \3 r7 Z$ a7 }% J5.3 安装 sshpass
1 A$ T  h. I9 y. Fapt install sshpass -y
- r- T- E3 j, _/ J  P, v5.4 配置ssh密钥对, f0 [0 O! @$ q
ssh-keygen. \9 q' N3 j- }* k: m
一路回车
- `  E8 {8 }$ A; }* p. u8 W6 Q* y0 z5 T, j3 e: \. u7 c
ssh-copy-id 10.10.1.814 g- w$ a- i( J) ?
# 注意替换自己的内网ip
( |9 d( B; o# K- N输入yes同意指纹,然后输入密码。就可以了/ L! x7 x& v* N0 F8 z- ]

% f  u) s4 A+ m+ t; D: ?; Y) p) ^4 A7 N6 R# 看下如下提示就是成功了
: b6 C, R$ O! I" \- C" h1 troot@10.10.1.81's password: 2 o" q: |& U- P: ^7 F; n& S

8 y3 U4 N: v+ Y# @, f) ANumber of key(s) added: 1& z% z& w$ \0 d& Y; X- g, u' \
  T9 r) ?& R9 l; R; j
Now try logging into the machine, with:   "ssh '10.10.1.81'"+ x8 m# \- q1 }
and check to make sure that only the key(s) you wanted were added.9 J/ Q1 Z3 H; v$ \# y
5 d8 l5 u# o+ E/ Q6 a  q) J
5.5 检查清单配置是否正确, l& u, n( i: h* G6 g+ b: a
ansible -i multinode all -m ping
/ ~! X% I( d3 G1 B返回下面结果就是成功
1 ]: j0 x' c  }0 T9 |* s; R* |' F1 b, K: }, l+ }( y
(venv) root@ubuntu:~# ansible -i multinode all -m ping, I8 F% ~  f* a5 {% K9 b* e# k8 s
[WARNING]: Invalid characters were found in group names but not replaced, use -vvvv to see details6 m0 G2 C2 i! h" J$ z! K
localhost | SUCCESS => {6 b+ C% J: _3 O  {5 a
    "ansible_facts": {
) R' ^. G4 w. d9 V) p- C, |        "discovered_interpreter_python": "/usr/bin/python3"
8 q! l# U- b9 V. D4 E4 h    },0 K. W/ c' w( p4 a/ N( V
    "changed": false,
0 L  g% ~3 {0 K( Y    "ping": "pong"
. A5 X. D9 r& x}' q8 J* Z( J0 }0 j4 M! N5 d
control01 | SUCCESS => {. J- K0 }( m7 ~) l6 W
    "ansible_facts": {
) C  v% H1 q, l, S4 Q& C& I        "discovered_interpreter_python": "/usr/bin/python3"& F' b8 F; B0 r! {' p0 Q8 t$ b7 Y
    },/ V/ F) U- Q+ c9 I0 V" E4 X( \
    "changed": false,
/ V) K' J+ b( B3 F2 R; y    "ping": "pong"# b8 Y  d2 Q+ ]9 e- g! |
}
* h. J9 e! b5 u' c% y+ R+ a5 Y. d6. 生成密码% G9 W& F1 V' q" E- P
kolla-genpwd
% i0 L1 u# H' `& e. q9 K7. 配置globals.yml( I. ^8 W5 E$ i9 R
先安装一下vim
0 K2 r/ m6 V" J9 Y- L
& E- E  j4 g, j; kapt install vim -y2 B! H( m# t; `4 O6 f$ P
编辑
, }1 q  ^  y1 y9 @8 K
  ?7 t5 q  M& e  b; d# @vim /etc/kolla/globals.yml
3 y, V1 h4 j9 S 先不要进入编辑模式,输入下面,显示行号
7 \" r0 n# _3 ?) i, a# n
/ z' p9 z& q2 P6 h/ G  R:set number# T: B: ]" [& D4 x
7.1 修改基础镜像发行版
9 @- ^/ A$ F( z9 t0 ~/ N默认是centos,要修改为debian。默认的centos有一些镜像不存在+ m) G8 q1 Z0 \; }; W$ E

2 e  @0 |" {7 a, c' N/ d& m+ W% w* ssed -i.bak 's/#kolla_base_distro: "centos"/kolla_base_distro: "debian"/' /etc/kolla/globals.yml
( i# P, A! s8 }/ w" I0 |" b: m) A7.2 编辑网络接口
5 _3 I2 B. y' }# ?  |" Q8 C3 v这里,vim的基本使用不在赘述
3 s$ ~( I% X0 p$ C
' I. J  M6 ^) z搜索第一个网口接口,并修改为对应配置(可以通过 ip a 查看接口名字)
% v4 V1 n0 M' p, \1 H/ [
: M* a& B5 P! k, \9 {6 y 设置的第一个接口是“ Network_interface”。这是多个管理类型网络的默认接口。
1 g0 N3 Q% u$ b8 K
1 }7 ?: a* s( h! p4 \$ |network_interface: "eth0"- ^7 {1 }- t" [, `7 i2 _
搜索并设置第二个接口
. ^% s. G9 c% u" X
% I! |  ?+ r! G5 u; {, V所需的第二个接口专用于Neutron外部(或公共)网络,可以是vlan或flat,这取决于网络的创建方式。此接口应处于活动状态,没有IP地址。否则,实例将无法访问外部网络。
6 p; A9 _2 X8 H( _9 V# {
+ X* k1 Z& X& `6 J 这里说人话,就是第二个接口需要给他一个空闲的网口# X6 Y& `. I8 h0 r. @
. `# d; L6 t1 a, i; X
neutron_external_interface: "eth1"
* C' o" Y0 d. ?' l搜索并设置浮动ip2 L- e7 P2 G1 N$ ?) ^" M7 w6 M
( m5 s0 k3 F$ z/ U! z
接下来,我们需要为管理流量提供浮动IP。该IP将由keepalive管理,以提供高可用性,并且应设置为在连接到我们网络接口的管理网络中不使用的地址。
' f; v! K$ g! H2 |  h9 n9 Y3 x$ X! ]! S' W3 f
这里说人话就是,浮动ip不要和network_interface中的地址冲突(一般是DHCP),比如说network_interface所在DHCP范围是10.1.1.100-10.1.1.200。那么浮动ip就不建议在这个范围内,而应该选择如10.1.1.2012 U; n: Z, p; w

9 E! _# b* [5 F' d, A; ~6 x  R& {kolla_internal_vip_address: "10.1.0.250"+ ^* j* L- W" z, B8 Z
编辑完成,按下Esc,再输入
  X' {) O1 L9 }% E
* G1 `5 f- K0 b% t# Q) P:wq
" o' Z: H2 P, J* F$ b* I5 y保存退出9 Q( d0 `$ j2 B# z
% ]6 Z0 o2 G7 |4 h
8. 部署
& d; I2 }% H! x, h/ C8.1 docker quay.io换源" T: [  E# g  q5 U4 L
sed -i.bak 's/#docker_registry:/docker_registry: quay.nju.edu.cn/g' /etc/kolla/globals.yml
! i9 V$ Y; Y! c% N5 `( Y' k/ a8.2 引导服务器( r2 `% e  @. h3 U6 o
kolla-ansible -i ./multinode bootstrap-servers  y% K, F" @9 [- Q( }
完成后检查docker版本,确定在20.10.xx。不然后面所有使用kolla-ansible的改动都会报错KernelMemory4 G/ A, |' v5 ^  Z' Z
, C; N# H, o0 L- U3 ^4 r+ o* F4 L& B
确保Server: Docker Engine版本在20.10.xx就行* R" E+ U! M7 k# W

& o/ n) O7 A. j9 \(venv) root@ubuntu:~# docker version/ d$ E, N  d. `: S
Client: Docker Engine - Community
: q( D+ Y+ K+ c3 p6 P Version:           23.0.0
. u: M0 Y- f5 f API version:       1.41 (downgraded from 1.42)
- X  x% o  F5 ^. M6 z# Y% J  ^ Go version:        go1.19.5
! p" V1 s: ?) v' G Git commit:        e92dd87
  o8 G+ [- @! ?6 m# J- P! d4 y! j Built:             Wed Feb  1 17:47:51 2023
% [1 F7 u* M! X) S, W OS/Arch:           linux/amd64
6 c* O& t( k5 v4 z Context:           default  |7 P! k5 c- H0 \3 w3 R4 K5 j- E

# L- D: u4 p4 Y  C4 D* H  V7 _Server: Docker Engine - Community
" ]7 v2 T5 [; y+ ~4 r9 o Engine:
$ Y! i" b' H) o: J  Version:          20.10.23
8 k5 H: n9 d1 }/ d  API version:      1.41 (minimum version 1.12)7 A7 M/ B- f, Q, C2 B* R
  Go version:       go1.18.104 v9 E" F7 _+ J' n6 D- @4 t
  Git commit:       6051f14
& d* P& d1 e8 b# y. u/ c$ \  Built:            Thu Jan 19 17:42:57 2023+ o( T9 t$ l* I- l$ ?  h+ C8 |) m
  OS/Arch:          linux/amd64
3 Y' Z+ ?; L) m6 U  Experimental:     false
5 G& k4 q0 V  {- ~5 z containerd:4 U2 ]; a5 t6 @7 b+ n
  Version:          1.6.163 S# i* b% L. |( q* l% l! G
  GitCommit:        31aa4358a36870b21a992d3ad2bef29e1d693bec( l$ d  t6 S  ^" I
runc:
8 s5 ]3 {7 ^8 Y3 b1 p  Version:          1.1.4
2 }% W3 f2 P! [, s0 J  GitCommit:        v1.1.4-0-g5fd4c4d; X1 V! k7 d% O2 I+ g2 G) e/ F! V
docker-init:& \8 X" @9 y0 M" T
  Version:          0.19.0
9 N( F7 H; S9 S% n  GitCommit:        de40ad0) I2 E/ j0 C8 s  s- E
8.3 对主机进行部署前检查
. M) d% L  X0 o+ F$ h/ F) Akolla-ansible -i ./multinode prechecks -vvv
! h& K4 {" s' {5 b/ U4 k" }8.4 最后进行实际的 OpenStack 部署
6 k5 k( {; y: u5 z/ @kolla-ansible -i ./multinode deploy -vvv& z" S& |* r" f: g& X( S
当本脚本完成时,OpenStack 应该启动、运行并正常运行!$ k# [+ R$ Q& [, D* D6 _% }- [
% Q. g# D) @. `) a4 t5 o
PLAY RECAP ******************************************************************************************************************************************************************2 B1 m5 g+ _8 `$ o& y+ U; P! C3 J& M
control01                  : ok=308  changed=218  unreachable=0    failed=0    skipped=169  rescued=0    ignored=1   8 z$ Y- e6 U, w+ x' F; ^3 t
localhost                  : ok=4    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   + n. u1 v+ O4 g1 T
+ x. d+ [( g# ]- a- v. _# Z8 v! `
访问浮动ip地址就是前台页面,如果显示证书错误,那意思就是密码错误
9 i0 x" \  E/ u- f& z
$ z- i+ V1 D& [( o( e  s5 h  u
! v2 ]- T, A* M0 K
: D; i5 }" Z% W. C7 q账号为admin; J( P; {. ^# B3 e1 r* t$ |7 u

7 ?& }4 R5 r9 t# t0 U3 j' \- D8 V查看密码:
$ T- v1 w( z4 |) a3 Z+ u1 O
( `8 Z, F# n  J/ _也可以在post-deploy命令执行之后,去这个文件里面看/etc/kolla/admin-openrc.sh1 |& Y: ~% n; x% t, U
# B" m3 V7 I, s/ X1 ^0 a6 \8 q
cat /etc/kolla/passwords.yml |grep keystone_admin_password0 |( h; y) d5 f5 T7 g1 J$ {

6 a. j4 x. a# N* I0 }# p
) w1 ?5 \4 |$ ?9. 使用 OpenStack " G5 p( x9 c, J- E5 `& r' \
9.1 安装 OpenStack CLI 客户端  P3 l; W8 B9 ~5 v& M# I
官方命令(网络能通的可以试试)
4 M; ?& w9 j$ n, f' v0 e  ?' H: v5 ^5 k- R
pip install python-openstackclient -c https://releases.openstack.org/constraints/upper/yoga+ v( Q9 @3 |8 {4 b5 d
如果文件获取不了建议,打开这个链接,之后会跳转到
2 F7 V: U; t$ ^- ~" ?$ phttps://opendev.org/openstack/re ... per-constraints.txt
, p, M+ G2 V; M! L再去github的OpenStack镜像,即 github.com/openstack/requirements1 _; _# s) t7 [* [
然后克隆这个仓库到jihulab.com' X. C9 c5 s) I% e0 i7 ]
! e/ z' I, n5 c, t
记得选择对应的分支4 }* U3 E. v$ q: [7 h& \& j
+ [& \- N. {2 u" S5 q

9 n& W( ^3 X% J) b+ u& {* C. f+ s' T) S0 Y- D  E
,接着找到对应的文件
0 s; u% g3 u% B" y1 |( D
- W2 Z' B# b; r7 u
8 V, E  E5 V& }2 M- n+ B9 i0 S$ G) Z8 X. w
打开原始文件,得到下面链接8 a! `/ u& _) l+ d8 D4 W6 n

* W3 Q7 m4 U* r/ ghttps://jihulab.com/james-curtis ... per-constraints.txt
  h+ [6 [& Q" }4 J, y替换官方命令,并执行/ h+ g$ p5 ?& ^8 `
# d' F) _% d5 ^% b& N1 f; S
pip install python-openstackclient -c https://jihulab.com/james-curtis ... per-constraints.txt
( s: u1 l  D) A' H2 T9.2 OpenStack 需要一个 openrc 文件( s" f5 b7 {% V+ U5 I
其中设置了管理员用户的凭据。要生成此文件
% d& Z+ h# p0 t1 g" L/ D/ M. _* C
: e" J4 n) S# Rkolla-ansible post-deploy- T2 n$ ~; g4 V& k6 m2 ^
. /etc/kolla/admin-openrc.sh. [6 P6 c$ T& H* ~* |# a# [
.(点)+(空格)+可执行文件 == source+(空格)+可执行文件1 R( p3 I0 P1 B/ t2 _* {  M4 B

4 E  x+ k1 I2 {  w接下来就可以使用OpenStack CLI了
/ N3 z2 t& o: \5 w% S$ ]0 k; Y6 g8 D' Y& t
至此OpenStack安装完成
, U' n' w, R# b
$ G- ?& I4 ^' o. v5 f后续:# O$ U2 K; z4 n8 Q% E, X$ I. S
, A+ l9 J3 i4 M' Z
OpenStack使用Skyline Dashboard面板替换默认Horizon面板
( C, r- Y# L* a' I; f: P/ xOpenStack增加节点或者减少节点,横向拓展节点; I% _9 e5 _5 Z3 J) s; F
ProxmoxVE+Ceph+OpenStack HCI超融合平台搭建,配置Bcache加速Ceph SDS
0 Z3 O; I9 A! d; L
# v5 ~" J$ k& l) ]! z9 l! p) y4 r2 R. `3 d( _
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-6-12 02:20 , Processed in 0.020301 second(s), 22 queries .

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

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