CoreOS est une nouvelle distribution Linux orientée “infrastructure moderne” et notamment l’utilisation de Docker. On va voir comment l’installer sur le serveur smartos.
Création d’une machine
On va créer une machine KVM avec un peu de mémoire et 2 vcpus, qui sera sur le réseau lab0, avec une adresse mac fixée pour permettre le boot réseau et l’utilisation plus simplement de dhcp.
{
"alias": "coreos1",
"hostname": "coreos1",
"brand": "kvm",
"vcpus": 2,
"autoboot": false,
"ram": 4096,
"resolvers": ["8.8.8.8", "8.8.4.4"],
"disks": [
{
"boot": true,
"model": "virtio",
"size": 40960
}
],
"nics": [
{
"nic_tag": "lab0",
"model": "virtio",
"mac": "e2:ef:5e:b0:35:ec",
"ip": "dhcp",
"primary": true
}
]
}
vmadm create -f coreos1.json
La VM est créée mais pas démarrée.
Configuration
La configuration des machines coreos peut être dynamique, au démarrage. Pour cela il faut uitliser un fichier cloud-config.yml qui sera téléchargé au boot.
cloud-config.yml
#cloud-config
coreos:
etcd:
name: coreos1
addr: 192.168.10.10:4001
peer-addr: 192.168.10.10:7001
fleet:
etcd-request-timeout: 15
public-ip: 192.168.10.10
metadata: region=smart
units:
- name: etcd.service
command: start
- name: fleet.service
command: start
- name: docker.socket
command: start
update:
reboot-strategy: etcd-lock
ssh_authorized_keys:
- ssh-rsa AAAAB3NXXXXXXX montfort
Quelques explications sur le fichier.
- la machine sera connue dans etcd sous le nom de coreos1
- addr désigne son adresse et le port de communication
- peer-addr désigne son adresse et port de communication entre serveurs
- etcd-request-timeout passe à 15 car parfois le timeout trop court pose des dproblèmes
- metadata c’est juste pour essayer :-)
- units les unit systemd qui doivent être lancés au démarrage
- reboot-strategy comment se comporte la mchine dans un cluster en cas de redémarrage
- ssh_authorized_keys la clef ssh de connexion à la machine
Tous les paramètres sont expliqués dans la documentation.
Ce fichier est mis à disposition depuis le serveur DHCP/TFTP par un serveur web très simple :
python -m SimpleHTTPServer
Il suffit de se mettre dans le répertoire contenant le cloud-config.yml et de lancer la commande pour rendre le fichier accessible sur le port 8000 de la machine. C’est un peu sale mais c’est rapide…
Images de boot
Sur le serveur de boot, dans le répertoir /tftpboot on va télécharger le noyau et le ramdisk pour démarrer la machine.
wget http://alpha.release.core-os.net/amd64-usr/current/coreos_production_pxe.vmlinuz
wget http://alpha.release.core-os.net/amd64-usr/current/coreos_production_pxe_image.cpio.gz
Ici on a choisit la version alpha, la plus récente. Les autres beta ou stable sont également utilisables. Les urls sont disponibles sur le site
pxelinux.cfg/default
Pour démarrer par PXE il faut un fichier donnant les options de boot pour la machine. Dans un premier temps on va utiliser default.
Ce fichier se trouve dans /tftpboot/pxelinux.cfg/default.
default coreos
prompt 1
timeout 15
label coreos
menu default
kernel coreos_production_pxe.vmlinuz
append initrd=coreos_production_pxe_image.cpio.gz cloud-config-url=http://192.168.10.2:8000/cloud-config.yml console=ttyS0
Les options kernel et initrd sont assez classiques. On ajoute l’url du fichier cloud-config.yml à télécharger et la redirection de la console.
Premier démarrage
On peut maintenant démarrer notre machine.
vmadm start $coreos1 order=n
Il faut bien faire attention qu’elle démarre sur le réseau.
On peut récupérer la console avec la commande
vmadm info $coreos1 vnc
et s’y connecter avec vncviewer.
Sinon on peut attendre quelques secondes et s’y connecter directement par ssh.
Le système de la machine est entiérement en RAM et n’utilise pas le disque. On va configurer le disque comme stockage local. La machine continuera à booter par PXE.
cfdisk -z /dev/vda
touch "/usr.squashfs (deleted)" # work around a bug in mkfs.btrfs 3.12
mkfs.btrfs -L ROOT /dev/vda1
Second démarrage
On va modifier le fichier pxe default pour signaler au système qu’on va utiliser un disque local :
default coreos
prompt 1
timeout 15
label coreos
menu default
kernel coreos_production_pxe.vmlinuz
append initrd=coreos_production_pxe_image.cpio.gz cloud-config-url=http://192.168.10.2:8000/cloud-config.yml console=ttyS0 root=LABEL=ROOT
La machine doit redémarrer sans problème et bien utiliser son disque. Pour mettre à jour la machine il suffira de télécharger sur le serveur tftp les nouvelles images et de redémarrer.