CoreOS知识集锦
CoreOS是一个轻量级的Linux操作系统,CoreOS的自动化、安全性、可扩容性特征,让其非常适用于集群化的部署场景。
与其它的发行版不同,CoreOS没有包管理器,它倾向于在容器(例如Docker)中运行应用程序。CoreOS对流行的容器系统提供了开箱即用的支持。
CoreOS可以在云服务(例如EC2、GCE)、虚拟化平台(VMware、OpenStack、KVM)、裸金属值上运行。
这是CoreOS提供的新的VM初始化机制,用于代替cloud-config。
Ignition能够执行磁盘分区、分区格式化、写入文件、配置用户、配置网络、创建RAID阵列等初始化操作。Ignition的运行时机非常的早,它在systemd启动之前、任何永久存储挂载之前即被调用。
在VM第一次(也仅仅是第一次)启动时,Ignition会从文件系统、URL、Hypervisor bridge读取JSON格式的配置文件,并将配置应用到VM。
即使是学习阶段,也最好创建3台CoreOS的集群,那样更容易认识CoreOS的特性。为了让CoreOS集群正常启动,你需要提供“点火配置”( Ignition config ),或者通过user_data提供一个cloud-config。
本节记录基于libvirt创建CoreOS客户机的详细过程。
我们可以下载CoreOS官网提供的qcow2格式的镜像,此镜像适用于QEMU:
1 |
wget https://stable.release.core-os.net/amd64-usr/current/coreos_production_qemu_image.img.bz2 |
下载完毕后,解压镜像到 /home/alex/Vmware/KVM/coreos-20/vda.qcow2 备用,默认扩展名是img,手工改成qcow2。
为了配置CoreOS实例,我们需要在宿主机上创建一个目录,此目录中包含一些配置信息。此目录最终映射将为客户机上的一个文件系统。执行以下命令:
1 2 |
mkdir -p /home/alex/Vmware/KVM/coreos-20/cloud-config/openstack/latest/ touch /home/alex/Vmware/KVM/coreos-20/cloud-config/openstack/latest/user_data |
user_data是cloud config格式的配置文件,它提供了客户机运行时所需要的定制化信息。我们至少需要在其中配置SSH Key以便(初次)登录到CoreOS中:
1 2 3 4 |
#cloud-config ssh_authorized_keys: - ssh-rsa AAAAB3NzaC1yc2EAAAABJQAAAIBlsU4YrAi ... EIokU+jOd0MrsnOwQn9wJbov8Xhyw== |
我们可以使用类似下面的命令来定义CoreOS的Domain:
1 2 3 |
virt-install --import --name coreos-20 --ram 1024 --vcpus 1 --disk path=/home/alex/Vmware/KVM/coreos-20/vda.qcow2,format=qcow2,bus=virtio --filesystem /home/alex/Vmware/KVM/coreos-20/cloud-config/,config-2,type=mount,mode=squash |
或者,在常规的Domain XML配置文件中,添加devices的子元素:
1 2 3 4 |
<filesystem type='mount' accessmode='squash'> <source dir='/home/alex/Vmware/KVM/coreos-20/cloud-config/'/> <target dir='config-2'/> </filesystem> |
默认情况下,CoreOS会尝试通过DHCP来获得自身的网络配置,我们可以在启动Domain后立即查看控制台,CoreOS的IP地址会打印在上面。执行下面的命令登录到CoreOS:
1 |
ssh -i path-to-key core@ip-of-coreos |
登录成功后,你可以为core用户设置密码,或者执行其它操作。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
<domain type='kvm' xmlns:qemu='http://libvirt.org/schemas/domain/qemu/1.0'> <name>coreos-20</name> <memory unit='MiB'>1024</memory> <vcpu placement='static'>1</vcpu> <os> <type arch='x86_64' machine='pc'>hvm</type> </os> <features> <acpi/> </features> <cpu mode='custom' match='exact'> <model fallback='allow'>SandyBridge</model> </cpu> <clock offset='utc'/> <on_poweroff>destroy</on_poweroff> <on_reboot>restart</on_reboot> <on_crash>destroy</on_crash> <devices> <emulator>/usr/bin/qemu-system-x86_64</emulator> <disk type='volume' device='disk'> <driver name='qemu' type='qcow2'/> <source pool="default" volume="coreos-20.qcow2" /> <target dev='vda' bus='virtio'/> <boot order='1'/> </disk> <filesystem type='mount' accessmode='squash'> <source dir='/home/alex/Vmware/libvirt/mount/coreos-base/cloud-config/'/> <target dir='config-2'/> </filesystem> <controller type='usb' index='0'/> <controller type='pci' index='0' model='pci-root'/> <interface type='network'> <mac address='DE:AD:BE:EF:00:20'/> <source network='default'/> <model type='virtio'/> </interface> <serial type='pty'> <target port='0'/> </serial> <console type='pty'> <target type='serial' port='0'/> </console> <input type='mouse' bus='ps2'/> <input type='keyboard' bus='ps2'/> <memballoon model='virtio'/> </devices> </domain> |
当前推荐的配置CoreOS的方式是Ignition,但是目前libvirt没有对Ignition的直接支持,需要引入QEMU特有的配置片断。
Ignition配置为JSON格式,示例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
{ "ignition": { "config": {}, "timeouts": {}, "version": "2.1.0" }, "networkd": {}, "passwd": { "users": [ { "name": "core", "sshAuthorizedKeys": [ "ssh-rsa AAAAB3NzaC1yc2EAAAABJQAAAIBlsU4YrAif8Oh4Qdcq1SuF+CbPdr5T3DE3zzeYGG8nkcDMt/9dEjT8eHTMW+4BzCoIfYrIWIprJoykMnhZONBXnoXc/541tqU6MqF0ZRF0QlzSq6VLLLebG3zz+avdJSNLMAvolCLczP536EIokU+jOd0MrsnOwQn9wJbov8Xhyw==" ] } ] }, "storage": { "files": [ { "filesystem": "root", "group": {}, "path": "/etc/hostname", "user": {}, "contents": { "source": "data:,coreos-21", "verification": {} } } ] }, "systemd": {} } |
libvrit Domain配置示例:
1 2 3 4 5 6 7 |
<domain type='kvm' xmlns:qemu='http://libvirt.org/schemas/domain/qemu/1.0'> ... <qemu:commandline> <qemu:arg value="-fw_cfg"/> <qemu:arg value="name=opt/com.coreos/config,file=/home/alex/Vmware/libvirt/mount/coreos-base/provision.ign"/> </qemu:commandline> </domain> |
注意:QEMU 2.0版本不支持 -fw_cfg,手工构建最新版本可以支持。
Leave a Reply