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.