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等。

相关推荐
九皇叔叔4 小时前
Ubuntu 22.04 版本常用设置
linux·运维·ubuntu
南境十里·墨染春水4 小时前
linux学习进展 线程同步——互斥锁
java·linux·学习
杨云龙UP6 小时前
ODA登录ODA Web管理界面时提示Password Expired的处理方法_20260423
linux·运维·服务器·数据库·oracle
songx_996 小时前
Linux基础2
linux·运维·服务器
我想要SSR6 小时前
搭建小龙虾过程和坑点
linux·服务器·ai
陈皮糖..7 小时前
27 届运维实习笔记|第三、四周:从流程熟练到故障排查,企业运维实战深化
运维·笔记·sql·nginx·ci/cd·云计算·jenkins
莫白媛8 小时前
Linux在限制敏感命令下的修改用户密码小白版
linux·运维·服务器
hhb_6189 小时前
C Shell 基础语法与高阶运维实战指南
运维·c语言·chrome
Rcnhtin9 小时前
RocketMQ
java·linux·rocketmq
AC赳赳老秦9 小时前
OpenClaw多平台部署:Windows+Linux跨系统协同,实现全场景覆盖
linux·服务器·前端·网络·windows·deepseek·openclaw