Archives pour la catégorie ‘Virtualisation’

Docker : lancer un shell dans un container

Depuis Docker version 1.3 :

# docker exec -ti container_name /bin/bash

Amazon EC2 : fix de configuration Xen avec instance HVM

# dmsg
[335773.344080] xen:balloon: Cannot add additional memory (-17)
[335805.413385] xen:balloon: Cannot add additional memory (-17)
[335837.536078] xen:balloon: Cannot add additional memory (-17)
 
# cat /sys/devices/system/xen_memory/xen_memory0/info/current_kb > /sys/devices/system/xen_memory/xen_memory0/target_kb

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

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

Docker : supprimer les images non tagguées

# docker rmi $(docker images|grep "^<none>"|awk "{print \$3}")

Docker : accèder aux volumes partagés d’un container en exécution

# docker run --rm --volumes-from <container_name> -t -i busybox sh

Docker : s’attacher à un container en exécution

# PID=$(docker inspect --format {{.State.Pid}} <container_name_or_id>)
# nsenter --target $PID --mount --uts --ipc --net --pid

VirtualBox : dossier partagé sur un guest Linux

Exemple de montage du partage www sur le /var/www d’un guest Linux :

# vim /etc/fstab
www /var/www/ vboxsf rw,uid=33,gid=33 0 0

VirtualBox : fixer les règles réseau d’udev suite au clonage d’une VM

udev a la facheuse tendance à faire perdre la connectivé réseau suite au clonage d’une VM. Dans le cas d’un déploiement en masse de mes VM, j’ai recours à un script init.d qui va supprimer les règles persistantes sur les interfaces réseaux à chaque shutdown / reboot. Le voici :

# vim /etc/init.d/udev-network-rules
#! /bin/sh
### BEGIN INIT INFO
# Provides:          udev-network-rules
# Required-Start:    $remote_fs $syslog
# Required-Stop:     $remote_fs $syslog
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Fix udev network rules before restart
# Description:       Fix udev network rules before restart for VM machines
### END INIT INFO

# Author: Boris HUISGEN <bhuisgen@hbis.fr>

PATH=/sbin:/usr/sbin:/bin:/usr/bin
DESC="udev network rules"
NAME=udev-network-rules
SCRIPTNAME=/etc/init.d/$NAME

. /lib/init/vars.sh
. /lib/lsb/init-functions

do_start()
{
	return 0
}

do_stop()
{
	rm -f /etc/udev/rules.d/70-persistent-net.rules
	return 0
}

do_reload() {
	return 0
}

case "$1" in
  start)
	[ "$VERBOSE" != no ] && log_daemon_msg "Starting $DESC" "$NAME"
	do_start
	case "$?" in
		0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
		2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
	esac
	;;
  stop)
	[ "$VERBOSE" != no ] && log_daemon_msg "Stopping $DESC" "$NAME"
	do_stop
	case "$?" in
		0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
		2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
	esac
	;;
  status)
       exit 0
       ;;
  restart|force-reload)
	log_daemon_msg "Restarting $DESC" "$NAME"
	do_stop
	case "$?" in
	  0|1)
		do_start
		case "$?" in
			0) log_end_msg 0 ;;
			1) log_end_msg 1 ;;
			*) log_end_msg 1 ;;
		esac
		;;
	  *)
		log_end_msg 1
		;;
	esac
	;;
  *)
	echo "Usage: $SCRIPTNAME {start|stop|status|restart|force-reload}" >&2
	exit 3
	;;
esac

:
# chmod +x /etc/init.d/udev-network-rules
# update-rc.d udev-network-rules defaults
Haut de page