1 在本地kvm环境下使用cloud image

大量的cloud image, 其实在本地虚拟环境也能使用, 这里简单介绍一下在我本机kvm环境下使用cloud image的步骤

这里用的是openvswitch做网络环境配置

1.1 配置openvswitch+kvm

apt-get install qemu-kvm openvswitch-switch

vi /etc/network/interface
auto ovsbr0
iface ovsbr0 inet static
   address 172.16.11.1
   network 172.16.11.0
   netmask 255.255.255.0
   broadcast 172.16.11.255

ovs-vsctl add-br ovsbr0

/etc/openvswitch/ovs-ifup
#!/bin/sh
switch='ovsbr0'
/sbin/ifconfig $1 0.0.0.0 up
ovs-vsctl add-port ${switch} $1

/etc/openvswitch/ovs-ifdown
#!/bin/sh
switch='ovsbr0'
/sbin/ifconfig $1 0.0.0.0 down
ovs-vsctl del-port ${switch} $1

1.2 配置ubuntu cloud image

Ubuntu网站 下载相对应的image, 我这里用的是1404做测试:

tacy@momo1:~/$ wget https://cloud-images.ubuntu.com/releases/14.04.1/release/ubuntu-14.04-server-cloudimg-amd64-disk1.img

tacy@momo1:~/$ tar zxvf ubuntu-14.04-server-cloudimg-amd64-disk1.img

这是一个已经安装好的ubunt 14.04镜像, 文件格式是qcow2, 磁盘空间大小是2.2G, 可以用qemu-img resize.

tacy@momo1:~/$ qemu-img resize ubuntu-14.04-server-cloudimg-amd64-disk1.img +8g

然后我们做一个快照, 用它来启动虚拟机

tacy@momo1:~/$ qemu-img create -f qcow2 -b ubuntu-14.04-server-cloudimg-amd64-disk1.img node01.img

准备好image, 现在我们来配置本地的cloud init, 让cloud image能启动起来, 也很简单, 建立下面两个文件:

tacy@momo1:~/$ mkdir metadata && cd metadata
tacy@momo1:~/metadata$ cat meta-data
instance-id: iid-local01
local-hostname: cloudimg
network-interfaces: |
  auto eth0
  iface eth0 inet static
  address 172.16.11.100
  network 172.16.11.0
  netmask 255.255.255.0
  broadcast 172.16.11.255
  gateway 172.16.11.1

tacy@momo1:~/metadata$ cat user-data
#cloud-config
#password: passw0rd
#chpasswd: { expire: False }
#ssh_pwauth: True
ssh_authorized_keys:
  - ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCUtDcwkNskzigh0rjirK/BoualyOiuZoBLMpK03MHBUPh/wHgoiSGOUoSGY7RMcVclKECqCQjyv3WN6vJnDwjQ1mEiXFKntnWqqJYZsDETttDfxYwPmV2sA5UBfSFDUuBhmLYVsJg/T9NUf/K/aO8RI2Q7M09Xds6hfilO1rR59h/8/d3fbj8QG/DBnEFe6HxQj7OX5RGPbL/dT9OlLdDLhRf6rPHFHVy7PKTU1SfzIsL89v9MXkAcet+zb5UJcuifSMIQQhSv8MhhWscZibkXQi1btqxNgoxIVguW57fghR7wpVUn6oAHiCnz3KY34N8Nv1UodY6kk4idUmQ0oJiZ xx@xx

这里的ssh key是你的公钥, 当然也可以配置密码登陆.

生成镜像文件:

genisoimage  -output seed.iso -volid cidata -joliet -rock user-data meta-data

1.3 启动虚拟机

现在可以启动虚拟机了:

sudo kvm -m 2048m -smp 2 \
-drive file=node01.img,if=virtio,cache=none,aio=native \
-drive file=./metadata/seed.iso,if=virtio \
-net nic,vlan=0,model=virtio,macaddr=DE:AD:BE:EF:FC:80 \
-net tap,vlan=0,vhost=on,script=/etc/openvswitch/ovs-ifup,downscript=/etc/openvswitch/ovs-ifdown \
-nographic -curses

启动之后, 你的配置信息注入到了虚拟机里面, 你现在可以直接访问了:

ssh ubuntu@172.16.11.100

想象一下, 这样你自己完全可以diy一个单机的IaaS平台嘛!

当然这里没有配置虚拟机的网络访问, 如果要实现网络访问, 需要配置虚拟机的resolv.conf和宿主机的路由转发.

1.4 宿主机路由

首先打开转发功能, 编辑/etc/sysctl.conf, 打开ip_forward=1那一行, 同时让配置生效:

sysctl -p

配置iptables:

iptables -I FORWARD -j ACCEPT
iptables -t nat -A POSTROUTING -s 172.16.11.0/24 ! -d 172.168.11.0/24 -j MASQUERADE

这里只是测试环境, 所以我打开了所有包的转发, 当然你也能细粒度控制包转发.

2 CoreOS的cloud config

coreos这是个顺应容器时代的操作系统, 他和其他linux发行版完全不一样, 没有提供包管理机制, 预编译升级, 支持很多IaaS平台, 如果你没有IaaS平台, 当然你也能在本地用, 社区有支持版本1. 我一般在自己机器上用kvm, 测试了一下, 非常方便, 简单注意几点:

2.1 cloud config

该文件必须存放在特殊位置, 使用方式如下:

mkdir -p myconfig/openstack/latest
cp user_data myconfig/openstack/latest/

user_data就是coreos的cloud config文件, 具体用法请参考CoreOS文档2. 必须存放在openstack/latest目录下才行.

使用方式在kvm启动命令中添加如下启动项:

-fsdev local,id=conf,security_model=none,readonly,path=~/myconfig \
-device virtio-9p-pci,fsdev=conf,mount_tag=config-2 \

2.2 kvm启动命令示例

sudo kvm -m 2048m -smp 2 \
-drive file=coreos-etcd.img,if=virtio,cache=none,aio=native \
-fsdev local,id=conf,security_model=none,readonly,path=~/myconfig \
-device virtio-9p-pci,fsdev=conf,mount_tag=config-2 \
-net nic,vlan=0,model=virtio \
-net tap,vlan=0,vhost=on,script=/etc/openvswitch/ovs-ifup,downscript=/etc/openvswitch/ovs-ifdown \
-nographic > /dev/null 2>&1 &

2.3 日志诊断

CoreOS的日志查看非常简单, 他提供了一个统一的工具: journalctl3, 通过这个工具, 你能查看单个节点的日志信息.

读整个日志, 不需要加任何参数, 直接执行即可. 查看某个服务的日志, 简单通过如下命令:

$ journalctl -u apache.service

读启动日志, 可以查看最晚的启动日志, 方便诊断启动错误(cloud config出现问题可以清楚看到):

journalctl --boot

你也能用fleetctl读取fleet控制的服务:

$ fleetctl --tunnel 10.10.10.10 journal apache.service

当然也能tail ,直接在命令后面加-f参数即可

2.4 一些问题

  1. Cloud config容易由于网络问题, 导致配置失败, 估计好多人都碰到了4.


blog comments powered by Disqus