概述
在搭建 Openshift4.3 的时候使用了 https://github.com/RedHatOfficial/ocp4-helpernode 项目进行基础环境的搭建,该项目使用了 PXE 进行 rhcos 的安装,MAC地址、IP地址、主机名会进行绑定,安装好后就会有对应的主机名,我对 rhcos 的系统主机名的配置产生了好奇,想学习一下是如何实现的,接下来分享下我的分析。
基于Mac地址的主机角色绑定
- /etc/dhcp/dhcpd.conf
其中host字段 {} 中的内容就是mac地址和ip的绑定配置;filename和next-server指定了系统以DHCP启动的时候去哪里拉取什么文件,pxelinux.0是一个基于tftp下载的二进制文件,不是一个具体系统引导文件。
# cat /etc/dhcp/dhcpd.conf
authoritative;
ddns-update-style interim;
default-lease-time 14400;
max-lease-time 14400;
option routers 172.31.20.254;
option broadcast-address 172.31.20.255;
option subnet-mask 255.255.255.0;
option domain-name-servers 172.31.20.81;
option domain-name "ocp432.example.com";
subnet 172.31.20.0 netmask 255.255.255.0 {
#interface ens192;
pool {
range 172.31.20.82 172.31.20.99;
# Static entries
host bootstrap { hardware ethernet 00:50:56:b7:6a:d5; fixed-address 172.31.20.82; }
host master0 { hardware ethernet 00:50:56:b7:82:80; fixed-address 172.31.20.83; }
host master1 { hardware ethernet 00:50:56:b7:d0:43; fixed-address 172.31.20.84; }
host master2 { hardware ethernet 00:50:56:b7:58:3f; fixed-address 172.31.20.85; }
host worker0 { hardware ethernet 00:50:56:b7:91:f3; fixed-address 172.31.20.86; }
host worker1 { hardware ethernet 00:50:56:b7:6d:16; fixed-address 172.31.20.87; }
host worker2 { hardware ethernet 00:50:56:b7:60:88; fixed-address 172.31.20.88; }
#host test-hostname { hardware ethernet 00:50:56:b7:37:90; fixed-address 172.31.20.89; option host-name"apo"; }
# this will not give out addresses to hosts not listed above
deny unknown-clients;
#allow unknown-clients;
# this is PXE specific
filename "pxelinux.0";
next-server 172.31.20.81;
}
}
- 基于mac地址绑定角色
01-00-50-56-b7-58-3f这个文件名是00:50:56:b7:58:3f这个mac地址变来的,也就是master2的mac地址,以01开头,- 替换 . 形成的。
# ll /var/lib/tftpboot/pxelinux.cfg/
total 32
-r-xr-xr-x. 1 root root 420 Mar 13 00:11 01-00-50-56-b7-58-3f
-rwxrwxr-x. 1 root root 432 Mar 13 11:07 01-00-50-56-b7-60-88
-r-xr-xr-x. 1 root root 431 Mar 13 00:11 01-00-50-56-b7-6a-d5
-r-xr-xr-x. 1 root root 420 Mar 13 00:11 01-00-50-56-b7-6d-16
-r-xr-xr-x. 1 root root 420 Mar 13 00:11 01-00-50-56-b7-82-80
-r-xr-xr-x. 1 root root 420 Mar 13 00:11 01-00-50-56-b7-91-f3
-r-xr-xr-x. 1 root root 420 Mar 13 00:11 01-00-50-56-b7-d0-43
-r-xr-xr-x. 1 root root 1033 Mar 13 00:11 default
- 分析01-00-50-56-b7-58-3f文件内容:
这其实就是一个pxe系统的引导文件,定义了从哪里拉取配置文件等信息,以及角色的定义,其实就是系统启动时候菜单选项栏相关的参数通过文件配置好。openshift4安装系统的时候另外一种是通过ISO文件启动,需要在终端console输入大量参数,目前还没发现能够复制粘贴的。
# cat /var/lib/tftpboot/pxelinux.cfg/01-00-50-56-b7-58-3f
default menu.c32
prompt 1
timeout 9
ONTIMEOUT 1
menu title ######## PXE Boot Menu ########
label 1
menu label ^1) Install Master Node
menu default
kernel rhcos/kernel
append initrd=rhcos/initramfs.img nomodeset rd.neednet=1 coreos.inst=yes coreos.inst.install_dev=sda coreos.inst.image_url=http://172.31.20.81:8080/install/bios.raw.gz coreos.inst.ignition_url=http://172.31.20.81:8080/ignition/master.ign
通过DNS PTR记录给Linux系统注入主机名
这个属于Linux的特性,在Linux有IP但是没有主机名的时候会进行DNS的反向查找,如果能查询到自己IP对应的主机名则将其设置为自己的主机名;关于这个功能我是在GitHub提了issue才知道的。
# cat /var/named/reverse.db
$TTL 1W
@ IN SOA ns1.ocp432.example.com. root (
2020031502 ; serial
3H ; refresh (3 hours)
30M ; retry (30 minutes)
2W ; expiry (2 weeks)
1W ) ; minimum (1 week)
IN NS ns1.ocp432.example.com.
;
; syntax is "last octet" and the host must have fqdn with trailing dot
83 IN PTR master0.ocp432.example.com.
84 IN PTR master1.ocp432.example.com.
85 IN PTR master2.ocp432.example.com.
;
82 IN PTR bootstrap.ocp432.example.com.
;
81 IN PTR api.ocp432.example.com.
81 IN PTR api-int.ocp432.example.com.
;
86 IN PTR worker0.ocp432.example.com.
87 IN PTR worker1.ocp432.example.com.
88 IN PTR worker2.ocp432.example.com.
直接通过DHCP给Linux设置主机名
在host {} 里面添加 option host-name"apo"指定主机名,filename和next-server可以不用动。
# cat /etc/dhcp/dhcpd.conf
---------------------------------------------------------------------------
host test-hostname { hardware ethernet 00:50:56:b7:37:90; fixed-address 172.31.20.89; option host-name"apo"; }
# this will not give out addresses to hosts not listed above
deny unknown-clients;
#allow unknown-clients;
# this is PXE specific
filename "pxelinux.0";
next-server 172.31.20.81;
}
}
网友评论