CloudStack在实验室实践过程,创建模版部分。
Linux模板
为了使用模板部署Linux VMs,可以按照此文档来准备Linux模板。这个指导目前覆盖了传统的安装,但不会涉及用户数据和cloud-init,还有假设在安装过程中安装了openssh服务。
创建Linux模板过程
安装
- 最小化安装
- 保持localhost主机名
通常在安装过程中给VM命名是一个好的做法,这么做能确保某些组件如LVM不会只在一台机器中出现,但此处推荐在安装过程中使用“localhost”命名。
更新YUM源
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup wget http://192.178.102.249/help/CentOS-Base.repo -P /etc/yum.repos.d/ wget http://192.178.102.249/help/epel6.repo -P /etc/yum.repos.d/
|
更新、安装主模板中的包
$ sudo -i apt-get update apt-get upgrade -y apt-get install -y acpid ntp reboot
|
ifup eth0 yum update -y yum install -y screen wget reboot
|
# mount /dev/cdrom /mnt tar -zxvf VMwareTools-9.4.11-2400950.tar.gz -C /tmp yum install -y perl ./vmware-install.pl
|
安装vnc服务端,并开启防火墙
yum install -y tigervnc tigervnc-server vncserver :1 vi /etc/sysconfig/vncservers VNCSERVERS="1:root" VNCSERVERARGS[1]="-geometry 1280x720"
chkconfig --level 35 vncserver on ps -ef|grep Xvnc
/sbin/iptables -I INPUT -p tcp --dport 5901 -j ACCEPT /sbin/iptables -I INPUT -p tcp --dport 5801 -j ACCEPT /etc/rc.d/init.d/iptables save
|
安装falcon-agent
# yum install -y golang //set $GOPATH and $GOROOT export GOPATH=/usr/share export GOROOT=/usr/lib/golang
mkdir -p $GOPATH/src/github.com/open-falcon cd $GOPATH/src/github.com/open-falcon git clone https://github.com/open-falcon/agent.git cd agent go get ./... ./control build
cd $GOPATH/src/github.com/open-falcon/agent/ mv cfg.example.json cfg.json vim cfg.json // 修改 transfer这个配置项的enabled为 true,表示开启向transfer发送数据的功能 // 修改 transfer这个配置项的addr为:127.0.0.1:8433 (改地址为transfer组件的监听地址) // 默认情况下(所有组件都在同一台服务器上),保持cfg.json不变即可 // cfg.json中的各配置项,可以参考 https://github.com/open-falcon/agent/blob/master/README.md //配置防火墙 /sbin/iptables -I INPUT -p tcp /sbin/iptables -I INPUT -p tcp /sbin/iptables -I INPUT -p tcp /etc/rc.d/init.d/iptables save
//启动 ./control start //查看日志 ./control tail
|
goto http://localhost:1988
配置falcon-agent开机自启动
vi /etc/init.d/open-falcon-agent
#!/bin/sh
SCRIPT="/opt/open-falcon/agent/control"
start() { $SCRIPT start }
stop() { $SCRIPT stop }
case "$1" in start) start ;; stop) stop ;; restart) stop start ;; *) echo "Usage: $0 {start|stop|restart}" esac
|
添加开机启动
chkconfig --add open-falcon-agent chmod 775 /etc/init.d/open-falcon-agent service open-falcon-agent restart
|
其他配置
配置命令回溯
vi /etc/profile
export HISTTIMEFORMAT="[%Y-%m-%d %H:%M:%S] [`who am i 2>/dev/null| awk '{print $NF}'|sed -e 's/[()]//g'`] " export PROMPT_COMMAND='\ if [ -z "$OLD_PWD" ];then export OLD_PWD=$PWD; fi; if [ ! -z "$LAST_CMD" ] && [ "$(history 1)" != "$LAST_CMD" ]; then logger -t `whoami`_shell_cmd "[$OLD_PWD]$(history 1)"; fi ; export LAST_CMD="$(history 1)"; export OLD_PWD=$PWD;'
|
主机名管理
默认情况下CentOS在启动的时候配置主机名。
Ubuntu没有此功能,对于Ubuntu,安装时使用下面步骤。一个模板化的VM使用/etc/dhcp/dhclient-exit-hooks.d中的一个自定义脚本来设置主机名,这个脚本首先检查当前的主机名是是否是hostname,如果是,它将从DHCP租约文件获取host-name,domain-name和fix-ip,并且使用这些值来设置主机名并将其追加到 /etc/hosts 文件以用来本地主机名解析。一旦这个脚本或者一个用户从本地改变了主机名,那么它将不再根据新的主机名调整系统文件。此脚本同样也会重建openssh-server keys,这个keys在做模板(如下所示)之前被删除了。保存下面的脚本到/etc/dhcp/dhclient-exit-hooks.d/sethostname,并且调整权限。
vi /etc/dhcp/dhclient-exit-hooks.d/sethostname
#!/bin/sh
oldhostname=$(hostname -s) if [ $oldhostname = 'localhost' ] then sleep 10 hostname=$(cat /var/lib/dhcp/dhclient.eth0.leases | awk ' /host-name/ { host = $3 } END { printf host } ' | sed 's/[";]//g' ) fqdn="$hostname.$(cat /var/lib/dhcp/dhclient.eth0.leases | awk ' /domain-name/ { domain = $3 } END { printf domain } ' | sed 's/[";]//g')" ip=$(cat /var/lib/dhcp/dhclient.eth0.leases | awk ' /fixed-address/ { lease = $2 } END { printf lease } ' | sed 's/[";]//g') echo "cloudstack-hostname: Hostname _localhost_ detected. Changing hostname and adding hosts." echo " Hostname: $hostname \n FQDN: $fqdn \n IP: $ip" awk -v i="$ip" -v f="$fqdn" -v h="$hostname" "/^127/{x=1} !/^127/ && x { x=0; print i,f,h; } { print $0; }" /etc/ hosts > /etc/hosts.dhcp.tmp mv /etc/hosts /etc/hosts.dhcp.bak mv /etc/hosts.dhcp.tmp /etc/hosts echo $hostname > /etc/hostname hostname $hostname export DEBIAN_FRONTEND=noninteractive dpkg-reconfigure openssh-server fi
|
# chmod 774 /etc/dhcp/dhclient-exit-hooks.d/sethostname
|
为了Ubuntu DHCP的脚本功能和CentOS dhclient能设置VM主机名,他们都去要设置主模板的主机名设置为“localhost”,运行下面的命令来更改Ubuntu主机名。
# hostname localhost echo "localhost" > /etc/hostname
|
密码管理
设置用户密码期限,这步是要在模板部署之后强制用户更改VM的密码。
首先确认root用户是启用的并且使用了密码,然后使用root登录。
使用root,移除任何在安装过程中创建的自定义用户账户。
关于设置密码管理脚本的相关说明,请参阅给你的模板添加密码管理 ,这样能允许CloudStack通过web界面更改root密码。
警告
当准备好做主模板的时候请运行下列步骤。如果主模板在这些步骤期间重启了,那么你要重新运行所有的步骤。在这个过程的最后,主模板应该关机并且将其创建为模板,然后再部署。
移除udev持久设备规则
这一步会移除模板的特殊信息,如网络MAC地址,租约信息和CD块设备,这个文件会在下次启动时自动生成。
rm -f /etc/udev/rules.d/70* rm -f /var/lib/dhcp/dhclient.*
|
rm -f /etc/udev/rules.d/70* rm -f /var/lib/dhclient/*
|
移除SSH Keys
这步是为了确认所有要作为模板的VMs的SSH Keys都不相同,否则这样会降低虚拟机的安全性。
清除日志文件
从主模板移除旧的日志文件是一个好习惯。
# cat /dev/null > /var/log/audit/audit.log 2>/dev/null cat /dev/null > /var/log/wtmp 2>/dev/null logrotate -f /etc/logrotate.conf 2>/dev/null rm -f /var/log/*-* /var/log/*.gz 2>/dev/null
|
清除用户历史
清除曾经运行过的bash命令。
网卡配置
对于CentOS,必须要修改网络接口的配置文件,在这里我们编辑文件,更改下面的内容。
vi /etc/sysconfig/network-scripts/ifcfg-eth0 DEVICE=eth0 TYPE=Ethernet BOOTPROTO=dhcp ONBOOT=yes
|
创建模板
现在可以关闭模板VM并且创建模板了!
现在可以创建模板了。
注意
通过Ubuntu和CentOS的模板分发的虚机可能需要重启主机名才生效。