Linux入门攻坚——73、运维OS Provisioning阶段工具之PXE、Cobbler

运维工具的层次:

系统安装(物理机、虚拟机) -->程序安装、配置、服务启动 -->批量操作(批量运行命令) -->程序发布 --> 监控

程序发布:不能影响用户体验;系统不能停机;不能导致系统故障或不可用;

灰度发布模型:

通过调度器将线上的一批服务器(maintanance)标记为down模式 --> 关闭相应的服务 --> 部署新版本的应用程序至目标位置 --> 启动相关应用 --> 调度主机上线;

自动化灰度发布:脚本、发布平台;

不同运维阶段的常用工具:

OS Provisioning:

PXE,Cobbler:网络安装

Cloud:image/模版

Configuration:

puppet:ruby语言开发

saltstack:python语言开发

Command and Control:

Fabric:

Ansible:

监控工具:不允许没有被监控的系统上线

监控数据采集:用户行为日志、服务器性能、运行数据报告,。。。

监控管理:异常报警、失效转移、自动优雅降级、。。。

PXE:Preboot eXcute Environment,预引导执行环境

PXE主要的基于网络的操作系统安装工具;对于一台硬件裸机,安装操作系统是其首要任务,其安装方式一般有光盘、硬盘、U盘等方式,还有一种就是基于网络的安装,PXE就是这种网络安装的一种。

因为前面已经学习过PXE,这里简要复习一下。

PXE安装首先需要的条件,是具有特定功能的网卡,这个网卡能够在加电自检后,自动从网络上获取一个IP地址,还能够执行tftp命令下载文件。当前大多数网卡已经具有此功能。

其次,网络中需要有一台dhcp服务器,用来给需要的网卡分配IP地址;

其三,需要有一台tftp服务器,用来提供文件的下载,其上要有装载引导程序文件;

一旦装载引导程序在裸机上运行了,就可以指定一个yum源,根据特定的kickstart文件,自动安装操作系统了。yum源可以是基于ftp、http等方式,提供安装树文件。

dhcp服务器能够提供的信息包括:ip,netmask,gateway,dns server,dns search domain,nis server,ntp server,filename,lease time等

硬件环境准备:

dhcp服务器主机增加一个网卡,并设为VMnet1自定义网络中;

进入虚拟网络编辑器,将VMnet1中的使用本地DHCP服务将IP地址分配给虚拟机选项去掉,即不使用vmware的DHCP服务。

在dhcp服务器中,给新增加的网卡配置地址:ifconfig ens37 192.168.217.2/24

安装dhcp、tftp相关软件包:

yum install dhcp tftp-server tftp

dhcp配置文件:/etc/hdcp/dhcpd.conf

复制代码
option domain-name "example.org";     #搜索域名dns search domain,当搜索一个主机名时,默认添加的域名,如ping www时,会自动为www后加上这里的域名
option domain-name-servers ns1.example.org, ns2.example.org; #设置主机的域名服务器

default-lease-time 600;   #缺省的租赁时长
max-lease-time 7200;   #最大租赁时间长度

#ddns-update-style none;   #定义DNS服务动态更新类型,一般不设置
#authoritative;   #在局域网中,如果有多个dhcp服务器,可以使用此项说明这个服务器为权威服务器,正常情况下,地址的分配按照谁先响应谁先分配的原则,指定此项,则用这台服务器分配的IP

log-facility local7;    #日志,记录到local7指定的日志中

subnet 10.254.239.0 netmask 255.255.255.224 {      #网段声明及掩码
  range 10.254.239.10 10.254.239.20;       #指定用于分配的IP,即分配IP地址池
  option routers rtr-239-0-1.example.org, rtr-239-0-2.example.org;  #设置客户机的默认网关
}

subnet 10.254.239.32 netmask 255.255.255.224 {
  range dynamic-bootp 10.254.239.40 10.254.239.60;
  option broadcast-address 10.254.239.31;  #设置客户机的广播地址
  option routers rtr-239-32-1.example.org;
}

host passacaglia {    #对特定主机,指定不同的启动文件,特定主机按MAC区分
  hardware ethernet 0:0:c0:5d:bd:95;
  filename "vmunix.passacaglia";      #指定启动文件
  server-name "toccata.fugue.com";    #指定启动文件所在服务器
}

host fantasia {   #对特定的主机分配特定的IP,即按照客户机的MAC,分配固定的IP
  hardware ethernet 08:00:07:26:c0:a5;   #客户机的MAC地址
  fixed-address fantasia.fugue.com;      #分配的IP
}

dhcpd监听在udp的67号端口;

测试用的配置:
option domain-name "localdomain";
default-lease-time 600;
max-lease-time 7200;
log-facility local7;
subnet 192.168.217.0 netmask 255.255.255.0 {
range 192.168.217.50 192.168.217.59;
}
host fantasia {
hardware ethernet 08:00:07:26:c0:a5;
fixed-address 192.168.217.66;
}

在另一台主机中增加网卡,并设置为VWnet1,启动后,获得地址:

查看其lease文件:/var/lib/dhcpd/dhcpd.lease保存有已分配地址的租约信息

测试固定IP分配,将 hardware ethernet 08:00:07:26:c0:a5;中MAC改为00:0c:29:ef:f0:c0

测试新的裸机启动时获取地址:

提示PXE没有发现操作系统,说明地址已获取,没有引导文件接收,没有操作系统。

为客户端准备引导文件:

需要安装TFTP服务器,准备pxelinux.0文件到/var/lib/tftpboot下
yum install tftp-server tftp
chkconfig tftp on #tftp使用xinetd超级守护进程监控运行,需要在xinetd中启动
systemctl start tftp.service #启动tftp服务器 ,监听在udp的69号端口

pxelinux.0文件为syslinux软件包提供的引导文件;

以上步骤完成后,修改dhcp配置文件:
subnet 192.168.217.0 netmask 255.255.255.0 {
range 192.168.217.50 192.168.217.59;
next-server 192.168.217.2; #告知客户端tftp服务器地址
filename "pxelinux.0" #告知客户端引导文件名称
}

配置后重启dhcpd服务,然后启动客户端:

提示缺少配置文件,还需要拷贝一些启动需要的文件到/var/lib/tftpboot下:在安装光盘上

CentOS安装光盘上:

images/pxeboot/vmlinux

images/pxeboot/initrd.img

isolinux/vesamenu.c32

isolinux/splash.jpg

isolinux/boot.msg

在/var/lib/tftpboot下创建pxelinux.cfg目录,拷贝isolinux/isolinux.cfg到此目录,命名为default

然后重新启动客户端机器:

修改一下/var/lib/tftpboot/pxelinux.cfg/default文件

再次启动:

default文件(isolinux.cfg)就是安装菜单配置文件。

以上只是引导安装程序主备完成,安装操作系统还需要准备操作系统的安装树,就是安装光盘中的各软件包,可以是光盘形式,也可以以其他形式呈现,如ftp、http等,这里以http为例,创建http服务器,将光盘内容拷贝到发布目录下:

httpd的documentroot为/www/htdocs,在其下建centos7目录,将光盘挂载到这个目录

mount -r /dev/cdrom /www/htdocs/centos7

确保浏览器能访问到:

然后修改default文件:

append initrd=initrd.img repo=http://192.168.217.2/centos7 ks=http://192.168.217.2/ks.cfg quiet

其中的repo也有写成inst.stage3的,或inst.repo的

ks.cfg中,将cdrom注释掉,正价url --url=http://192.168.217.2/centos7

然后启动客户端,就能自动安装CentOS7.9系统了。

这里有一个特别需要注意的配置,就是客户端的内存要配置至少2G,否则会出错

我因为这个原因捣鼓了很长时间。

至此,PXE安装系统就完成了,在总结一下步骤:

1)安装dhcp、tftp-server、httpd

2)配置dhcpd,重点是分配IP的地址池,filename------引导加载文件名,一般是pxelinux.0,next-server------tftp-server的地址;

3)配置tftp-server,主要是主备文件,拷贝syslinux软件包的pxelinux.0文件到其根目录(/var/lib/tftpboot)下,拷贝CentOS7.9系统安装光盘中image/pxeboot/{vmlinuz,initrd.img}到/var/lib/tftpboot,拷贝isolinux/{vesamenu.c32,boot.msg,splash.jpg}到/var/lib/tftpboot,在/var/lib/tftpboot下新建目录pxelinux.cfg,拷贝CentOS7.9系统安装光盘中isolinux/isolinux.cfg到新建的pxelinux.cfg中,并重命名为default;

4)修改default,对要使用的菜单项,修改其append行,增加repo和ks值

5)配置httpd,增加CentOS7.9安装树目录,就是将整个光盘文件拷贝到httpd的一个发布目录中,假设是CentOS79,也可以直接将光盘挂载到这个目录,这就完成了安装树的配置;这个目的url地址就是第4)步的repo值;

6)客户端配置,一是网卡,其二是内存,内存大小一定要大于等于2G

Cobble

多安装树的PXE环境,是PXE的高级封装;

通过前面的PXE的研究,其只能提供一种系统的安装,多系统或同一系统的不同版本就不能同时提供;通过kickstart文件是可以实现同一版本同一系统的不同配置安装。

PXE:yum repository,(vmlinuz+initrd.img)Distribution

单个系统安装:

特定系统:(pxeboot)vmlinuz+initrd.img,这可以叫做Distribution(Distro)

特定系统安装源:yum repository

PXE是通过Profile实现多安装树,是实现多安装树的核心

Profile:

CentOS 6 web

CentOS 6 pxeboot + CentOS 6 yum repo + kickstart_web

CentOS 6 database

CentOS 6 pxeboot + CentOS 6 yum repo + kickstart_database

CentOS 7

CentOS 7 pxeboot + CentOS 7 yum repo

Cobbler三个核心组件:

repository:可以有两种指定方式

mirror:镜像到其他源;本地不需要建安装树;只要连接到指定的镜像源;

import:将安装树导入到自己的库中;本地提供安装树,即对安装光盘的导入;cobbler都是基于http实现的。

distribution(distro):不同的系统,同一系统的不同版本,其distro都不同通用的,这也是多安装树环境实现的难点;在import导入时,会生成不同的distro;

profile:指定distro、repository及kickstart;

核心术语:

distro:发行版,如CentOS6.7,CentOS7.9,Ubuntu 14

profile:distro+kickstart()对不同发行版本或同一发行版本不同应用环境的一个安装的描述(抽象层)

subprofile

system:在profile基础上在基于特定硬件等信息基础上的有区别的一个安装版本;

repo:安装要借助yum等安装,即不同安装有不同的安装源(也叫安装树);

image:虚拟机安装,一个虚拟机模版(虚拟机安装时,不是使用安装树,直接用模版)

需要的服务:

tftp、rsync、dhcp、dns、httpd

安装使用Cobbler

在epel源中

两个组件:cobbler、cobbler-web:WEB GUI

安装前:

1)保证/var/lib/tftpboot目录为空,其中的文件cobbler会自动添加;

2)dhcp配置中,next-server和filename不需要配置,由cobbler管理;

yum install cobbler cobbler-web pykickstart debmirror httpd syslinux dhcp tftp-server

安装后:通过rpm -ql cobbler

自动在/var/lib/tftpboot下创建子目录,在/var/www下创建cobbler子目录结构;

使用cobbler:

先启动httpd服务

修改/etc/cobbler/settings配置文件,将其中的server 127.0.0.1改为 server 192.168.217.2

httpd的documentroot要为/var/www

在启动cobblerd服务,然后cobbler check

根据检查的结果,配置相关选项。

next_server改为实际tftp服务器地址:next_server:192.168.217.2

要使能并启动rsyncd.service:监听于873/tcp端口

systemctl enable rsyncd.service

systemctl start rsyncd.service

在/etc/debmirror.conf中注释掉dists和arches:

修改cobbler密码,在/etc/cobbler/settings中:

default_password_crypted: "1mF86/UHC$WvcIcX2t6crBz2onWxyac."

自己生成密码:

default_password_crypted: "1481fb1bf$rfp2Gj012tb5Echs7tl2o0"

以上修改完成后,使用cobbler sync做同步

再次检查:cobbler check

cobbler命令的语法:
cobbler <distro|profile|system|repo|image|mgmtclass|package|file> ...

add\|edit\|copy\|getks\*\|list\|remove\|rename\|report\] \[options\|--help

cobbler <aclsetup|buildiso|import|list|replicate|report|reposync|sync|validateks|version|signature|hardlink> [options|--help]

cobbler命令可以管理的且我们现在感兴趣的有distro、profile、repo、import

import导入方式建立安装树,可以建立repo

root@node0 \~\]# cobbler import --help Usage: cobbler import \[options

Options:

-h, --help # show this help message and exit
--arch=ARCH # OS architecture being imported
--breed=BREED # the breed being imported
--os-version=OS_VERSION # the version being imported
--path=PATH # local path or rsync location ,指定系统安装光盘路径
--name=NAME # name, ex 'RHEL-5' ,
--available-as=AVAILABLE_AS # tree is here, don't mirror
--kickstart=KICKSTART_FILE # assign this kickstart file
--rsync-flags=RSYNC_FLAGS # pass additional flags to rsync

cobbler import --path=/media --name=CentOS7.9-x86_64

导入完成后,会自动创建profile和distro:

导入的文件被放在/var/www/cobbler/ks_mirror/CentOS7.9-x86_64/目录下:

在/etc/httpd/conf.d/下配置cobbler.conf,会增加别名/cobbler,指向/var/www/cobbler,即可以直接访问http://IP/cobbler

同时,会在/var/lib/tftpboot下创建子目录结构和拷贝相关文件:

此时,再次启动客户端进行自动安装:

在/var/lib/tftpboot下的pxelinux.cfg子目录下的default文件中,修改一下提示信息:

通过default文件,可以看出安装使用的ks地址,这其实是一个python程序,其生成ks文件:

ks的模版及ks的位置,在/var/lib/cobbler/kickstarts目录下:

自动生成的ks文件,就是以这里的sample.ks为模版生成的。

加载的distro:

在/var/www/cobbler/ks_mirror中,config子目录下新建以import时的name参数值为名称的yum源文件:

添加一个新的profile,其命令cobbler profile add

root@node0 kickstarts\]# cobbler profile add --help Usage: cobbler \[options

Options:
--name=NAME Name (Ex: F10-i386-webserver)
--distro=DISTRO Distribution (Parent distribution)
--kickstart=KICKSTART Kickstart (Path to kickstart template)

我们新建一个ks文件,放到/var/lib/cobbler/kickstarts目录,CentOS79-g.ks

添加profile:

然后做同步:cobbler sync

同步后:

这个ks指出使用图形模式:

cobbler-web

在/etc/cobbler/modules.conf定义了认证的用户方式:

authentication

module = authn_configfile

authn_configfile -- use /etc/cobbler/users.digest (for basic setups)

使用htdigest生成用户、密码:

htdigest /etc/cobbler/users.digest "Cobbler" cobbler

出现的问题:访问被拒绝:

一直没有解决掉。好像与ssl有关,怀疑是不是openssl版本低的原因,使用的是1.0.2k。再有一个可能是证书过期的原因。cobbler_web只是cobbler命令行的图形使用界面,只不过呈现出更直观的结果。

注意:

(1)dhcp服务要定义filename; filename "pxelinux.0"

(2)/etc/cobbler/settings中:

manage_dhcp:0

manage_tftpd:0

(3)使用cobbler import可直接导入光盘中安装树,会自动生成相应的distro及profile;生成的profile会使用默认的ks文件/var/lib/cobbler/kickstarts/default.ks文件

(4)可自定义kickstart文件,而后新建profile

(5)cobbler_web 使用htdigest的认证方式:

htdigest /etc/cobbler/users.digest "提示信息" username

htdigest /etc/cobbler/users.digest "Cobbler" cobbler

(6)每次更改后,需要同步:cobbler sync

repository,distro,profile

先生成repository,建议import方式进行;

cobbler import --path --name

自动生成distro和profile

再增加一种系统:

cobbler import --path=/media --name=CentOS6.10-x86_64

cobbler sync

相应的增加了:

启动客户端PXE安装

cobbler的主要概念,除了前面的Distro、Profiles and Sub-Profiles、Repos,还有

Systems、 Images、 Management Classes、 File Resources、 Package Resources,想更深入学习,需要研究这些概念及用法。Cobbler需要的其他服务,包括TFTP、rsync、DHCP、HTTP、DNS等。

相关推荐
Lugas Luo2 小时前
SATA Port Multiplier (SATA 集线器) 原理与驱动架构深度剖析
linux·嵌入式硬件
123过去2 小时前
fcrackzip使用教程
linux·网络·测试工具·安全
东北甜妹2 小时前
MYSQL
运维
水月天涯2 小时前
Mac系统下制作 Ubuntu镜像(小白教程)
linux·ubuntu·macos
A.A呐2 小时前
【Linux第二十三章】传输层
linux·运维·服务器
Yupureki2 小时前
《Linux网络编程》1.网络基础
linux·运维·服务器·c语言·网络·c++
ii_best2 小时前
自动化开发软件[按键精灵] 安卓/iOS脚本,变量作用域细节介绍
android·运维·ios·自动化
kongba0072 小时前
复刻 Claude Code 项目御马术缰绳系统 harness engineering 落地蓝图
java·linux·服务器
mhkxbq2 小时前
济南H3C服务器升级方案怎么选?R4700G5等多型号来解答
运维·服务器