欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  科技

Cobbler实现自动化安装(上)--原理篇

程序员文章站 2023-08-31 21:47:07
了解Cobbler之前,我们需要先对PXE及KickStart有一定的认识。 PXE PXE(Pre-bootExecution Environment),预启动执行环境,通过网络接口启动计算机,支持Client通过网络从Server下载映像,并由此通过网络启动操作系统;在启动过程中,Client要 ......

  了解cobbler之前,我们需要先对pxe及kickstart有一定的认识。

pxe

  pxe(pre-bootexecution environment),预启动执行环境,通过网络接口启动计算机,支持client通过网络从server下载映像,并由此通过网络启动操作系统;在启动过程中,client要求server分配ip地址,再用tftp下载一个启动软件包到本机内存中执行,由这个启动软件包完成client基本的软件设置并安装操作系统。
  要达成pxe有两个必须的条件:
  (1)client的网卡必须要支持pxe功能,并且开机时选择从网卡启动;
  (2)完整的pxe server必须要提供含有dhcp、tftp服务,还要加上nfs/ftp/http(选择一样即可)等提供安装文件(安装镜像的解压文件)。

kickstart

   kickstart 是一种无人值守的安装方式,它的工作原理是在安装过程中记录人工干预填写的各种参数,并生成一个名为ks.cfg的文件。我们可以简单理解为一个自动安装应答配置管理程序。通过读取这个配置文件,系统知道怎么去分区,要安装什么包,配什么ip,优化什么内核参数等等。其主要组成部分包括:

  • kickstart安装选项,包含语言的选择,防火墙,密码,网络,分区的设置等;
  • %pre部分,安装前解析的脚本,通常用来生成特殊的ks配置,比如由一段程序决定磁盘分区等;
  • %package部分,安装包的选择,可以是@core这样的group形式,也可以是vim-*这样的包形式;
  • %post部分,安装后执行的脚本,通常用来做系统的初始化设置,比如启动的服务,相关的设定等。

pxe+kickstart的工作流程

              Cobbler实现自动化安装(上)--原理篇

  • 1. pxe client向dhcp server发送请求:支持pxe的网络接口卡(nic)的client的bios设置成为网络启动,通过udp(简单用户数据报协议)发送一个广播请求,向网络中的dhcp server索取ip地址等信息。
  • 2. dhcp server提供信息:dhcp server收到client的请求,验证是否来至合法的pxe client的请求,验证通过它将给client返回响应,响应内容包含了为client分配的ip address、tftp server以及配置文件所在位置。
  • 3. pxe client请求下载启动文件:client收到dhcp server的响应后,会回应一个帧,以请求传送启动所需文件,这些启动文件包括:pxelinux.0(相当于boot loader)、pxelinux.cfg/default、vmlinuz、initrd.img等文件。
  • 4. tftp server响应client请求并传送文件:client会根据该文件中定义的引导顺序,启动linux安装程序的引导内核。
  • 5. 请求下载自动应答文件:client通过pxelinux.cfg/default文件成功的引导linux安装内核后,安装程序首先必须确定你通过什么安装介质来安装linux,如果是通过网络安装(nfs, ftp, http),则会在这个时候初始化网络,并定位安装源位置。(或许你会说,刚才pxe不是已经获取过ip地址了吗?为什么现在还需要一次?这是由于pxe获取的是安装用的内核以及安装程序等,而安装程序要获取的是安装系统所需的二进制包以及配置文件。由于它们需要的内容不同造成pxe模块和安装程序是相对独立的,pxe的网络配置并不能传递给安装程序。从而进行两次获取ip地址过程。)接着读取该文件中指定的自动应答文件ks.cfg所在位置,根据该位置请求下载该文件。
  • 6. client安装操作系统:将ks.cfg文件下载回来后,通过该文件找到os server,并按照该文件的配置请求下载安装过程需要的软件包。

cobbler

概述

  cobbler由python语言开发,是对pxe和kickstart的封装,融合很多特性,提供了cli和web的管理形式,能更加方便地实行网络安装;cobbler也提供了api接口,因此使用其它语言也很容易做扩展。cobbler不仅可以安装物理机,同时也支持kvm、xen虚拟化、guest os的安装;更多的是它还能结合puppet等集中化管理软件,实现自动化的管理。

组成

            Cobbler实现自动化安装(上)--原理篇

  cobbler的结构基于一组注册的对象,每个对象都是相互关联的实体(该实体指向另一个实体,或者另一个实体指向该实体)。当一个对象指向另一个对象时,它就继承了被指向对象的数据,并可覆盖或添加更多特定信息。对象类型的定义为:

  • 发行版(distribution):表示一个操作系统,它承载了kernel和initrd的信息,以及内核参数等其它数据;
  • 配置文件(profile):包含一个发行版、一个kickstart文件以及可能的存储库,还包含更多特定的内核参数等其它数据;
  • 系统(system):包含一个配置文件或一个镜像,还包含ip address和mac address、电源管理(地址、凭据、类型)以及更为专业的数据等信息;
  • 存储库(repository):保存一个yum或rsync存储库的镜像信息;
  • 镜像(image):可替换一个包含不属于此类别的文件的发行版对象。

  基于注册的对象以及各个对象之间的关联,cobbler 知道如何更改文件系统以反映具体配置,因为系统配置的内部是抽象的,因此我们可以只关注想要执行的操作。

工作原理

              Cobbler实现自动化安装(上)--原理篇

    server端:

  • 启动cobbler服务
  • 进行cobbler错误检查,执行cobbler check命令
  • 进行配置同步,执行cobbler sync命令
  • 复制相关启动文件文件到tftp目录中
  • 启动dhcp服务,提供地址分配
  • dhcp服务分配ip地址
  • tftp传输启动文件
  • server端接收安装信息
  • server端发送iso镜像与kickstart文件

    client端:

  • 客户端以pxe模式启动
  • 客户端获取ip地址
  • 通过tftp服务器获取启动文件
  • 进入cobbler安装选择界面
  • 客户端确定加载信息
  • 根据配置信息准备安装系统
  • 加载kickstart文件
  • 传输系统安装的其它文件
  • 进行安装系统

 小结

  • cobbler可以看作是一个更多功能的pxe,它实现系统安装和pxe+kickstart也差不多,需要的文件和过程大致都一样;
  • cobbler能自动管理dns/tftp/dhcp/rsync这四个服务(但似乎对tftp的管理有点bug,需要手动启动tftp),且cobbler依赖于httpd(pxe支持http/nfs/ftp);
  • 基本的系统安装,cobbler只需生成一个distro和一个profile即可:distro相当于一个镜像,它提供安装系统过程中所需的一切文件,如vmlinuz,initrd以及rpm包等;profile的作用是为了自动修改pxelinux.cfg/default文件,每生成或修改一次profile,都会在default文件中修改或追加对应的label;
  • 除了distro/profile之外,cobbler还管理system/images/repository等,但是用的很少。