将设为首页浏览此站
开启辅助访问 天气与日历 收藏本站联系我们切换到窄版

易陆发现论坛

 找回密码
 开始注册
查看: 270|回复: 5
收起左侧

config drive on openstack subnet 没有开 DHCP

[复制链接]
发表于 2021-11-23 11:14:39 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?开始注册

x
上一节最后问了大家一个问题:如果 subnet 没有开 DHCP,会是怎样一个情况?% m( u/ B) ^8 K2 i5 ?3 }
在其他条件不变的情况下,cloud-init 依然会完成那 3 个步骤,也就是说网卡还是会被配置成 dhcp 模式,只是最后网卡没办法获得 IP 而已。
7 B; V+ F5 F8 `% p0 h+ n- K
不开 DHCP 也是一个常见的场景,为了让 instance 的网卡在这种情况下也能够被正确配置,我们需要借助 config drive。
, J/ ~& {# l5 J4 {+ s
在计算节点 /etc/nova/nova.conf 中需要添加一个配置,然后重启 nova-compute 服务

' ]. T. O7 V1 a& H+ n
7 ^( }  O" h8 F4 x  d* j. H  t
[DEFAULT]
, l+ B% m5 J# A2 F2 L
flat_injected = True

9 [0 r- B6 F6 E& K; `: J
4 e2 n9 d8 n6 N* k3 U" W( I9 r8 N

* n" ?/ E+ f- ^& }
flat_injected 的作用是让 config drive 能够在 instance 启动时将网络配置信息动态注入到操作系统中。
当前网络的 DHCP 已经关闭。
+ i$ \% N# \/ c3 R8 g9 Y

& n8 q1 }( Y% y, e; k4 Y$ m! minstance 部署时指定使用 config drive
2 K' m1 h& T# T) r
& Y4 ?0 C7 C1 d9 y. l+ P& f
Neutron 为 instance 分配的 IP 为 18.18.18.5。

! H; j) I2 M$ W1 Binstance 启动后登录系统,ip a 验证 IP 已经成功配置,说明 config drive 起作用了) @3 e& b! K0 |

; n( ~9 d5 i: {4 e) K3 }/ T: U重要的是弄懂 18.18.18.5 这个 IP 是如何配置上去的。打开 /var/log/cloud-init.log,分析如下
9 o' K5 Y7 X9 N
① 扫描出 instance 中的所有网卡,这一步与不使用 config drive 的情况完全一样。
② 获取该网卡的配置信息。 日志显示配置信息是从 ds 获取。ds 是 datasource 的缩写,在这里指的就是 config drive。
& p; A2 u. e3 b( i在不使用 config drive 的情况下采用的是 fallback 配置。
5 A1 M4 m0 h. J9 ~' [' a: _网卡配置信息记录在 config drive openstack/latest/network_data.json 文件里,内容如下:

" v: T5 j5 y0 m1 @$ e
③ 将配置信息写入 /etc/network/interfaces.d/50-cloud-init.cfg,内容为:

4 k9 s# O3 a, i8 a# Z, c. \/ m
可以看到 IP 以 static 方式配置。
  总结  8 g0 D/ {& h  I# l  q
1. 在没有使用 config drive 的情况下,cloud-init 只会配置第一块网卡,且设置为 dhcp 模式,所以:: D* @6 `0 E6 T8 o$ {$ K
    ① 如果 instance 只有一块网卡,且启用了 DHCP,网卡能够被正常拉起。
    ② 如果 instance 有多块网卡,第一块会尝试以 dhcp 方式拉起,其他网卡不作处理。
2. 使用 config drive 的情况下,无论是否启用 DHCP,所有网卡都能被正确配置且成功拉起(如果 dhcp 网卡 >= 2,CentOS 还是有问题,可能跟目前所用的 cloud-init 版本较低有关)。
3. 如果可能,尽量使用 config drive。
讨论完网络配置这个最重要的主题,下一节我们来看看 cloud-init 的其他典型应用:设置 hostanme,设置用户初始密码,安装软件等。
% i7 k. d: S4 s# P& g, H; Z
 楼主| 发表于 2021-11-23 11:19:07 | 显示全部楼层
环境:
openstack版本pike
控制节点主机openstack-controller(ubuntu 16.04.5) 172.27.34.37
" |: s! P# v3 Z- T( m- P& O3 ~
计算节点主机openstack-computer(ubuntu 16.04.5) 172.27.34.38
vxlan100& l3 a" O! b" p' d& r/ N
centos7-init(172.27.100.2)、ubuntu1604(172.27.100.20)
centos7镜像
! P) Y& @# i  W( k  m
CentOS-7-x86_64-GenericCloud-1809.qcow2c
ubuntu16.04镜像
& [7 |& O2 G* R  _" o
xenial-server-cloudimg-amd64-disk1.img
cloud-init
( }7 r2 I; A4 A. j9 G% x
cloud-init 0.7.9

% M* |/ c5 \9 H- ?
ubuntu安装详见:Ubuntu16.04.5以lvm方式安装全记录
openstack安装详见:OpenStack实践(一):Ubuntu16.04下DevStack方式搭建p版OpenStack
浮动ip搭建详见:OpenStack实践(九):Open vSwitch方式实现floating IP
0 j7 s/ G. b3 `( y1 p: }

3 F/ \+ c' Z) o1 |: A
+ n& E' {6 z1 ?! l. m+ w9 b) j! Y1 z7 L3 X4 E; o- w

& Z. l4 ~$ n3 x, j- R
cloud-init简介* T$ h: v# H& x4 {+ `4 f8 `' _
cloud-init是linux的一个工具,当系统启动时,cloud-init可从nova metadata服务或者config drive中获取metadata,完成包括但不限于下面的定制化工作:, Q* u- \% L; q4 J, Q5 h4 x) |
1.设置 default locale
& w5 R" K$ u" C+ S8 R1 @1 F% z2.设置 hostname
  q0 \2 G4 z  B$ n! W3.添加 ssh keys到 .ssh/authorized_keys/ V2 v4 P; {( ~" [8 W8 O
4.设置用户密码  ?( N: A% _, J# ?
5.配置网络
3 c0 T( m" v( W9 {7 X) E

  D* Q5 x. I$ Z; ]
为了实现instance定制工作,cloud-init会按5个阶段执行任务:! M  x* ^  v# Z% m; Z1 A' p9 J
1.Generator    (cloud-config.target)
' W' i9 h9 v* G& Q2.Local    (cloud-init-local.service), i5 v6 B, f0 ?4 k' a" A/ Z
3.Network    (cloud-init.service)
. v- A3 e1 @6 o4.Config    (cloud-config.service)
+ Q9 O: j8 M0 w* F: U4 ^2 E5.Final    (cloud-final.service)
如下服务:
[root@ltestwithoutdhcp ~]#  systemctl  list-units|grep cloud-
9 O7 p8 @' M' b2 ~6 F  cloud-config.service                                                        loaded active exited    Apply the settings specified in cloud-config) `8 M+ Q1 ]* s0 ^
  cloud-final.service                                                         loaded active exited    Execute cloud user/final scripts
2 t+ ^* l% c0 B- g# V- P  cloud-init-local.service                                                    loaded active exited    Initial cloud-init job (pre-networking)
1 g: g1 h8 _( I) p& C  cloud-init.service                                                          loaded active exited    Initial cloud-init job (metadata service crawler)
6 N6 b2 Z) u# P9 ]' `  cloud-config.target                                                         loaded active active    Cloud-config availability& C7 Q6 S# E# C# a
  cloud-init.target                                                           loaded active active    Cloud-init target
. E' o  x) D4 m, I7 c. ~( ~

, L% d6 e; n7 V7 @4 T" O/ h) |0 e8 z5 v5 ]+ U' {* s$ y. g& j4 Q
各阶段作用
Generator:读取配置文件cloud.cfg;
Local:定位“本地”数据源和配置网络;
Network:读取cloud_init_modules模块的指定配置;
Config:读取cloud_config_modules模块的指定配置
Final :分别读取cloud_final_modules模块的指定配置
3 |1 ]. n0 c8 O4 i& Q
cloud_init_modules:
6 h+ m! J8 h' E4 c5 { - disk_setup
9 a+ d, k9 P9 y; l+ P - migrator
3 Q) X/ X7 W3 m4 h: x - bootcmd
. R9 M' B2 N: ]$ z4 E - write-files
: c" ?, M# s4 {/ z! ` - growpart
1 G( q# ~: j% Z) u - resizefs
$ d9 a' \# _9 J+ {. t - set_hostname
% @4 b+ T2 f! y& O  G& \9 c# - update_hostname  b: T; a/ C% X; C/ r/ e& @; }: x
- update_etc_hosts
/ c# }. ~' p, V# T0 Q9 D* e0 {5 u3 t - rsyslog7 r9 S) |  B! a" R
- users-groups
0 {7 e( x) \7 l( q3 T - ssh
cloud_config_modules:
# F- m6 `3 j# \! q - mounts
$ b/ y' N  [, A* @1 Y, A  F' a; R - locale! m8 V- t7 E5 {( R1 ?* _* \
- set-passwords
. X& x" h# R# b7 K' J7 U4 } - rh_subscription
6 }+ l4 X  `7 M1 m# ?1 q - yum-add-repo
8 [8 K; K; \: p* W. ] - package-update-upgrade-install
& q9 @! |3 L/ N: z$ Y" n1 d, N4 Y - timezone# ~4 Y& N- [2 D
- puppet
+ `; W; T! W" D, H# B" Z - chef, U3 W! B8 W1 ^+ ?
- salt-minion* s& i4 A/ y+ y
- mcollective
, H) J' Q8 m3 L9 c2 P  P0 \1 d - disable-ec2-metadata
7 A3 v% i! Q/ P$ i* Q2 s1 b: S8 z - runcmd
cloud_final_modules:
! v3 ~) K! v2 c3 i - rightscale_userdata
- I( U" ^6 \/ f0 H, @* {3 G - scripts-per-once
2 I+ C1 K2 A  W) i8 v+ ~4 Z0 I- i - scripts-per-boot/ I* y& o) _( g
- scripts-per-instance9 Y1 F* W% s: r2 H. N; @; D
- scripts-user
: J, E# x2 x( s  ]' m - ssh-authkey-fingerprints
8 u" s0 h5 F1 D0 R% x% U6 ? - keys-to-console1 N8 t6 L2 g8 |  Y: x
- phone-home
# x& U7 e: s4 H. M: u- m - final-message
) G3 Y4 y, J/ G - power-state-change

: t5 A9 k7 X) u5 @- v  n" p: n+ {% ]5 U/ ~; t- x$ J  p4 d2 i7 v4 J4 o
cloud image
+ \3 b2 Y  J$ Y+ V9 k& D9 rubuntu镜像:http://cloud-images.ubuntu.com/, `0 _" V. Q* Y7 w2 B9 _
centos7镜像:http://cloud.centos.org/centos/7/images/
; a0 S* ~4 p, R9 {! M这些镜像已经预装cloud-init
# V2 ]4 z& F: K
$ k, K: R8 J* Z7 {, b; u
config drive; I: Y+ }0 T* r4 A
当无dhcp服务时,可以通过config drive获得metadata
配置config driver
[root@compute01 nova-compute]# view /etc/kolla/nova-compute/nova.conf
2 F0 s# ~5 o( }5 ]* [, z[DEFAULT]
) y0 A1 T* \' x
( ~/ j' N% N0 A  v. U( x( S0 L0 h2 l4 s
flat_injected = True/ S' u; y# {- \  `: ?: ^5 s( \3 B
! l) t  `6 r+ l* D# |" X* I
该配置是为了关闭DHCP服务时实例网卡也能被正确配置,重启计算服务后配置生效。
stack@openstack-controller:~$ sudo systemctl restart openstack-nova-compute.service
3 p* B+ n; I* y* O9 T. a1 z, J0 B
% f$ \; W5 ]% T) N8 J) Z, O
关闭dhcp
为确保实例通过config driver获取的metadata,这里关闭dhcp服务$ T  B3 E- _, z, y

0 Z: Z, k  {& u企业微信截图_163763823247 ...+ ~" ?* [- ]9 |! d0 x# h/ _
启动实例
root@openstack-controller:~# nova boot --flavor m1.small --image centos7  --availability-zone nova:openstack-controller --nic net-name=vxlan100 --key-name centos7 --security-groups centos7 --user-data /tmp/centos.config --config-drive true centos7-init
通过--config-drive true启用config-driver,通过--user-data /tmp/centos.config加载配置,ubuntu的配置文件为/tmp/ubuntu.config
打印的日志,传入的user_data
* b8 v; m) Y4 s7 L# A
绑定浮动IP
0 b7 N& Z# r5 ^$ t2 s5 N
* n8 @) k9 B9 P8 c8 h
user-data:centos.config
#cloud-config; B7 X& I! \0 I5 Q2 Z7 q' q
chpasswd:
# n0 a: W4 _3 }2 B6 b8 N- ~7 l    list: |
$ ~2 u; {! ~* j) a0 ^3 W        root:rootroot
& u+ k7 e2 x. I  K7 T) j: Q        centos:centos+ O, a9 }, D( d7 e
    expire: false, s1 e7 G# R" ]6 s$ [6 y: Q- a$ Q
ssh_pwauth: yes
2 y+ ~5 C& ~; z; k* chostname: loong576- p2 S; ?2 b& r
yum_repos:
$ \& u5 `7 O$ X/ u* l    epel-163:
9 {$ I2 E8 N! P) [( X+ J        baseurl: http://mirrors.163.com/centos/$releasever/os/$basearch/7 r+ W8 [# m: @& Q: Z
        name: Centos-7
4 _; z& {9 ~) y: {8 Q# ~        enabled: true3 u* l( c% F4 @/ n
resolv_conf:
) o! O$ Z5 L6 B. Q' f: f: C    nameservers: ['218.104.1xx.1xx', '8.8.8.8']
  N# |. `- q7 i  r4 C' o    searchdomains:
; ^) X* i: n  y9 ~3 u& _        - localdomain
" Z0 |, [% R- @: C' u    domain: localdomain
  G( A6 V" p) t- ?    options:
/ u& w7 D# e2 |  {        rotate: true
3 i: u( J2 t5 Y: L1 U        timeout: 1, `, @& T( s9 G% m
manage_resolv_conf: true
; G" i0 j7 a" z( m7 E9 u% Q! L, E  ?  Z# m
packages:9 `3 {6 q# l. ]3 D8 z! V, }3 b
    - vim/ m1 ]0 i/ `! ^6 P9 M
    - wget. l* Q& l2 c% n9 z5 l# t- m) {$ J
    - httpd
. T$ D& ]2 {6 }$ S# X- D3 ?  atimezone: 'Asia/Shanghai'1 m: r3 @) K7 Q
runcmd:
0 {- J6 W, h6 S4 y    - [ sed, -i, "s/^ *SELINUX=enforcing/SELINUX=disabled/g", /etc/selinux/config ]
3 P0 r1 e) Y. m% \    - [ mkdir, /dropme ]
4 w8 f, x! s2 M9 S6 I    - [ touch, /root/abc.txt ]7 Q' Y5 q/ Q8 B* g
    - [ sed, -i, "s/^ *nameserver.*/nameserver 114.114.1xx.1xx/g", /etc/resolv.conf ]% r$ |. d8 n7 ]7 q
    - [ rpm, --import, /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 ]
- z4 Y  P& j# Kpower_state:" t5 k/ w: E$ u. E8 z! ~; I7 G
    delay: now
0 X* o+ S: R* v    mode: reboot! i' |% _3 {& h( g: _
    message: reboot now
9 n: z( L6 t6 W1 D; }4 y    timeout: 30  r+ H1 K* E7 l  N8 b. G; A! z8 S' Y
    condition: true9 Y3 ?, \+ m4 @$ S

0 q% C* Q5 T, d1 J, t' P" G& ^% M  K
验证是否生效1 A  y3 k# u' j$ U4 w
验证定制的配置文件centos.config是否生效
16376386143172.png
  y, x: _! w: F% g7 g2 ~! i

! J  x! R0 B" Y7 T6 }: X
实例可以直接root登陆(默认只能通过创建密钥对方式登陆)成功获取到ip,配置了yum源、时区,runcmd运行正常,关闭了selinux(power-state-change正常),产生了测试文件,修改了[url=]dns[/url]信息' s+ K" C2 |* p7 O
  D6 s/ ?' |: T3 v( f
user-data:ubuntu.config
root@openstack-controller:~# more /tmp/ubuntu.config: L6 l' _4 Q" L
#cloud-config
% Y' ?5 T: a# ochpasswd:
, r# X/ t5 [" v+ V& M: e+ U: c    list: |
" k5 g( {! g. B2 ]5 k        root:rootroot" J  {; W/ s2 A
        ubuntu:ubuntu3 t! m; q8 ~$ \0 @/ j% Z$ j' ~
    expire: false1 J# z6 p* W6 ^: d3 t
ssh_pwauth: yes
' t- v; O6 x1 J; E+ N  a0 q. e
) s6 x9 m/ I$ jhostname: ubuntu1604
0 e7 L2 p8 z' g5 @! g# `% q9 g3 f/ qapt:
! B% q; ~4 _; t" u( p: ^4 n( W    primary:
1 L% y3 H' A2 H        - arches: [default]
( {6 Q! Z& H" F" c% k4 Y          uri: "http://mirrors.aliyun.com/ubuntu/"
$ k! V9 \8 O* @" n3 Z0 s          search:1 Y0 p& d4 P3 y9 `( X$ l1 v- d! `
            - "http://mirrors.aliyun.com/ubuntu/"
$ M4 o& r; a$ w+ A! U/ T* F
6 ]1 T4 d& {6 n1 nresolv_conf:
/ P& H& Y% ~  V4 B    nameservers: ['218.104.1xx.1xx', '8.8.8.8']) F( l  ?0 g7 y. I
    searchdomains:
5 {& f! ~$ r5 @8 H2 g6 P3 [( @        - localdomain" Y8 T7 z3 K  @+ f7 p2 C
    domain: localdomain! s5 Z- P$ T7 e( U. s7 S* d
    options:
2 Z/ U2 i: f. R9 o+ M        rotate: true
0 l( @5 v/ T% g3 r! a: U* z        timeout: 10 B0 g3 Z9 v/ T7 U  Z2 ]. n- C% N8 B. j
manage_resolv_conf: true
  U. a$ p* c3 [8 f2 v2 Ipackages:
5 q8 C4 v6 v' k& k1 o; q5 ]4 e - apache26 `' M" W5 V& P; e
timezone: 'Asia/Shanghai'8 a# M! {1 i9 S: G! w
runcmd:: i0 h! |5 {7 `8 q8 Z7 M7 X* R
    - [ mkdir, /dropme ]
, y- @- J4 `/ l    - [ sed, -i, "$a nameserver 114.114.1xx.xxx", /etc/resolv.conf ]
. l! N1 Y# s7 p' O( n/ s3 q! _% M' \+ {7 V" [' \+ l+ a% t7 R

4 q" p' s/ C: T4 F
验证是否生效
4 G: i' l7 U+ v& a$ a' d1 y8 H
验证定制的配置文件ubuntu.config是否生效
16376386143172.png
: R* ?- `* y9 D5 G4 n+ S+ A+ F
实例可以直接ubuntu登陆(默认只能通过创建密钥对方式登陆)成功获取到ip,配置了hostname、apt源、时区,runcmd运行正常,产生了测试文件,修改了dns信息

! t9 R$ E# i& P* ~
查看config drive
sr0就是config driver,挂载并查看
6 f/ r. `  i' r9 ]; k4 i
[root@centos7-init ~]# lsblk
7 P. v8 t9 r8 d( T5 m7 q0 V% U; ~  [- p/ _, r" I% j+ S; F
[root@centos7-init ~]# mount /dev/sr0 /mnt* j' b# V6 x2 r3 H4 z& T/ X& `5 Y
[root@centos7-init ~]# cd /mnt/openstack/latest/ && ll& ^: v# E( u* h- [; g

# U& f6 A! R, T* w8 o[root@centos7-init latest]# more meta_data.json 5 V6 i8 ^5 I) g9 Y  E, X" h
[root@centos7-init latest]# more user_data
9 R9 v. U6 i5 g# k: ~, Y- ?8 f  a
6 ^( \' T# A# f& T3 X1 g9 `7 s! h
# ]# Q) z- ^/ @
2 |. O% _1 Z! }9 l; e8 i* X
meta_data.json中存放了public_keys,hostname等信息,user_data对应centos.config。
& |+ X$ j2 m/ }! O+ x  {2 {; M5 l
cloud-init.log日志分析
[root@centos7-init ~]# view /var/log/cloud-init.log
第一阶段服务
) j" _; h8 L0 e- D/ `

" J* J$ r: l6 u7 b6 ]/ l# |
第二阶段服务9 \0 R4 w" B% ?, q- Y9 _
% }2 U8 r$ @# D$ d, k# M% _
第三阶段服务: `. d6 a: i  [' s9 f' q
在第三阶段init-network服务会依次读取cloud_init_modules模块中以下配置:check-cache、consume-user-data、consume-vendor-data、config-migrator、config-bootcmd、config-write-files、config-growpart、config-resizefs、config-set_hostname、config-update_etc_hosts、config-rsyslog、config-users-groups、config-ssh

: J; G& O" R! _+ n5 s, z; I
第四阶段服务
在第四阶段modules-config服务会依次读取cloud_config_modules模块中以下配置:check-cache、consume-user-data、consume-vendor-data、config-migrator、config-bootcmd、config-write-files、config-growpart、config-resizefs、config-set_hostname、config-update_etc_hosts、config-disable-ec2-metadata、config-runcmd

" _: E9 C0 {3 b' }5 T) a- s
第五阶段服务
4 K, }. }. c/ G7 ]% n" J" j3 G
在第五阶段modules-final服务会依次读取cloud_final_modules模块中以下配置:config-rightscale_userdata、config-scripts-per-boot、config-scripts-per-instance、config-scripts-user、config-ssh-authkey-fingerprints、config-keys-to-console、config-phone-home、config-final-message、config-power-state-chang
cloud init的modules里面提供了丰富的定制信息,详情可以参考Cloud-Init官网:https://cloudinit.readthedocs.io/en/latest/index.html#

4 R  r, a& M; g7 L1 e+ v! [
cloud-init调试
各服务单独调试
8 S. m5 {# `( ]$ y1 n
init-local:cloud-init init --localcloud_init_modules:cloud-init initcloud_config_modules:cloud-init modules --mode=configcloud_final_modules:cloud-init modules --mode=final
[root@centos7-init ~]# cloud-init init --local

# q( D( L3 _4 b( N. F
调试某模块的某个配置
[root@centos7-init ~]# cloud-init single --name timezone
调试cloud_config_modules模块的timezone配置

, z  R3 Z0 ?4 J+ K6 P& V
实践总结:
1.各模块的各配置项依次读取生效
6 Y( C- d0 K0 W7 w4 j
在定制实例时,会依次读取配置文件cloud.cfg配置项。
实验环境的主机需配DNS才能访问外网,通过cloud_config_modules模块的runcmd配置项配置DNS,由于配置项package-update-upgrade-install在runcmd之前,cloud-init会先安装软件,这时外网是不通的,所以报错。
/ k' X2 ^" Q9 J
2.centos的hostname设置不生效
尝试了很多参数组合,都没有到hostname,原因待查
尝试过的参数
hostname: loong576manage_etc_hosts: truepreserve_hostname: truefqdn: loong576
ubuntu没有这个问题,只需设置hostname即可,重启系统也任然生效。

3 U6 |* j( {$ b  B# P, H3 _
3.DNS配置不生效
配置项resolv_conf不生效。centos和ubuntu都不生效,centos貌似是个bug,参考:https://bugzilla.redhat.com/show_bug.cgi?id=1489270,ubuntu建议将dns信息写入网卡/etc文件/network/interfaces。
+ V8 g* w" S( }( _* I6 K$ N/ z! n+ ^
4.runcmd执行命令是应该是双引号
这个有点坑,在用sed命令执行关闭selinux和配置DNS时,正常的单引号''需替换为"",否则执行报错。

4 J! H8 t% X0 o- W2 M4 ]
5.某个配置项不合法则整个配置不生效# N, \3 f8 f6 Q  |. m0 Q
runmcd有个配置非法
报错日志
此时整个centos.config配置文件不生效

2 }9 t8 P6 i6 }- K0 m# K, k
16376386143172.png
企业微信截图_16376382324763.png
16376386143172.png
 楼主| 发表于 2021-11-23 12:56:32 | 显示全部楼层
At the end of the previous section, I asked you a question: What would happen if DHCP was not enabled on the subnet?! W* y0 ?& Y( C  @( R
If other conditions remain unchanged, cloud-init will still complete the 3 steps, which means that the network card will still be configured in dhcp mode, but the network card will not be able to obtain an IP in the end.
1 R% v0 k: N: \' C" ?It is also a common scenario not to enable DHCP. In order to allow the instance's network card to be correctly configured in this case, we need to use config drive. Let's start to practice.! T  A# K7 b; i8 s# }
You need to add a configuration in the compute node/etc/nova/nova.conf, and then restart the nova-compute service.$ b+ L( [2 h- G* W0 b8 G9 ?+ s
[DEFAULT]
( z6 M0 o) v" Y3 V4 r* @flat_injected = True/ K& s1 h6 Q) F9 |6 F: Z
The function of flat_injected is to allow config drive to dynamically inject network configuration information into the operating system when the instance starts.
6 `& r) ?* H: K2 b# o" ?4 m  a  {The DHCP of the current network is closed.2 B3 p5 E5 }; T; E6 I% s% l5 a- @, f

# h  ^7 K. K" Y! D" |* XThe config drive is specified when the instance is deployed.
5 j" F. n: Q7 D, |2 W" F! o
& a& C7 w) r  B4 g2 x3 w* B9 W9 hThe IP assigned by Neutron for the instance is
/ U! \% E7 U. x* J3 N: t& M18.18.18.5  h* D; j5 m6 E, q0 S
.& @/ \% p$ f5 h3 k) f
Log in to the system after the instance is started,
* h* a8 f- c  B8 j) o7 _ip a0 _- i0 z; z; |* j
Verify that the IP has been successfully configured, indicating that the config drive is working.1 L; Z" {  u- }9 T9 S- |% v* t
The important thing is to understand
5 R: E6 p2 u7 ]+ p$ H. ]& p18.18.18.5
9 n8 p$ X8 P# J* | How is this IP configured? Open/var/log/cloud-init.log and analyze as follows:3 P+ r! d. v" l9 |4 H
① Scan out all the network cards in the instance. This step is exactly the same as the case without config drive.
1 p& [! r& h5 R3 H" t) G② Obtain the configuration information of the network card. The log shows that the configuration information is from - v; j. z* ?2 ~; ~4 L3 u
ds8 I0 U% `. M; D6 t' k* Y
Obtain. ds is the abbreviation of datasource, here it refers to config drive. In the case of not using config drive, the
3 w) k' y5 N, I: Hfallback
" Z, [/ M6 g% c% T# t" E+ ? Configuration. The network card configuration information is recorded in the config drive openstack/latest/network_data.json file, and the content is as follows:
* J/ _( F; g4 O0 p③ Write the configuration information into/etc/network/interfaces.d/50-cloud-init.cfg, the content is:
; h: U/ P7 i! Z& a' h5 G9 y
! H7 Z0 k" h* o- E( ~/ F: K3 r7 dYou can see the IP to
/ [( N, |+ N! e: O% z* e; V+ Y; J, Rstatic0 _+ O2 s# R- e5 W
Mode configuration.
2 j/ ?1 P) B; B$ @1 D4 X7 WConclusion:$ ~! t6 n5 ^/ T+ ?: `
1. Without using config drive, cloud-init will only configure the first network card and set it to dhcp mode, so:
0 X1 q! z! m" m3 k; w# P① If the instance has only one network card and DHCP is enabled, the network card can be pulled up normally.( {4 y' P/ ?+ Y4 }
② If the instance has multiple network cards, the first one will try to be pulled up in dhcp mode, and other network cards will not be processed.6 M. ~* G' ^& v3 m( ~
2. In the case of using config drive, no matter whether DHCP is enabled, all network cards can be correctly configured and successfully pulled up (if dhcp network card>= 2, CentOS still has problems, which may be related to the lower version of cloud-init currently used ).
5 h! O, C, ^2 E" m! Z9 {3. If possible, try to use config drive. After discussing the most important topic of network configuration, in the next section we will look at other typical applications of cloud-init: setting hostanme, setting user initial password, installing software, etc.
0 B1 H( {! T$ e5 n* a) q
 楼主| 发表于 2021-11-23 16:47:01 | 显示全部楼层
配置nova.conf文件:
6 Z( h- f& G; q  @         flat_injected = True  #使能network信息注入功能, E( c% k1 A! V1 Y) h+ R) X( E- g+ O
         injected_network_template = ********  #配置产生网络metadata数据的模板位置。
! \/ g9 v$ `9 T7 x( U; u         默认在nova安装目录下,存在interfaces.template模板;+ F0 Q/ f3 ^  [; B1 u: h
         nova/virt/interfaces.template3 K; w( j8 x$ h4 g# Z6 X, F

6 ]$ y$ D8 x  }$ M9 S) V         实验时,copy上述文件到/etc/nova目录下。设置injected_network_template为:
* r2 ?$ t7 n% f. V$ C          injected_network_template = /etc/nova/interfaces.template
, u' Y  n$ ]1 {9 T3 w: r# {7 x 启动虚机时,nova-compute服务会按照interfaces.template的格式,生成content/0000文件。% T# c4 _) s: s2 H5 ]" y

3 o$ V5 g4 K! o" I5 E1 E
 楼主| 发表于 2021-11-23 16:59:47 | 显示全部楼层
cd /usr/share/nova/* b- l6 F% x. }
cat interfaces.template 9 U4 Q/ g% |- t
DEVICE="{{ name }}") w" A: Q. ^( `. R- t& P, _
NM_CONTROLLED="no"
5 Q" L$ M# U7 v' Q* GONBOOT=yes3 y9 O2 N8 \, N) N5 i  t. \6 m/ V
TYPE=Ethernet% ^5 z3 W; J2 k& g- H1 Z
BOOTPROTO=static( V5 \: r; M. _
IPADDR={{ address }}9 `# a7 ?. P/ _3 M- X5 p4 X
NETMASK={{ netmask }}$ c9 l: a3 o) H
BROADCAST={{ broadcast }}+ x% R2 Y8 i& a# ?9 U0 S$ d
GATEWAY={{ gateway }}* x8 `9 R/ z; h0 v6 M; ^, [8 K
DNS1={{ dns }}! m) f/ ?' I% d9 U0 ?- R

) b) Q8 T* O8 K/ j' w4 j  V  [# o#if $use_ipv67 w& w2 \* _4 I0 L# O" s9 h1 Z
IPV6INIT=yes
) `3 {* p- O$ u* _" e, \$ }IPV6ADDR={{ address_v6 }}; f. e! d7 X& {6 y$ F" H
#end if
 楼主| 发表于 2021-11-23 17:03:03 | 显示全部楼层
接下来修改/etc/nova/nova.conf配置文件。由于要修改的太多我直接附上我的配置文件。并加上注释
+ E; U3 D+ |2 E# ]. u[DEFAULT]
/ @$ W9 H) P: N6 K$ Q+ n#debug=True  R" ?& a; \" m$ M* Y, v
#基本设置
' ^" ?  v3 [9 k4 y/ ylogdir = /var/log/nova7 k4 I1 I0 |& F2 z' {9 I: R! K
state_path = /var/lib/nova+ v. Q( a& ~. ^2 h
lock_path = /var/lib/nova/tmp
- T3 k5 e  b+ z, zverbose=True
& A% D- b( W, d/ llibvirt_type = kvm
+ A. d' e" h) _" T2 U4 M, P& S#volumes_dir = /etc/nova/volumes
2 i% H7 q6 }$ l, O7 l#iscsi_helper = tgtadm
6 {( T0 \; O& _( H5 f4 Y#connect to mysql " p$ B1 A' C' w; V
#设置数据库连接可以访问数据库
8 X1 e9 K4 N/ D& h& S( A: _0 xsql_connection = mysql://novaUser:novaPass@192.168.1.102:3306/nova. @3 ]! p! @( j2 k7 ~; w" B3 R6 N
#rpc_backend = nova.openstack.common.rpc.impl_qpid
5 B: Q; @, y" `8 [rootwrap_config = /etc/nova/rootwrap.conf
% e' x! m- j/ \+ T8 w' ]- u3 q0 e#my_ip=192.168.137.104
! h& M4 I$ D2 Q7 U7 q+ a#instances_path=/state/partition1/openstack/instance7 @3 A3 [% w4 Z5 ]7 r, B5 A
#Image Service4 [1 {# t5 C) B$ x
#用来管理镜像服务器
3 y0 t! y5 O3 M7 A2 g2 bglance_api_servers=192.168.1.105:9292
/ _0 A* D5 Y& R0 n. _6 C! k$ \0 Uimage_server=nova.image.glance.GlanceImageService
  Y; e" @3 X* ^- ^& ~
* d0 ?" b8 \! }) |; C#RabbitMQ: l3 a, n! o& ^2 I) p& J
#通讯节点4 M8 e& U, a4 ~- N5 l
compute_scheduler_driver=nova.scheduler.filter_scheduler.FilterScheduler- J! h" E1 C" Y1 o" g
rabbit_host=192.168.1.103
. ^& S8 y+ k( m+ F6 p7 f8 \, n! L# wrabbit_port=5672
7 N4 E! S" u! n5 }& B* @% S# Urabbit_userid=guest7 g, U- z( J$ |* h& B
rabbit_password=myrabbitmqpassword
) f+ v8 \# k( _  o8 X! eapi_paste_config=/etc/nova/api-paste.ini
) e* x- R4 ?6 ~: p4 Q5 L7 F! P#NETWORK$ a0 R* r9 ^% p1 D5 t8 C
#网络节点
9 E* ^6 B. N2 }5 rdhcpbridge = /usr/bin/nova-dhcpbridge5 m. f0 y/ Z5 |% R
dhcpbridge_flagfile = /etc/nova/nova.conf
. X0 Z6 V6 ^5 q+ A! }) a$ Z; T* |force_dhcp_release = True1 o2 I# G/ ~, v: R0 X
#libvirt_inject_partition = -1
8 m) }& y& D9 Z3 a% ^#injected_network_template = /usr/share/nova/interfaces.template4 d" J6 s4 ^" }7 d9 g+ o
#libvirt_nonblocking = True
4 _2 A9 f. S: `0 B, M; T#防火墙组件
% h3 I, Y, J2 [& Wfirewall_driver = nova.virt.libvirt.firewall.IptablesFirewallDriver
: a- a* C0 _3 x; ?! W" K2 b) V9 ?" Y#网络管理组件: e9 x6 b2 L; W
network_manager = nova.network.manager.FlatDHCPManager9 O+ T7 q5 l0 V) w6 s6 b  r7 |$ d
#网段设置
1 N8 \6 Y+ q' I  i- D3 ifixed_range=192.168.100.0/24
4 V$ Q2 S" `% C# V* _$ n& y#计算节点的网桥; T& \4 x) E/ [$ a* _1 M' F
flat_network_bridge = br100) M: p( m# o, Q# R. N6 X( v; V
public_interface=eth3
, H  L$ P7 C4 Y& Y1 y8 k' p#计算节点的内部网络接口
  v8 v6 T8 L$ K% hflat_interface=eth2
# t1 \- @3 {& |) n  w5 h#网段启始ip$ W$ M+ [/ Q* `1 p4 v
flat_network_dhcp_start=192.168.100.2& P5 e0 c0 f% ~! J1 Y+ U2 T
#* z1 P  e8 D# b! Z% I7 ?- Y- F
floating_range=60.12.206.32/277 h$ g) G' x2 D+ F
network_size = 15 L  s% o$ |2 p+ B
multi_host = true
- v! N1 L7 U6 L! }! a#enabled_apis=metadata
5 P/ N- W8 `0 h6 _6 B! D/ z0 H1 K) u6 b: T3 F6 q9 |; n% D
#VNC
! z# s& p0 V0 j0 |- x% i9 l#设置vnc服务& o! G# ?2 I+ h& D* D. l: x/ u
novnc_enabled=true
9 L6 k( P4 c5 b, r9 j4 r2 B1 }novncproxy_base_url=http://192.168.1.106:6080/vnc_auto.html
6 y0 B* v5 R6 rnovncproxy_port = 6080
, X% x5 m+ i( E; o4 d! m  [' _vncserver_proxyclient_address = 192.168.137.106! d4 ]. S  r9 R: w( ^) [7 N1 B8 X
vncserver_listen = 0.0.0.0! B* r. M! k& M4 {- b- Y- n- K- v
#AUTH" ~2 y2 V  z: c' w
auth_strategy = keystone- ]% p" @8 \0 h2 x5 o$ Z6 \6 l
#Must Have
5 `  S6 f* L- m1 e- H( S#这个我试过用来认证如果没有将没法认证Keystone服务也无法启动  K: o  x* ^, Q
[keystone_authtoken]
( L+ h" Q/ @% y- ~admin_tenant_name = serviceTenant4 h6 `, z- J- ~; q: j
admin_user = nova, X+ o. S' N' m$ D4 |5 ~- W
admin_password = Nova_Pass
- P* W! p. C0 X5 ^- q( vauth_host = 192.168.1.104
# s; x: j2 ?5 jauth_port = 35357
- d3 P0 A  A* `4 w% q* F/ uauth_protocol = http* U5 h6 Y! ~4 m2 M
signing_dir = /tmp/keystone-signing-nova0 t* G7 s  y! Z, ?& Y& i& w: U' f
+ O* y; U  G+ C8 M( C5 Z) L2 k
#Compute
+ a& p% h% E0 i* T8 Q1 ucompute_driver = libvirt.LibvirtDriver. Y, t% b& u# N; l% E
接下来进行数据库同步
; s6 g; I4 i9 Q, wnova-manage db sync, T2 f9 L7 S( Q4 |% L( S" _2 f
确保nova用户对/etc/nova /var/lib/nova有完全的权限+ c0 w6 d( X$ k# ?5 X1 f- P
chown -R nova:nova /etc/nova! Y  {. T5 ]" G5 W( |+ r- A7 |
chown -R nova:nova /var/lib/nova4 r) i4 U8 s; h) X
————————————————+ v; Y4 @8 |+ V8 h' n. b7 X3 K
版权声明:本文为CSDN博主「hengrjgc」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。3 T) F. [( p" e1 z
原文链接:https://blog.csdn.net/hengrjgc/article/details/42063623. v$ X& t6 J; K7 g8 X) e# J0 R, B& N" c
您需要登录后才可以回帖 登录 | 开始注册

本版积分规则

关闭

站长推荐上一条 /4 下一条

如有购买积分卡请联系497906712

QQ|返回首页|Archiver|手机版|小黑屋|易陆发现 点击这里给我发消息

GMT+8, 2022-1-22 14:26 , Processed in 0.054235 second(s), 24 queries .

Powered by LR.LINUX.cloud bbs168x X3.2 Licensed

© 2012-2022 Comsenz Inc.

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