Katello:创建域,子网,安装介质,操作系统,配置模板,主机组,PXE引导

时间:2020-03-21 11:45:54  来源:igfitidea点击:

使用Katello的第3部分。
我们将继续进行Katello的配置,我们将创建一个域,FTP安装介质,调整一些配置模板,部署KVM guest虚拟机。

本文是KVM,Katelo和Puppet系列测试环境项目的一部分。

测试环境

我们在CentOS 7服务器上安装了Katello:

katello.igi.local(10.11.1.4)

配置Katello

步骤1:建立网域

如果我们在安装Katello的过程中提供了域名,则可能已经设置了甜菜域名。

# hammer domain create --name "igi.local"

如果我们收到一个错误消息,说“名称已被使用”,则可能是由于未将Katello服务器分配给组织。

如果是这种情况,那么在将Katello服务器分配给组织后,我们将能够看到域名。

# hammer domain list
---|--------
ID | NAME

---|--------
1  | igi.local
---|--------

步骤2:创建一个子网

为了创建一个子网,我们需要知道我们的TFTP ID。

TFTP ID实际上是我们的代理ID。

# hammer proxy list
---|------------------|-------------------------------|-------------------------
ID | NAME

| URL

| FEATURES

---|------------------|-------------------------------|-------------------------
1  | katello.igi.local | https://katello.igi.local:9090 | Templates, Pulp, TFTP,...
---|------------------|-------------------------------|-------------------------

创建一个新的子网:

# hammer subnet create \
  --organizations "theitroad" \
  --locations "HomeLab" \
  --name "homelab_LAN" \
  --network "10.11.1.0" \
  --mask "255.255.255.0" \
  --network-type "IPv4" \
  --gateway "10.11.1.1" \
  --dns-primary "10.11.1.2" \
  --dns-secondary "10.11.1.3" \
  --boot-mode "DHCP" \
  --ipam "None" \
  --domain-ids "1" \
  --tftp-id "1"

请注意我们先前创建的冗余DNS服务器的IP。
检查确认:

# hammer subnet list
---|-------------|-----------|---------------|-------
ID | NAME

| NETWORK   | MASK

| VLAN ID
---|-------------|-----------|---------------|-------
1  | homelab_LAN | 10.11.1.0 | 255.255.255.0 |

---|-------------|-----------|---------------|-------

步骤3:FTP安装媒体

我们将安装并配置vsftpd,以通过FTP提供CentOS安装介质。

# yum install vsftpd
# systemctl enable vsftpd

配置防火墙(如果尚未配置):

# firewall-cmd --permanent --add-service=ftp
# firewall-cmd --reload

编辑文件“ /etc/vsftpd/vsftpd.conf”并配置以下内容:

anonymous_enable=YES
write_enable=NO

重新启动服务:

# systemctl restart vsftpd

请注意,FTP卷“/var/ftp/pub /”应至少具有6GB的可用磁盘空间。
如果没有CentOS 7 DVD,则可以从Internet下载。
确保它是完整的DVD,而不是最小的DVD。

完成后,将ISO文件添加到KVM guest虚拟机并安装磁盘:

# mount /dev/cdrom /mnt

创建一个文件夹来存储安装文件,并同步磁盘上的所有内容:

# mkdir /var/ftp/pub/CentOS_7_x86_64
# rsync -rv --progress /mnt//var/ftp/pub/CentOS_7_x86_64/

完成后卸载磁盘:

# umount /mnt

还原SELinux标签:

# restorecon -Rv /var/ftp/pub/

最后一件事,我们可以使用“ ro,nodev,noexec,nosuid”挂载“/var/ftp/pub”,因为我们只需要读取文件即可。
创建CentOS 7安装介质:

# hammer medium create \
  --organizations "theitroad" \
  --locations "HomeLab" \
  --name CentOS7_DVD_FTP \
  --path "ftp://katello.igi.local/pub/CentOS_7_x86_64/" \
  --os-family "Redhat"

检查确认:

# hammer medium list
---|-----------------|-------------------------------------------
ID | NAME

| PATH

---|-----------------|-------------------------------------------
9  | CentOS7_DVD_FTP | ftp://katello.igi.local/pub/CentOS_7_x86_64/
---|-----------------|-------------------------------------------

步骤4:创建硬化分区表

Katello带有几个不同的分区表,可以直接使用。
以下是一些默认值:

# hammer partition-table list|grep default
83  | CoreOS default fake

| Coreos   
85  | Jumpstart default

| Solaris  
87  | Junos default fake

| Junos

88  | Kickstart default

| Redhat   
89  | NX-OS default fake

| NXOS

90  | Preseed default

| Debian   
92  | XenServer default

| Xenserver

如上所示,Red Hat的默认名称为“ Kickstart default”。

我们将创建一个硬化的分区表,以便我们可以控制要创建的分区和安装点。

使用以下内容创建文件“ hardened_ptable.txt”。
请注意,'<'和'%#'之间没有空格。

<%#
kind: ptable
name: Kickstart hardened 32GB
oses:
- CentOS
- Fedora
- RedHat
%>
# System bootloader configuration
bootloader --location=mbr --boot-drive=sda --timeout=3
# Partition clearing information
clearpart --all --drives=sda
zerombr 
# Disk partitioning information
part /boot --fstype="xfs" --ondisk=sda --size=1024 --label=boot --fsoptions="rw,nodev,noexec,nosuid"
# 30GB physical volume
part pv.01  --fstype="lvmpv" --ondisk=sda --size=30720
volgroup vg_os pv.01
logvol/

--fstype="xfs"  --size=4096 --vgname=vg_os --name=lv_root
logvol /home    --fstype="xfs"  --size=512  --vgname=vg_os --name=lv_home --fsoptions="rw,nodev,nosuid"
logvol /tmp     --fstype="xfs"  --size=1024 --vgname=vg_os --name=lv_tmp  --fsoptions="rw,nodev,noexec,nosuid"
logvol /var     --fstype="xfs"  --size=6144 --vgname=vg_os --name=lv_var  --fsoptions="rw,nosuid"
logvol /var/log --fstype="xfs"  --size=512  --vgname=vg_os --name=lv_log  --fsoptions="rw,nodev,noexec,nosuid"
logvol swap     --fstype="swap" --size=2048 --vgname=vg_os --name=lv_swap --fsoptions="swap"

创建一个新的分区表:

# hammer partition-table create \
  --organizations "theitroad" \
  --locations "HomeLab" \
  --name "Kickstart hardened 32GB" \
  --os-family "Redhat" \
  --operatingsystems "CentOS 7.4.1708" \
  --file "hardened_ptable.txt"

检查确认:

# hammer partition-table list|egrep 'ID|hardened'
ID  | NAME

| OS FAMILY
103 | Kickstart hardened 32GB

| Redhat

步骤5:创建操作系统

在我们的特定情况下,不需要此步骤,因为Katello服务器已部署在CentOS 7上,并且已经为该操作系统创建了操作系统。
由于我们的测试环境仅是CentOS 7,因此无需创建新的OS。

作为参考,如果我们要创建一个新的CentOS 7操作系统,我们将执行以下操作:

# hammer os create \
  --name "CentOS" \
  --major "7" \
  --minor "4.1708" \
  --family "Redhat" \
  --password-hash "SHA512" \
  --architectures "x86_64" \
  --media "CentOS7_DVD_FTP" \
  --partition-tables "Kickstart hardened 32GB"

请注意对FTP安装介质和加固分区表的引用。

步骤6:布建范本和布袋4

工头包括许多模板示例。
要获得总体思路,请执行以下操作:

# hammer template list | less

除了标准的Foreman模板外,Katello还附带了许多模板,例如:

Katello Kickstart CentOS,RHEL和其他与Red Hat兼容的操作系统的默认Kickstart模板。

Katello Kickstart默认完成基于镜像的置备。

subscription_manager_registration用于注册内容主机的代码段。

要自定义上述任何模板,我们可以克隆它们并添加更改。

虽然这听起来不错,但我不得不承认默认设置模板对我而言并不合适,因为我一直遇到Puppet安装问题,这主要是由于Puppet 3.x和4.x版本之间的文件系统路径不同。
我必须使用以下命令才能成功安装Puppet 4:

os_family = @host.operatingsystem.family
  if os_family == 'Redhat'

var_dir = '/opt/puppetlabs/puppet/cache'

log_dir = '/var/log/puppetlabs/puppet'

run_dir = '/var/run/puppetlabs'

ssl_dir = '/etc/puppetlabs/puppet/ssl'
  end

我最终克隆了一些模板(请参见下文),手动编辑它们以适应我的需要,然后创建新模板。

  • Katello Kickstart默认(设置模板)
  • Katello Kickstart默认完成(完成模板)
  • puppet.conf(代码段)
  • puppet_setup(摘要)
  • subscription_manager_registration(摘要)

我实现这一目标的方法非常简单。
首先,我必须将模板转储到文件中:

# hammer template dump \
  --id "Katello Kickstart Default" > template1.txt

然后编辑文件“ template1.txt”,添加更改并检查错误:

# erb -x -T '-' template1.txt|ruby -c

最后,从文件创建一个新模板:

# hammer template create \
  --organizations "theitroad" \
  --locations "HomeLab" \
  --file "template1.txt" \
  --name "Katello Kickstart Puppet4 Default" \
  --type "provision" \
  --operatingsystems "CentOS 7.4.1708"

为避免混淆,我们始终可以从下面的列表中验证我们需要使用的模板类型:

# hammer template kinds
--------
NAME

--------
PXELinux 
PXEGrub  
PXEGrub2 
iPXE

provision
finish   
script   
user_data
ZTP

POAP

snippet  
--------

当我们配置新的CentOS 7服务器时,它会从“ os”存储库中获取安装的subscription-manager软件包,然后系统在Katello中注册,这使我们能够使用产品和存储库,以及管理服务器可用的软件包。
通过生命周期环境。

需要注意的是,默认情况下,公共CentOS存储库在服务器上保持启用状态。
我们理想上要做的是在系统注册后删除所有公共的CentOS存储库,因为在那一点上,系统所订阅的存储库将已经可用。
为此,我们需要修改subscription_manager_registration的代码段,并创建一个自定义代码段,以删除公共CentOS存储库,例如:

echo "Registering the System"
subscription-manager register --org="<%= @host.rhsm_organization_label %>" --name="<%= @host.name %>" --activationkey="<%= @host.params['kt_activation_keys'] %>"
echo "Removing public CentOS repositories"
rm -rvf /etc/yum.repos.d/CentOS-*

步骤7:创建主机组

主机组在某种程度上类似于继承的节点声明,因为它是可以命名并视为一个单元的高层类的分组。

然后将其视为模板,可以在创建新主机期间选择它,并确保将主机配置为预定义状态之一。

除了定义在构建此主机类型时包括哪些Puppet类之外,我们还能够为主机组分配变量和配置信息,以进一步优化Puppet运行时的行为。

现在,我们不需要Puppet环境即可创建主机组,但是实际上,拥有一个主机组是有益的,因为我们打算使用Puppet来管理服务器。
默认的Puppet环境称为“生产”:

# hammer environment list
---|----------
ID | NAME

---|----------
1  | production
---|----------

让我们创建一个称为“ homelab”的新环境(我发现名称“ homelab”比“ production”更合适):

# hammer environment create \
 --name "homelab" \
 --organizations "theitroad" \
 --locations "HomeLab"

检查确认:

# hammer environment list
---|----------
ID | NAME

---|----------
2  | homelab   
1  | production
---|----------

创建主机组时,我们将使用homelab环境。
在配置Puppet模块时,我们还需要创建一个Puppet文件夹结构,但这将在下一篇文章中介绍。

我们需要内容源ID,该ID与我们的代理ID相同:

# hammer proxy list
---|------------------|-------------------------------|-------------------------
ID | NAME

| URL

| FEATURES

---|------------------|-------------------------------|-------------------------
1  | katello.igi.local | https://katello.igi.local:9090 | Templates, Pulp, TFTP,...
---|------------------|-------------------------------|-------------------------

为CentOS 7创建一个新的主机组。

# hammer hostgroup create \
  --query-organization "theitroad" \
  --locations "HomeLab" \
  --name "el7_group" \
  --description "Host group for CentOS 7 servers" \
  --lifecycle-environment "stable" \
  --content-view "el7_content" \
  --content-source-id "1" \
  --environment "homelab" \
  --puppet-proxy "katello.igi.local" \
  --puppet-ca-proxy "katello.igi.local" \
  --domain "igi.local" \
  --subnet "homelab_LAN" \
  --architecture "x86_64" \
  --operatingsystem "CentOS 4.1708" \
  --medium "CentOS7_DVD_FTP" \
  --partition-table "Kickstart hardened 32GB" \
  --pxe-loader "PXELinux BIOS" \
  --root-pass "PleaseChangeMe"

还记得我们在上一篇文章中创建的激活密钥吗?
现在是时候将该激活密钥与主机组关联了:

# hammer hostgroup set-parameter  \
  --name "kt_activation_keys" \
  --value "el7-key" \
  --hostgroup "el7_group"

步骤8:创建一个新主机

我们想为我们所有的homelab服务器创建主机。

| VM ID | guest_name | ip_addr | mac_addr |
|--- | --- | - - | --- |
| 203 | ldap1.igi.local | 10.11.1.11 | 00:22:FF:00:00:11 |
| 204 | ldap2.igi.local | 10.11.1.12 | 00:22:FF:00:00:12 |
| 205 | monitoring.igi.local | 10.11.1.13 | 00:22:FF:00:00:13 |
| 206 | syslog.igi.local | 10.11.1.14 | 00:22:FF:00:00:14 |
| 207 | storage1.igi.local | 10.11.1.15 | 00:22:FF:00:00:15 |
| 208 | storage2.igi.local | 10.11.1.16 | 00:22:FF:00:00:16 |
| 209 | db1.igi.local | 10.11.1.17 | 00:22:22:FF:00:00:17 |
| 210 | db2.igi.local | 10.11.1.18 | 00:22:FF:00:00:18 |
| 211 | proxy1.igi.local | 10.11.1.19 | 00:22:FF:00:00:19 |
| 212 | proxy2.igi.local | 10.11.1.20 | 00:22:22:FF:00:00:20 |
| 213 | web1.igi.local | 10.11.1.21 | 00:22:FF:00:00:21 |
| 214 | web2.igi.local | 10.11.1.22 | 00:22:FF:00:00:22 |
| 215 | backup.igi.local | 10.11.1.23 | 00:22:FF:00:00:23 |

如果通过以下命令循环上述详细信息,则最终将获得所需的所有服务器。
VM ID仅由Proxmox使用,而Katello不需要。

# hammer host create \
  --name "$GUEST_NAME" \
  --hostgroup "el7_group" \
  --interface "type=interface,mac=$MAC_ADDR,ip=$IP_ADDR,managed=true,primary=true,provision=true"

我们可以转到以下页面来查看配置模板的内容:

https://katello.igi.local/unattended/provision?spoof=10.11.1.11

现在,我们应该有以下主机可用:

# hammer host list
---|---------------------|------------------|------------|------------|-------------------|--------------|---------------------
ID | NAME

| OPERATING SYSTEM | HOST GROUP | IP

| MAC

| CONTENT VIEW | LIFECYCLE ENVIRONMENT
---|---------------------|------------------|------------|------------|-------------------|--------------|---------------------
41 | admin1.igi.local     | CentOS 7.4.1708  | el7_group  | 10.11.1.2  | 00:22:ff:00:00:02 | el7_content  | stable

42 | admin2.igi.local     | CentOS 7.4.1708  | el7_group  | 10.11.1.3  | 00:22:ff:00:00:03 | el7_content  | stable

38 | backup.igi.local     | CentOS 7.4.1708  | el7_group  | 10.11.1.23 | 00:22:ff:00:00:23 | el7_content  | stable

26 | db1.igi.local

| CentOS 7.4.1708  | el7_group  | 10.11.1.17 | 00:22:ff:00:00:17 | el7_content  | stable

27 | db2.igi.local

| CentOS 7.4.1708  | el7_group  | 10.11.1.18 | 00:22:ff:00:00:18 | el7_content  | stable

2  | katello.igi.local    | CentOS 7.4.1708  |

| 10.11.1.4  | 00:22:ff:00:00:04 |

|

32 | ldap1.igi.local

| CentOS 7.4.1708  | el7_group  | 10.11.1.11 | 00:22:ff:00:00:11 | el7_content  | stable

33 | ldap2.igi.local

| CentOS 7.4.1708  | el7_group  | 10.11.1.12 | 00:22:ff:00:00:12 | el7_content  | stable

34 | monitoring.igi.local | CentOS 7.4.1708  | el7_group  | 10.11.1.13 | 00:22:ff:00:00:13 | el7_content  | stable

28 | proxy1.igi.local     | CentOS 7.4.1708  | el7_group  | 10.11.1.19 | 00:22:ff:00:00:19 | el7_content  | stable

29 | proxy2.igi.local     | CentOS 7.4.1708  | el7_group  | 10.11.1.20 | 00:22:ff:00:00:20 | el7_content  | stable

39 | storage1.igi.local   | CentOS 7.4.1708  | el7_group  | 10.11.1.15 | 00:22:ff:00:00:15 | el7_content  | stable

40 | storage2.igi.local   | CentOS 7.4.1708  | el7_group  | 10.11.1.16 | 00:22:ff:00:00:16 | el7_content  | stable

35 | syslog.igi.local     | CentOS 7.4.1708  | el7_group  | 10.11.1.14 | 00:22:ff:00:00:14 | el7_content  | stable

30 | web1.igi.local

| CentOS 7.4.1708  | el7_group  | 10.11.1.21 | 00:22:ff:00:00:21 | el7_content  | stable

31 | web2.igi.local

| CentOS 7.4.1708  | el7_group  | 10.11.1.22 | 00:22:ff:00:00:22 | el7_content  | stable

---|---------------------|------------------|------------|------------|-------------------|--------------|---------------------

步骤9:在Proxmox上创建KVM guest虚拟机

在PXE引导VM之前,我们首先需要创建它们。

同样,如果考虑到上面列出的VM详细信息,并通过以下qm命令将其循环,则最终将获得所需的所有服务器。

# qm create $ID \
  --name $GUEST_NAME \
  --boot cn \
  --cores 1 \
  --hotplug disk,cpu \
  --memory 1536 \
  --net0 bridge=vmbr0,model=virtio,macaddr=$MAC_ADDR \
  --onboot 1 \
  --ostype l26 \
  --scsi0 file=data_hdd:32,format=qcow2 \
  --scsihw virtio-scsi-pci \
  --sockets 1 \
  --startup order=$ID

值得一提的是,当我们为PXE引导创建新的VM时,请确保它至少具有1536MB的内存,否则它可能无法成功调配。
配置虚拟机后,可以减少内存的数量。

还要注意我们使用的磁盘大小,它设置为32GB以匹配强化分区表模板。

步骤10:PXE引导VM

启动虚拟机,观看它们的PXE引导并由Katello进行配置。

要启动ID为203的VM,只需执行以下操作:

# qm start 203

最终结果应该是这样的:

# qm list

VMID NAME

STATUS     MEM(MB)    BOOTDISK(GB) PID

200 admin1.igi.local

running    512

10.00 2439

201 admin2.igi.local

running    512

10.00 2491

202 katello.igi.local     running    10240

10.00 2551

203 ldap1.igi.local

running    768

32.00 2598

204 ldap2.igi.local

running    768

32.00 2654

205 monitoring.igi.local  running    1024

32.00 29490

206 syslog.igi.local

running    2048

32.00 2758

207 storage1.igi.local    running    768

32.00 2637

208 storage2.igi.local    running    768

32.00 8626

209 db1.igi.local

running    1024

32.00 2952

210 db2.igi.local

running    1024

32.00 3007

211 proxy1.igi.local

running    768

32.00 3067

212 proxy2.igi.local

running    768

32.00 1129

213 web1.igi.local

running    768

32.00 3168

214 web2.igi.local

running    768

32.00 1491

215 backup.igi.local

running    768

32.00 1263

如前所述,可以在配置VM后更改内存的数量。

步骤11:自动签署Puppet签名请求

所有服务器的Puppet签名请求将列在以下位置:

'基础结构>智能代理> Puppet CA>证书'

我无法找到Hammer CLI远程签名证书的方法,而且似乎也没有使用CLI创建自动签名条目的方法。

对于Puppet,解决方法是在智能代理配置中为域名添加一条记录作为自动签名条目:

尝试删除PuppetCA自动签名条目时,我确实遇到了一个奇怪的错误:

Delete PuppetCA autosign entry for pxe-test.igi.local task failed with the following error: 
ERF12-4681 [ProxyAPI::ProxyException]: Unable to delete PuppetCA autosign for pxe-test.igi.local
No such file or directory - /etc/puppet/autosign.conf

代理通常通过知道加载的Puppet版本来自动确定自动签名文件的位置,日志中的路径是Puppet 3.x位置,而我们的文件位于Puppet 4.x位置。
由于我们使用的是Puppet 4.x,真正的问题是为什么代理错误?

我在这里的Foreman社区论坛上找到了一种解决方法。

请执行下列操作:

# mkdir /etc/puppet
# ln -sf /etc/puppetlabs/puppet/autosign.conf /etc/puppet/autosign.conf
# restorecon -Rv /etc/puppet/

这样可以解决问题。

步骤12:备份Katello配置

值得为Katello配置创建备份,以避免丢失到目前为止所做的更改:

# katello-backup /mnt/backup/--features=all -y

步骤13:备份Proxmox来宾

我们可以使用以下命令来备份虚拟机管理程序上的所有来宾系统:

[pve]# vzdump -all \
  -dumpdir "/mnt/backup/" \
  -tmpdir "/mnt/backup/" \
  -mode snapshot \
  -compress 0 \
  -remove 0 \
  -mailnotification always \
  -mailto "Hyman@theitroad"

我们将结果文件存储到'/mnt/backup /',并在完成后向root用户发送电子邮件。