Kickstart(RedHat)、Preseed(Debian)、cloud-init(云) 进行自动化部署

来自linux中国网wiki
跳到导航 跳到搜索

CentOS Kickstart自动化安装

服务器端 安装源服务器 安装HTTP、DHCP和TFTP服务

client 要每台去开机的 不完全自动化可见 这个就是我们要安装os的机器

ps Cobbler是较早前的kickstart的升级版,优点是比较容易配置,还自带web界面比较易于管理

以下是一个使用Kickstart在Red Hat、CentOS或Fedora上进行自动化部署的例子:

### 环境准备
1. **安装服务器**:准备一台服务器作为安装源服务器,安装好Red Hat/CentOS/Fedora系统。
2. **关闭防火墙**:为了简化操作,暂时关闭防火墙:
   ```bash
   systemctl disable firewalld
   systemctl mask firewalld
   ```
3. **安装必要的服务**:安装HTTP、DHCP和TFTP服务:
   ```bash
   yum install -y httpd dhcp tftp-server syslinux
   ```

### 配置HTTP服务
1. **创建安装源目录**:在HTTP服务的根目录下创建一个目录来存放安装源:
   ```bash
   mkdir -p /var/www/html/os
   ```
2. **挂载ISO镜像**:将Red Hat/CentOS/Fedora的安装ISO镜像挂载到创建的目录:
   ```bash
   mount -o loop /path/to/iso /var/www/html/os
   ```
3. **启动HTTP服务**:确保HTTP服务已启动:
   ```bash
   systemctl start httpd
   systemctl enable httpd
   ```

### 创建Kickstart文件
1. **编写Kickstart文件**:创建一个名为`ks.cfg`的Kickstart文件,内容如下:
   ```bash
   # Kickstart file for automated installation
   #version=DEVEL
   install
   url --url="http://<your-server-ip>/os"
   lang en_US.UTF-8
   keyboard us
   network --bootproto=dhcp
   rootpw --iscrypted $1$V4WuX$5GZKZ8s6l5l6z7u5z3s2
   firewall --disabled
   selinux --disabled
   timezone Asia/Shanghai
   bootloader --location=mbr
   zerombr
   clearpart --all --initlabel
   part /boot --fstype="ext4" --size=200
   part / --fstype="xfs" --size=1
   %packages
   @base
   @development-tools
   %end
   ```
   将`<your-server-ip>`替换为你的安装源服务器的IP地址。

2. **将Kickstart文件放置到HTTP根目录**:
   ```bash
   cp ks.cfg /var/www/html/
   ```

### 配置DHCP和TFTP服务
1. **配置DHCP服务**:编辑DHCP配置文件`/etc/dhcp/dhcpd.conf`,添加以下内容:
   ```bash
   subnet <your-subnet> netmask <your-netmask> {
     range <your-ip-range>;
     option routers <your-gateway>;
     option domain-name-servers <your-dns>;
     filename "pxelinux.0";
     next-server <your-server-ip>;
   }
   ```
   将`<your-subnet>`、`<your-netmask>`等替换为你的网络信息。

2. **配置TFTP服务**:确保TFTP服务已启动,并将PXE引导文件复制到TFTP根目录:
   ```bash
   systemctl start tftp-server
   systemctl enable tftp-server
   cp /var/www/html/os/isolinux/* /var/lib/tftpboot/
   ```

### 配置PXE引导
1. **编辑PXE引导配置文件**:在TFTP根目录下创建`pxelinux.cfg`目录,并在其中创建`default`文件:
   ```bash
   mkdir -p /var/lib/tftpboot/pxelinux.cfg
   vi /var/lib/tftpboot/pxelinux.cfg/default
   ```
   添加以下内容:
   ```bash
   default menu.c32
   prompt 0
   menu title PXE Boot Menu
   timeout 300

   label linux
     menu label ^Install CentOS
     menu default
     kernel vmlinuz
     append initrd=initrd.img ks=http://<your-server-ip>/ks.cfg
   ```

### 测试部署
1. **启动目标主机**:将需要安装系统的主机设置为从网络启动(PXE启动)。
2. **开始安装**:目标主机将从网络获取IP地址,并从TFTP服务器下载PXE引导文件,然后按照Kickstart文件的配置自动进行系统安装。

通过以上步骤,就可以使用Kickstart在Red Hat、CentOS或Fedora上实现自动化部署。


==

cloud-init(云) 进行自动化部署

虽然现在用了cloud 我们装机的机会少了,但是自己的内网机器 我们还是可以用 cloud -init cloud-init 映像

例如

   https://cloud.centos.org/
   https://cloud-images.ubuntu.com/

结合 terraform 方便得很 可见 Terraform-provider-proxmox eg

#执行下面的命令创建一个虚拟机
#这里 9000 只是一个ID 你只要写个你的 proxmox还没用的ID就行了
qm create 9000 --name "ubuntu-2004-cloudinit-template" --memory 1024 --cores 1 --net0 virtio,bridge=vmbr0
qm importdisk 9000 ubuntu-20.04-server-cloudimg-amd64.img local-lvm
qm set 9000 --scsihw virtio-scsi-pci --scsi0 local-lvm:vm-9000-disk-0
qm set 9000 --boot c --bootdisk scsi0
qm set 9000 --ide2 local-lvm:cloudinit
qm set 9000 --serial0 socket --vga serial0
qm set 9000 --agent enabled=1

#将刚创建好的虚拟机转换成模板
qm template 9000

https://cloudinit.readthedocs.io/en/latest/reference/examples.html

如何在 Azure 中的 Linux 虚拟机首次启动时使用 cloud-init 对其进行自定义

https://help.aliyun.com/zh/ecs/user-guide/install-cloud-init

使用 cloud-init 定制虚拟机

refer

Cobbler--自动化部署

CentOS KickStart 无人值守安装及自动部署ks脚本