|
|
一、系统环境, E7 C6 b& _ ]3 |
root@server:~# cat /etc/lsb-release
& S+ N% V% r% {: d5 ?2 }' p2 BDISTRIB_ID=Ubuntu
' s) U) H2 a! l& U' j: SDISTRIB_RELEASE=22.04
) @# h9 x/ t5 j( yDISTRIB_CODENAME=jammy7 J; p( O- O; {1 u) C
DISTRIB_DESCRIPTION="Ubuntu 22.04.5 LTS"( @( m, g; K8 l
$ v: V% ]: z3 k( `
root@server:~# python3 --version& ~4 Z/ c1 L1 H, u
Python 3.10.12
2 |/ O- ?8 o1 n9 A1 O+ E) h4 U0 c
7 O' j S/ P& a* }6 n- _root@server:~# pip --version
+ R6 r+ P, R3 y6 ppip 22.0.2 from /usr/lib/python3/dist-packages/pip (python 3.10)5 u2 l5 L5 j+ o, b( Z9 O5 ~# F+ Z
# E: K$ ~* y: G2 q5 _9 O" Croot@server:~# pip3 --version
5 O# Q# q0 M8 r3 _/ Rpip 22.0.2 from /usr/lib/python3/dist-packages/pip (python 3.10)
6 O Z% M0 C# d7 z/ a( C( Q& e+ B" ]5 S6 k
root@server:~# docker --version
( I5 h3 w; ?/ k" F, dDocker version 27.2.1, build 9e34c9b
+ }4 d( X+ o. H7 G0 ? 最小硬件要求
, \# D: q& k4 ~7 o& M* z
4 N. s8 T6 e K/ }' X- @6 H4 M2 C6 G* z7 R5 A2 network interfaces/ I, Y: ]! W$ N, _8 N y
: D: |$ m8 S9 f/ y$ y- P$ `
8GB main memory. i3 _" k# |: O
r: f H* q3 ]* p& D. l( r40GB disk space
, e* p0 m. R. K+ q9 r二、openstack版本时间列表( u V* a9 i2 P
请阅览" {* e8 r: z2 m3 q5 C6 r9 i1 ?/ X
官方文档:OpenStack Releases: OpenStack Releases& S W) |: }7 Y7 Y7 K& U4 _4 Z
5 o1 x( t- S1 o% E O" U三、安装步骤1 ?$ i3 l2 `7 t* y0 n
1、更新安装源( S' ?1 ^2 B, {, Z6 t' q
sudo apt update
' d+ R- ]2 k) c% ~* h6 b& s( w2、安装python依赖库2 C0 m& m( h. @
sudo apt install git python3-dev libffi-dev gcc libssl-dev -y4 P+ n. A; F& Q# U3 |
*在第二步安装完成后,官方文档建议使用python虚拟环境
X9 |+ Q" ]* J( h8 ~4 h N; C9 m* V' p ]8 X
python3-venv
0 f- H* B/ q# \. C* a5 l B实际安装中,启用虚拟环境会出现一些文件和依赖库找不到的情况,有科学上网的情况下不使用python虚拟环境更容易成功。
2 c8 H' Q3 P( G3、更新Pip# @5 ]9 |# i* h* ^1 h
pip install -U pip
& o1 J6 W- J5 s4 } x; _0 A4、安装ansible,*此步有版本兼容要求 ,详细查看官方文档
! a" r! {. h9 d! n% [/ Jpip install 'ansible-core>=2.14,<2.16'
: Z O8 H+ R$ }/ |. \, X7 q( n+ ^& A( H: d
5、 安装kolla-ansible,*有科学上网速度更快,更易成功。0 \; U. ]7 d7 c# D+ \; R8 u- u
pip install git+https://opendev.org/openstack/kolla-ansible@stable/2023.2
8 `. S& y. ]2 Z8 E/ ]验证" t+ k4 S1 d9 k" m. z
6 K. ~" a" B: @) i6 q* K3 Q& v) v
root@server:~# kolla-ansible --version
2 O2 ~# n' U5 U* L# ?+ h L17.5.1
& L- s% v$ }7 b! n5 C4 M. U+ Z6 o4 q3 F0 n2 I: r
6、创建/etc/kolla目录) Y0 V) @4 o8 d5 O/ O" k- z
sudo mkdir -p /etc/kolla
A: ~; P' r& Z1 o( k9 ~ K5 msudo chown $USER:$USER /etc/kolla
$ v' T! d' O" v# o7 F# s& H 7、复制globals.yml和passwords.yml至/etc/kolla目录。7 `1 q& i9 t( N4 d- N
cp -r /usr/local/share/kolla-ansible/etc_examples/kolla/* /etc/kolla
4 o k+ f6 X# L# q$ o9 O, x2 j9 ~6 N! m! P' h: {& S2 c
8、将存文件all-in-one复制到当前目录 k6 |0 G1 h$ c7 |
cp /usr/local/share/kolla-ansible/ansible/inventory/all-in-one .& o+ T% k2 x( n5 n, N: k3 m/ y; G
9、安装 Ansible Galaxy 依赖项6 h: p. b$ a( T/ y0 |9 T3 T; T
kolla-ansible install-deps6 n! B' E- K. |3 [" C+ B
10、准备初始配置. g; Y1 f( e+ o' g0 D
kolla-genpwd$ j0 m! J1 ]7 H
此命令会自动在/etc/kolla/passwords.yml文件中生成需用到的密码,手动改成我们容易记忆的密码
7 T# d/ b) H4 P' C+ j) [4 r+ i1 a0 c. r o! D# Q
vim /etc/kolla/passwords.yml* c0 r# v8 r6 L6 x* Q' |" f
ironic_database_password: OP51scqsHjnnhyrcNP78EgrueWfCZqLsWsAxr6vY- ]0 o+ i3 P+ g3 @, `# B4 f. |
ironic_inspector_database_password: wFGxG2AGUObjFfAgjTik6xKyy45u1q82wJaM9Cpa7 v; G" m' Y* h7 `2 H
ironic_inspector_keystone_password: 3oO8YGp0C3lLdCWe9po2KlLuLUtZAlbDS5grxAjn3 @8 g1 v: |; V, [% e
ironic_keystone_password: LnnnShk6HEM8THNgGrng9wqVFzFGtKNSIIzCfYMd
% a0 I/ X! n+ {7 @keepalived_password: NzQGRdKBrw3WP9FFbAG0cwHpUNpDMEUolzEWn2Dm0 S" ]0 V& [5 L# q3 y% f- A
keystone_admin_password: 【登入密码】例如:root1234.
3 q3 Q9 W. |4 Q' {# Okeystone_database_password: xaYRCMsOtfPBs27upLeeC8Ve2VuZcmhuKEXvxXFE
. |* z' d. `2 X b# N& P, hkeystone_federation_openid_crypto_password: U5q5RIrkZawlGtR0sgHWWMYjO36UJtPWBPnC1vx2
7 A9 R7 |# M/ ~3 P& J. a; o _$ F, A' n1 P! x+ ]
修改/etc/kolla/globals.yml文件9 i( @3 W2 D: F
* b" h) q V+ u Q; \4 T
vim /etc/kolla/globals.yml
- h$ G( O. Q4 m$ c网络部分:
% ^( G$ j* B1 N' R2 J& {% q; o) \/ o( i7 |! Z, a% ?
#**********1 b8 e7 t5 [! n5 }
kolla_internal_vip_address: "192.168.8.88"9 A) r; d" y: v% e: {+ f
; Q: Y" L2 H$ I: L4 u. x& g#**************9 X7 ^; c* `9 M. s" C6 G. G
network_interface: "ens160"& g( w) a. m" P; C
0 @6 z0 l9 |. @3 J r3 `
neutron_external_interface: "ens190"
# ?( P1 x% g) B' L c*network_interface设备正常连接,并配IP4可正常上网和科学上网,和192.168.8.88在同一网段。 % p; g7 ]. l% ^1 s# W7 f
/ g; z4 J9 A( w0 u$ S*neutron_external_interface 设备为启用,但不连接状态3 i8 @/ `: `& K# t
) y: w5 @# |* c
启用裸金属配置
5 }/ a' n, r1 h5 i( `' K% [0 i" `
2 T: L& K5 v+ q( f t4 i#enable_influxdb: "{{ enable_cloudkitty | bool and cloudkitty_storage_backend == 'influxdb' }}"2 i: d) W; ^7 G2 T: k( K
enable_ironic: "yes"
7 F+ q$ _; u# A; h#enable_ironic_neutron_agent: "{{ enable_neutron | bool and enable_ironic | bool }}"
8 n/ b# d$ ^& v5 x5 u% A 裸金属配置部分
q& W6 q( _9 z& g' l: M; W% Q E4 D# i2 I
#############################$ i2 I4 r0 u# c1 j6 x5 T9 S
# Ironic options0 {4 \. D0 C6 T" o1 v/ A
#############################
. y$ S9 {' P3 j1 K# dnsmasq bind interface for Ironic Inspector, by default is network_interface" C9 t1 d% l5 w; Z0 u& j( c# U
#ironic_dnsmasq_interface: "{{ network_interface }}"2 n" t3 @1 Y* I( q6 F
ironic_cleaning_network: "public1"
( m; I9 F& G' l! \& T/ a& ~# The following value must be set when enabling ironic, the value format is a5 k+ ]& e ~' x4 h& i G
# list of ranges - at least one must be configured, for example:
6 Q, W: ?8 E( U8 p# - range: 192.168.0.10,192.168.0.100
8 x2 T# c7 j! T: |5 Q# See Kolla Ansible docs on Ironic for details.
7 R. q; Y8 B* s+ \- v- Q#ironic_dnsmasq_dhcp_ranges:- F' l3 M. q5 X( u/ C
# PXE bootloader file for Ironic Inspector, relative to /var/lib/ironic/tftpboot., g1 k% c' B8 z( i; n; t
#ironic_dnsmasq_boot_file: "pxelinux.0"8 A+ u$ n4 A$ Y- R6 }8 e
) T, \, [" `2 {$ O! D6 F( J
# PXE bootloader file for Ironic Inspector, relative to /tftpboot.9 d" n8 Z& H$ m+ c4 _* D, d' J- P5 ~
ironic_dnsmasq_dhcp_ranges:) e4 B3 n! _4 c# m! N1 Q
- range: "192.168.6.100,192.168.6.120,255.255.255.0"# E# e) H; @8 x1 E
routers: "192.168.6.1"1 ~, `* x1 t1 X% o: D
# # PXE bootloader file for Ironic Inspector, relative to /tftpboot.
7 h* W7 w, D3 e" }4 [+ kironic_dnsmasq_boot_file: "pxelinux.0"
9 @( a: N. J$ ]ironic_cleaning_network: "public1" j/ v( ]7 Z, r0 _
ironic_dnsmasq_default_gateway: 192.168.6.10 r1 F8 q( s1 @4 L2 {
11、 带有 kolla 部署依赖项的引导服务检查2 i% w% g* T9 s$ [; `7 H
kolla-ansible -i ./all-in-one bootstrap-servers
' ]2 i; o4 t0 q此过程中,可能遇到的问题- e7 u* r; p& E
& T! ?5 y3 \; I4 ~3 V: x1、无法下载docker gpg key文件* {9 t9 S3 _4 V7 i v, O8 Q( z
: R- h+ g( i m& ETASK [openstack.kolla.docker : Install docker apt gpg key] ******************************************************************************************************************************************************& E9 U5 ^/ W% g8 h+ L. \& I( F
fatal: [localhost]: FAILED! => {"changed": false, "dest": "/etc/apt/keyrings/docker.asc", "elapsed": 0, "msg": "Request failed: <urlopen error [Errno 104] Connection reset by peer>", "url": "https://download.docker.com/linux/ubuntu/gpg"}
0 y+ I8 i& ]5 C
! }3 o Y$ ?# W6 gPLAY RECAP ******************************************************************************************************************************************************************************************************3 E/ y4 n6 H8 `4 V# w9 G# Z' M
localhost : ok=15 changed=4 unreachable=0 failed=1 skipped=4 rescued=0 ignored=0 ( B0 s, o; I. b# R5 N
kolla-ansible无法安装docker官网的gpg文件,可用科学上网或是代理方法手工导入。例如: d7 _( P$ R, |# p5 C
6 F+ g- C6 I H2 E L
curl -x http://103.41.117.2:912 -U username:password -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -7 N- s8 s" l# Y- v! ^$ Q7 A9 z# B
2、设置apt repository错误. ~7 q! U, r2 r( E
* |# T7 U) I/ h- V! q1 C# ?* H
TASK [openstack.kolla.docker : Enable docker apt repository] ****************************************************************************************************************************************************- H" g: x; S; v% E$ E7 F
An exception occurred during task execution. To see the full traceback, use -vvv. The error was: apt_pkg.Error: E:Conflicting values set for option Signed-By regarding source https://download.docker.com/linux/ubuntu/ jammy: /usr/share/keyrings/docker-archive-keyring.gpg != /etc/apt/keyrings/docker.asc, E:The list of sources could not be read.3 A& J1 e( ^' x$ a! p# o5 D
fatal: [localhost]: FAILED! => {"changed": false, "module_stderr": "Traceback (most recent call last):\n File \"/root/.ansible/tmp/ansible-tmp-1726959353.5827672-18889-136818767683024/AnsiballZ_apt_repository.py\", line 107, in <module>\n _ansiballz_main()\n File \"/root/.ansible/tmp/ansible-tmp-1726959353.5827672-18889-136818767683024/AnsiballZ_apt_repository.py\", line 99, in _ansiballz_main\n invoke_module(zipped_mod, temp_path, ANSIBALLZ_PARAMS)\n File \"/root/.ansible/tmp/ansible-tmp-1726959353.5827672-18889-136818767683024/AnsiballZ_apt_repository.py\", line 47, in invoke_module\n runpy.run_module(mod_name='ansible.modules.apt_repository', init_globals=dict(_module_fqn='ansible.modules.apt_repository', _modlib_path=modlib_path),\n File \"/usr/lib/python3.10/runpy.py\", line 224, in run_module\n return _run_module_code(code, init_globals, run_name, mod_spec)\n File \"/usr/lib/python3.10/runpy.py\", line 96, in _run_module_code\n _run_code(code, mod_globals, init_globals,\n File \"/usr/lib/python3.10/runpy.py\", line 86, in _run_code\n exec(code, run_globals)\n File \"/tmp/ansible_apt_repository_payload_hw0whgee/ansible_apt_repository_payload.zip/ansible/modules/apt_repository.py\", line 765, in <module>\n File \"/tmp/ansible_apt_repository_payload_hw0whgee/ansible_apt_repository_payload.zip/ansible/modules/apt_repository.py\", line 742, in main\n File \"/usr/lib/python3/dist-packages/apt/cache.py\", line 152, in __init__\n self.open(progress)\n File \"/usr/lib/python3/dist-packages/apt/cache.py\", line 214, in open\n self._cache = apt_pkg.Cache(progress)\napt_pkg.Error: E:Conflicting values set for option Signed-By regarding source https://download.docker.com/linux/ubuntu/ jammy: /usr/share/keyrings/docker-archive-keyring.gpg != /etc/apt/keyrings/docker.asc, E:The list of sources could not be read.\n", "module_stdout": "", "msg": "MODULE FAILURE\nSee stdout/stderr for the exact error", "rc": 1}
' @5 d. |: T3 u5 p, f 科学上网可以解决,或者可以手工导入docker官方源
! r3 H" C/ N& d0 A# |) U, }+ l3 \5 X$ h" j+ |- [& V# ?8 F, @
sudo tee /etc/apt/sources.list.d/docker.list <<EOF
4 w( y/ b+ P, d% H% k% }4 Ndeb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable
7 ^! q- U" C- e; ~1 [0 ]EOF
8 Y2 V3 U: x: i12、对主机进行部署前检查
3 W3 W" ~0 P6 |; zkolla-ansible -i ./all-in-one prechecks
* |+ o% M7 |2 z3 a( u2 a: [ 13、实际的OpenStack部署
4 r" j5 d+ I) ~$ Zkolla-ansible -i ./all-in-one deploy
+ c1 I! Z; Y& f* }/ d% l部署成功后,裸金属向导界面为
( c9 M0 q. p/ }. R p l7 n: u$ ^. r, j- U7 {* P
/ H. \* K7 B0 y* ~+ w, y+ \" H- |. e; |1 p( j# F0 |
注册节点驱动属性增加http下载# R6 h) m0 n% K* ^4 w b( h
) r: B( r, q% `. c. W' y, P0 ?
9 D. D. R6 d. L# B+ {/ c) L; }) [+ {
S: f8 U! L6 x d/ t* T" O; w9 B# S
$ k1 f6 z, ^" q4 ~2 t3 k四、其他问题
% V, f. S. d" l$ v% U1、部署出问题时,摧毁所有系统配置。
) p0 b3 a0 }' i9 P' N6 Fkolla-ansible destroy -i ./all-in-one --yes-i-really-really-mean-it- ~+ m3 ~! t; O* P' N3 [- @+ c
+ \5 J$ {# }: h( y( U4 k @
2、安装CLI客户端
% g9 n6 c4 G* k" M# @pip install python-openstackclient -c https://releases.openstack.org/constraints/upper/2023.2 o, Z, k& }( B# w+ }" O
! ~, \. }/ Y% S- f. } a0 z) g1 ?8 |3、生成管理员认证访问凭据文件8 @1 p4 u. I6 Z* y$ z- j
kolla-ansible post-deploy* z7 H1 n: L, T& z+ V+ ]6 i: s8 X
/ x% `" E3 `, s! ecp /etc/kolla/admin-openrc.sh .! N, p" I# Q# W$ p/ }' }, @
使用CLI访问时,可先启用6 @$ p1 m8 ]' g; D z
( C( ~1 X" F5 w2 m
. admin-openrc.sh
- U5 p w5 ]: R7 s8 P5 N/ N 运行测试! T! k* ~' v, N. Q
" K1 L' p2 ^0 J
root@odoo16e-server:~# . admin-openrc.sh" u' |, l+ X3 T) Q* G5 \
root@odoo16e-server:~# openstack compute service list/ @1 Q, [0 ?* _6 k- @
+--------------------------------------+----------------+-----------------------+----------+---------+-------+----------------------------+( ^# R8 ~& M. T% R( d9 T
| ID | Binary | Host | Zone | Status | State | Updated At |3 z& R4 S; e. T# Q3 B% ^
+--------------------------------------+----------------+-----------------------+----------+---------+-------+----------------------------+
2 e& ]( c2 ~0 r1 r% l. G/ R| 67f25603-5d6e-4327-a9d2-b0fd341876f3 | nova-conductor | odoo16e-server | internal | enabled | up | 2024-09-19T03:31:17.000000 |" b, B) G1 f/ N5 K6 c
| f49326e1-1608-4546-bed0-123dd2e52af8 | nova-compute | odoo16e-server | nova | enabled | up | 2024-09-19T03:31:13.000000 |2 }* _. u! d: h% z! E8 o
| b26f35c0-bb02-4151-8df4-e30d65eb6e4a | nova-compute | odoo16e-server-ironic | nova | enabled | up | 2024-09-19T03:31:19.000000 |
: N6 o3 s3 O) S1 W8 T| 9b988858-bcbf-4fce-8b55-c0c01e30a463 | nova-scheduler | odoo16e-server | internal | enabled | up | 2024-09-19T03:31:19.000000 |& q' t! n$ b8 A! [! \8 J# I; d+ E3 T
+--------------------------------------+----------------+-----------------------+----------+---------+-------+----------------------------+
4 W$ v+ a2 w* }6 `
' n3 ~% ~4 c1 n$ j2 r- B; c. H8 X' M3 u5 g6 @! i# y8 [ R0 }1 Z
|
|