Archives pour la catégorie ‘Linux’

CoreOS : cloud config pour instance EC2 avec stockage local Docker + swap

Le fichier cloud-config ci-dessous initialise une instance EC2 CoreOS avec les options suivantes :

  • paramétrage des timeout fleet et etcd
  • swap d’1 Go sur le disque local (/dev/xvdb1)
  • partition BRTFS pour les containers Docker sur disque local (/dev/xvdb2)
  • désactivation du reboot automatique par sécurité (locksmithd)
#cloud-config

coreos:
  update:
    reboot-strategy: off
  etcd:
    # generate a new token for each unique cluster from https://discovery.etcd.io/new
    discovery: https://discovery.etcd.io/7c024472504cf1cef428ccc8af8e63f0
    # multi-region and multi-cloud deployments need to use $public_ipv4
    addr: $private_ipv4:4001
    peer-addr: $private_ipv4:7001
    peer-election-timeout: 6000
    peer-heartbeat-interval: 1500
    snapshot: true
    snapshot-count: 100
  fleet:
    public-ip: $public_ipv4
    metadata: region=eu-west
    etcd-request-timeout: 1500
  units:
    - name: etcd.service
      command: start
    - name: fleet.service
      command: start
    - name: format-ephemeral.service
      command: start
      content: |
        [Unit]
        Description=Formats the ephemeral drive
        [Service]
        Type=oneshot
        RemainAfterExit=yes
        ExecStartPre=/usr/sbin/wipefs -f /dev/xvdb
        ExecStartPre=/usr/bin/sh -c "(/usr/bin/echo ',1024,S' && /usr/bin/echo ';')|/usr/sbin/sfdisk /dev/xvdb -uM"
        ExecStartPre=/usr/sbin/mkswap -f /dev/xvdb1
        ExecStartPre=/usr/sbin/swapon /dev/xvdb1
        ExecStart=/usr/sbin/mkfs.btrfs -f /dev/xvdb2
    - name: var-lib-docker.mount
      command: start
      content: |
        [Unit]
        Description=Mount ephemeral to /var/lib/docker
        Requires=format-ephemeral.service
        After=format-ephemeral.service
        Before=docker.service
        [Mount]
        What=/dev/xvdb2
        Where=/var/lib/docker
        Type=btrfs

CoreOS : désactivation des mises à jour automatiques

# systemctl stop update-engine.service
# systemctl mask update-engine.service

Btrfs : No space is left on device

# btrfs fi balance start -dusage=5 /
Done, had to relocate 5 out of 32 chunks

En cas d’opération longue, le statut peut être vérifié par la commande :

# btrfs balance status /
Balance on '/' is running
1 out of about 7 chunks balanced (2 considered),  86% left

Linux : modifier l’IP de sortie en configuration multi-alias

# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP qlen 1000
link/ether 00:1e:c9:ae:fc:6f brd ff:ff:ff:ff:ff:ff
inet 172.16.170.4/16 brd 172.29.255.255 scope global eth0:1
inet 172.16.170.5/16 brd 172.29.255.255 scope global secondary eth0:2
inet 172.16.170.6/16 brd 172.29.255.255 scope global secondary eth0:3
inet 172.16.170.7/16 brd 172.29.255.255 scope global secondary eth0:4
inet 172.16.0.3/16 brd 172.29.255.255 scope global secondary eth0
inet6 fe80::21e:c9ff:feae:fc6f/64 scope link
valid_lft forever preferred_lft forever
# ip route
default via 172.16.0.1 dev eth0
172.16.0.0/16 dev eth0  proto kernel  scope link  src 172.16.170.4
# ip route get 8.8.8.8
8.8.8.8 via 172.16.0.1 dev eth0  src 172.16.170.4
cache
# ip route replace default via 172.16.0.1 src 172.16.0.3
# ip route get 8.8.8.8
8.8.8.8 via 172.16.0.1 dev eth0  src 172.16.0.3
cache

Systemd : unité timer pour simuler un script cron

# cat cleanup.1.timer
[Unit]
Description=Cleanup Timer

[Timer]
OnCalendar=06:00
Unit=cleanup.1.service

[Install]
WantedBy=timers.target

[X-Fleet]
MachineID=b39596623f6540568ea3ea25a4fa8752
# cat cleanup.1.service
[Unit]
Description=Cleanup Service

[Service]
TimeoutStartSec=0
ExecStart=/bin/bash -c "docker rmi $(docker images|grep \"^<none>"|awk \"{print \$3}\""

[X-Fleet]
MachineID=b39596623f6540568ea3ea25a4fa8752

Pour le déploiement avec fleet :

# fleetctl submit cleanup.1.service
# fleetctl load cleanup.1.service
# fleetctl submit cleanup.1.timer
# fleetctl load cleanup.1.timer
# fleetctl start cleanup.1.timer

Fleet : afficher un fichier service

# fleetctl cat monitoring.1.service
[Unit]
Description=monitoring
Requires=docker.service
Requires=logging.1.service
After=docker.service
After=logging.1.service

[Service]
ExecStartPre=-/usr/bin/docker kill monitoring
ExecStartPre=-/usr/bin/docker rm monitoring
ExecStartPre=/usr/bin/docker pull 1.2.3.4:5000/monitoring:latest
ExecStart=/usr/bin/docker run --name monitoring -p 10050:10050 -v /var/run/docker.sock:/coreos/var/run/docker.sock -v /proc:/coreos/proc:ro -v /sys:/coreos/sys:ro -v /dev:/coreos/dev:ro -v /tmp/logging/dev/log:/dev/log --restart=always 1.2.3.4:5000/monitoring:latest coreos1 80.81.82.83
ExecStop=/usr/bin/docker stop monitoring
TimeoutStartSec=900

[X-Fleet]
MachineID=b39596623f0000568ea3ea25a4fa0000

Docker : forcer le rédémarrage d’un container

# docker run --restart=always logging
# docker run --restart=on-failure:5 monitoring

CoreOS : monitoring d’un serveur avec Zabbix

Je viens de publier mes sources nécessaires à la création d’un container Docker avec un agent Zabbix patché par mes soins dans le but de monitorer un serveur CoreOS et ses containers Docker.

URL du dépôt : https://github.com/bhuisgen/docker-zabbix-coreos

PHP-FPM : effectuer un strace en live

# ps auxw | grep php | awk '{print"-p " $2}' | xargs strace

Debian : réinstaller un package

# apt-get install --reinstall package
Haut de page