ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Openstack学习总结之九(制作镜像文件)

2021-04-06 18:29:49  阅读:165  来源: 互联网

标签:总结 -- 镜像文件 etc systemctl openstack Openstack root example


前言

在实际应用中,我们会基于已有镜像文件进行个性化的定制,然后制作出满足实际业务需要的镜像文件。这部分我们介绍如何制作一个镜像文件。

一、制作镜像文件

1. 准备工作

  • 安装软件
  • 开启libvirtd服务
  • 创建链接文件
  • 检查网络状态
# 安装基本软件
yum install -y virt-install libvirt qemu-kvm

# 启动libvirtd服务
systemctl start libvirtd
systemctl status libvirtd
systemctl enable libvirtd

# 创建链接文件
ln -sv /usr/libexec/qemu-kvm /usr/bin/

# 检查网络
virsh net-list

如果网络状态不是active,则执行命令virsh net-start default启动default网络即可。
在这里插入图片描述

2. 配置网络

  • 开启内核转发
  • 关闭NetworkManager服务
  • 关闭防火墙
  • 禁用selinux
sysctl -w net.ipv4.ip_forward=1

systemctl stop NetworkManager
systemctl status NetworkManager
systemctl disable NetworkManager

systemctl stop firewalld
systemctl disable firewalld

sed -i 's#=enforcing#=disabled#' /etc/selinux/config

3. 创建虚拟机

  • 准备下载好的镜像文件
  • 下载和安装vnc工具(https://www.tightvnc.org/download.php)
  • 创建虚拟磁盘
  • 打开vnc软件后,安装虚拟机
  • 安装系统
  • 关闭虚拟机
# 创建虚拟磁盘,大小为10Gb,类型为qcow2
mkdir /openstack/images -p
qemu-img create -f qcow2 /openstack/images/example-web.qcow2 10G
# 查看磁盘大小
qemu-img info /openstack/images/example-web.qcow2

# 安装虚拟机
virt-install --virt-type kvm --name example-web --ram 2048 \
--disk /openstack/images/example-web.qcow2 \
--network network=default \
--graphics vnc,listen=0.0.0.0 --noautoconsole \
--os-type=linux \
--cdrom=/os/CentOS-7-x86_64-Minimal-2009.iso

启动虚拟机后,通过vnc工具连接到虚拟机,并按要求安装系统。

1)不一定要在创建命令执行之前打开,命令执行后,直接连接即可
2)标准分区的时候,只分一个/
3)网卡功能打开,使用dhcp模式
4)主机名指定一个标准的名称:demo
5)安全策略选择关闭
6)设置密码
7)重启vm实例

安装完成后,点击重启,这时候虚拟机会处于关闭状态。所以,需要重启虚拟机。

virsh start example-web

启动后使用vnc连接进去,查看一下ip地址,然后在宿主机上使用ssh连接虚拟机。

4. 修改VM实例配置

  • 关闭网络
  • 安装acpid以及其他基本工具
  • 清空网卡规则
# 关闭NetworkManager
systemctl stop NetworkManager
systemctl status NetworkManager
systemctl disable NetworkManager

# 关闭防火墙
systemctl stop firewalld
systemctl status firewalld
systemctl disable firewalld

# selinux配置
sed -i 's#=enforcing#=disabled#' /etc/selinux/config

# 安装acpid
yum install acpid
systemctl start acpid
systemctl status acpid
systemctl enable acpid

# 安装必备软件
yum install -y net-tools vim tree bash-completion

# 清空网卡规则(如果没有可以不需要清空)
vi /etc/udev/rules.d/70-persistent-ipoib.rules

5. 设置网卡临时模板

因为每次重启虚拟机的时候,网络的配置信息会被重置。所以,我们可以把网络信息保存在一个模板文件中,每次重启VM实例时候将模板文件覆盖网络配置文件。这样用户就无需每次启动VM实例都要重新配置网络。

vim /tmp/ifcfg-eth0-example

TYPE=Ethernet
BOOTPROTO=none
NAME=eth0
DEVICE=eth0
ONBOOT=yes
IPADDR=0.0.0.0
NETMASK=255.255.255.0
GATEWAY=192.168.88.2
DNS1=192.168.88.2

定义完成后,我们需要定义一个脚本文件,让系统启动时候自动执行该脚本文件。

cp /etc/rc.local /tmp/
vim /etc/rc.local

追加一下内容
...
/bin/bash /tmp/get_metadata.sh

# 添加执行权限
chmod +x /etc/rc.d/rc.local

6. 定制启动脚本

vim /tmp/get_metadata.sh

# 定制密钥信息
set_key(){
  echo "设置 VM 实例的公钥信息"
  if [ ! -d /root/.ssh ]; then
    mkdir -p /root/.ssh
    chmod 700 /root/.ssh
  fi
  
  ATTEMPTS=3
  FAILED=0
  while [ ! -f /root/.ssh/authorized_keys ]; do
    curl -f http://169.254.169.254/latest/meta-data/public-keys/0/openssh-key > /tmp/metadata-key 2>/dev/null
    if [ "$?" -eq 0 ]; 
 then
      cat /tmp/metadata-key >> /root/.ssh/authorized_keys
      chmod 0600 /root/.ssh/authorized_keys
      restorecon /root/.ssh/authorized_keys
      rm -f /tmp/metadata-key
      echo "Successfully retrieved public key from instance metadata"
      echo "*****************"
      echo "AUTHORIZED KEYS"
      echo "*****************"
      cat /root/.ssh/authorized_keys
      echo "*****************"
    else
      let FAILED=FAILED+1
      if [ "${FAILED}" -gt "${ATTEMPTS}" ];
   then
        echo "Failed"
        break
      fi
      sleep 3
    fi
  done
}

# 定制网络信息
set_network(){
  echo "定制 VM 实例的网卡信息"
  if [ -f /etc/sysconfig/network-scripts/ifcfg-eth0 ];
  then
    rm -f /etc/sysconfig/network-scripts/ifcfg-eth0
    mv /tmp/ifcfg-eth0-example /etc/sysconfig/network-scripts/ifcfg-eth0
    NETWORK=$(curl http://169.254.169.254/2009-04-04/meta-data/local-ipv4)
    sed -i "s/0.0.0.0/${NETWORK}/" /etc/sysconfig/network-scripts/ifcfg-eth0
  fi
}

# 定制主机信息
set_hostname(){
  echo "定制 VM 实例的主机名信息"
  NAME=$(curl http://169.254.169.254/2009-04-04/meta-data/local-hostname)
  HOSTNAME="${NAME}".example.com
  hostnamectl set-hostname "${HOSTNAME}"
}

# 为了安全起见,最后删除脚本文件
set_delete(){
  echo "收尾处理"
  rm -f /tmp/get_metadata.sh
  mv /tmp/rc.local /etc/rc.d/rc.local
}

# 主函数
main(){
  set_key
  set_network
  set_hostname
  set_delete
}

main

脚本定制好后,给脚本文件添加执行权限。

chmod +x /tmp/get_metadata.sh

7. 配置终端

  • 关闭 zeroconf route
  • 配置终端
  • 压缩镜像文件
# 关闭zeroconf配置
echo "NOZEROCONF=yes" >> /etc/sysconfig/network

# 配置终端
vim /etc/default/grub
GRUB_CMDLINE_LINUX="crashkernel=auto biosdevname=0 net.ifnames=0 console=tty0 console=ttyS0,115200n8"

# 使配置生效
grub2-mkconfig -o /boot/grub2/grub.cfg

# 关机
shutdown -h now

完成上面配置后,查看/openstack/images目录。

ll -h

-rw-r--r-- 1 root root 1.6G 3月  30 19:22 example-web.qcow2

镜像文件大小为1.66Gb。我们可以对镜像文件进行压缩处理。

qemu-img convert -c -O qcow2 example-web.qcow2 example.qcow2

[root@image images]# ll -h
总用量 2.4G
-rw-r--r-- 1 root root 763M 3月  30 19:29 example.qcow2
-rw-r--r-- 1 root root 1.6G 3月  30 19:22 example-web.qcow2

压缩后的镜像文件大小为763M。

二、基于定制的镜像文件创建VM实例

1. 上传镜像文件到控制节点

先启动控制节点,然后执行下面命令。

mkdir -p /openstack/images
cd /openstack/images
scp root@192.168.88.16:/openstack/images/example.qcow2 ./

2. 创建镜像

# 切换admin用户
source openstack-admin.sh
# 上传镜像到openstack中
openstack image create "example-image" --file /openstack/images/example.qcow2 --disk-format qcow2 --container-format bare --public
# 检查
openstack image list

3. 创建实例规格

# 创建实例规则
openstack flavor create --id 1 --vcpus 1 --ram 1024 --disk 10 m2.nano
# 检查
openstack flavor list

4. 创建VM实例

# 切换demo用户
source openstack-demo.sh
# 创建实例
openstack server create --flavor m2.nano --image example-image --nic net-id=d75d1e11-0639-4b63-a463-2e6e4ae0efb3 --security-group default --key-name mykey example-dingzhi
# 检查
openstack server list

5. 验证

  • 验证主机名
  • 验证公钥
  • 验证IP地址
  • 验证安全
  • 查看rc.local是否有执行权限
# 登录vm实例(启动定制实例速度较慢,可以通过dashboard查看启动过程)
ssh root@实例IP
# 验证公钥
cat .ssh/authorized_keys
# 验证主机名
hostname
# 验证IP地址
cat /etc/sysconfig/network-scripts/ifcfg-eth0
# 验证安全
ls /tmp    # 看一下该目录下是否有一些无关紧要的文件
# 查看rc.local是否有执行权限
ll /etc/rc.local
cat /etc/rc.local

总结

这部分介绍了如何定义一个新的镜像文件,以及基于该镜像文件创建一个虚拟机实例。接下来介绍如何定义网络。

标签:总结,--,镜像文件,etc,systemctl,openstack,Openstack,root,example
来源: https://blog.csdn.net/zhongliwen1981/article/details/115466342

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有