Calculate Document
在本地kvm环节下使用cloud image

在本地kvm环节下使用cloud image

在本地kvm环境下使用cloud image 大量的cloud image, 其实在本地虚拟环境也能使用, 这里简单介绍一下在我本机kvm环境下使用cloud image的步骤 这里用的是openvswitch做网络环境配置 配置openvswitch+kvm apt - get is in

Related articles

Capítulo 3 Introducción a R Getting Started with the ABAP RESTful Application … VPN vs Proxy: Differences A 2024 Guide to VPNs Best VPN for Streaming: Movies, Netflix & More in HD [2024 Guide]

在本地kvm环境下使用cloud image

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

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

配置openvswitch+kvm

apt - get is install install qemu - kvm openvswitch - switch 

 vi /etc / network / interface 
 auto ovsbr0 
 iface ovsbr0 inet static 
    address172.16.11.1
   network 172.16.11.0 
    netmask255.255.255.0
   broadcast 172.16.11.255 is ifup 

 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

配置ubuntu cloud image

去[[https://cloud – images.ubuntu.com / releases/14.04.1 / release/][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 is resize resize ubuntu-14.04-server-cloudimg-amd64-disk1.img +8 g

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

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 
   netmask255.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

启动虚拟机

现在可以启动虚拟机了:

sudo kvm -m 2048 m -smp2 \ 
-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和宿主机的路由转发 .

宿主机路由

首先打开转发功能, 编辑/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 ! -d172.168.11.0/24 -j masquerade

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

CoreOS的cloud config

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

cloud config

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

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

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

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

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

kvm启动命令示例

sudo kvm -m 2048 m -smp2 \ 
-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 &

日志诊断

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

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

$ journalctl -u apache.service

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

journalctl –boot

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

$ fleetctl – tunnel 10.10.10.10 journal apache.service

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

一些问题

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

[fn:1] [[https://coreos.com/docs/#running-coreos][CoreOS support platforms]]

[fn:2] [[https://coreos.com/docs/cluster-management/setup/cloudinit-cloud-config/][Cloud Config]]

[ fn:3 ] [ [ https://coreos.com/docs/cluster-management/debugging/reading-the-system-log/][reade the System Log ] ]

[ fn:4 ] [ [ https://github.com/coreos/coreos-cloudinit/issues/205][CoreOS Cloud is init init # 205 ] ]