Created
February 12, 2017 11:54
-
-
Save kirill9617/59bba77dfcde5c84b9f0a6a1f3c14ead to your computer and use it in GitHub Desktop.
Script to setup cluster of coreOS in VirtualBox
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| #!/bin/bash | |
| USAGE="Usage: $0 -h | [-n name-prefix] [-s size] | |
| This script create cluster of size VBox VMs using default parameters. | |
| Feel free to modify it. | |
| Options: | |
| -h This help | |
| -n Name prefix for VMs (default: core) | |
| -s Size of cluster (default: 3) | |
| CREATEVDI_OPTS will be passed to create-coreos-vdi scripts | |
| This tool creates a CoreOS VDI image to be used with VirtualBox. | |
| " | |
| PREFIX="core" | |
| SIZE=3 | |
| : ${CREATEVDI_OPTS:="-V stable"} | |
| while getopts "n:s:h" OPTION | |
| do | |
| case $OPTION in | |
| n) PREFIX="$OPTARG" ;; | |
| s) SIZE=$OPTARG ;; | |
| h) echo "$USAGE"; exit;; | |
| *) exit 1;; | |
| esac | |
| done | |
| #загрузка образа диска | |
| : ${IMAGE:=coreos_prod.vdi} | |
| echo $IMAGE | |
| if [ ! -f $IMAGE ] | |
| then | |
| if [ ! -f "create-coreos-vdi" ] | |
| then | |
| wget https://raw.githubusercontent.com/coreos/scripts/master/contrib/create-coreos-vdi | |
| chmod +x create-coreos-vdi | |
| fi | |
| source ./create-coreos-vdi $CREATEVDI_OPTS | |
| mv $VDI_IMAGE $IMAGE | |
| fi | |
| #генерация токена для инициализации кластера | |
| TOKEN=$(curl http://discovery.etcd.io/new?size=$SIZE | sed 's|.*/||') | |
| #шаблон cloud-config | |
| CLOUD_CONFIG='#cloud-config | |
| users: | |
| - name: "user" | |
| passwd: "$1$53YHkhSo$bvjpI.GPhDuC8pUfqAlrT." | |
| groups: | |
| - "sudo" | |
| - "docker" | |
| ssh-authorized-keys: | |
| - "<SSH_KEY>" | |
| ssh_authorized_keys: | |
| - <SSH_KEY> | |
| hostname: <HOSTNAME> | |
| coreos: | |
| etcd2: | |
| advertise-client-urls: http://<IP>:2379,http://<IP>:4001 | |
| initial-advertise-peer-urls: http://<IP>:2380 | |
| discovery: https://discovery.etcd.io/<TOKEN> | |
| listen-peer-urls: http://<IP>:2380,http://<IP>:7001 | |
| listen-client-urls: http://0.0.0.0:2379,http://0.0.0.0:4001 | |
| units: | |
| - name: etcd2.service | |
| command: start | |
| - name: fleet.service | |
| command: start | |
| - name: static.network | |
| runtime: true | |
| content: | | |
| [Match] | |
| Name=enp0s3 | |
| [Network] | |
| DNS=192.168.15.1 | |
| Address=<IP>/24 | |
| Gateway=192.168.15.1 | |
| #' | |
| #добавление в конфиг ssh ключей | |
| while read l; do | |
| if [ -z "$SSH_KEY" ]; then | |
| SSH_KEY="$l" | |
| else | |
| SSH_KEY="$SSH_KEY | |
| - $l" | |
| fi | |
| done < ~/.ssh/id_rsa.pub | |
| #заполнение конфига | |
| CLOUD_CONFIG="${CLOUD_CONFIG//<SSH_KEY>/${SSH_KEY}}" | |
| CLOUD_CONFIG="${CLOUD_CONFIG//<TOKEN>/${TOKEN}}" | |
| #создание сети NAT для кластера | |
| VBoxManage natnetwork remove --netname ${PREFIX}_net | |
| VBoxManage natnetwork add --netname ${PREFIX}_net --network "192.168.15.0/24" --dhcp off --enable | |
| #создание ВМ | |
| for i in $(seq 1 $SIZE) | |
| do | |
| NAME=$PREFIX$i | |
| CLOUD_CONFIG_x=$CLOUD_CONFIG | |
| public_ipv4="192.168.15.$((100+$i))" | |
| #заполнение конфига | |
| CLOUD_CONFIG_x="${CLOUD_CONFIG_x//<HOSTNAME>/${NAME}}" | |
| CLOUD_CONFIG_x="${CLOUD_CONFIG_x//<IP>/${public_ipv4}}" | |
| WORKDIR="tmp.${RANDOM}" | |
| mkdir "$WORKDIR" | |
| CONFIG_DIR="${WORKDIR}/openstack/latest" | |
| CONFIG_FILE="${CONFIG_DIR}/user_data" | |
| CONFIGDRIVE_FILE="$NAME.iso" | |
| mkdir -p "$CONFIG_DIR" | |
| touch ${CONFIG_FILE} | |
| cat > ${CONFIG_FILE} << EOL | |
| ${CLOUD_CONFIG_x} | |
| EOL | |
| #создание config-drive | |
| mkisofs -R -V config-2 -o "$CONFIGDRIVE_FILE" "$WORKDIR" | |
| rm -rf $WORKDIR | |
| #клонирование образа диска | |
| VBoxManage clonehd $IMAGE $NAME.vdi | |
| VBoxManage modifyhd $NAME.vdi --resize 10240 | |
| #настройка ВМ | |
| VBoxManage createvm --name $NAME --ostype Linux26_64 --register | |
| VBoxManage modifyvm $NAME --memory 1024 | |
| #настройка сети | |
| VBoxManage modifyvm $NAME --nic1 natnetwork | |
| VBoxManage modifyvm $NAME --nat-network1 ${PREFIX}_net | |
| VBoxManage natnetwork modify --netname ${PREFIX}_net --port-forward-4 "ssh_$NAME:tcp:[]:$((1022+$i)):[$public_ipv4]:22" | |
| VBoxManage modifyvm $NAME --nic2 nat | |
| #проброс портов | |
| VBoxManage modifyvm $NAME --natpf2 "ssh_$NAME,tcp,127.0.0.1,$((2200+$i)),,22" | |
| #подключение образа диска | |
| VBoxManage storagectl $NAME --name "SATA Controller" --add sata --controller IntelAHCI | |
| VBoxManage storageattach $NAME --storagectl "SATA Controller" --port 0 --device 0 --type hdd --medium $NAME.vdi | |
| #подключение config-drive | |
| VBoxManage storagectl $NAME --name "IDE Controller" --add ide | |
| VBoxManage storageattach $NAME --storagectl "IDE Controller" --port 0 --device 0 --type dvddrive --medium $NAME.iso | |
| done |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment