CoreOS

Материал из Национальной библиотеки им. Н. Э. Баумана
Последнее изменение этой страницы: 19:05, 4 июня 2019.


CoreOS
Coreos-wordmark-horiz-color.png
Линейка ОС Unix-like
Исходный код открытый
Дата первого релиза 3 октября 2013
Последний релиз 1298.5.0[1] / 28 February 2017 года; 5 years ago (2017-02-28)
Доступно в английский
Ядро (тип) монолитное Linux kernel
Лицензия Apache License 2.0
Официальный веб-сайт coreos.com

CoreOS — это операционная система с открытым исходным кодом на базе Linux для построения легко и гибко масштабируемых кластеров. В качестве операционной системы CoreOS предоставляет лишь минимальную функциональность, необходимую для развертывания приложений внутри программных контейнеров, средства обнаружения сервисов и передачи настроек. CoreOS имеет минималистичный дистрибутив (136Мб), основан на ChromeOS, который в свою очередь базируется на Gentoo.

CoreOS можно разделить на следующие части:

  • Systemd — управляет локальными службами на машинах кластера
  • Docker — обеспечивает изоляцию служб, но его использование, в принципе, не обязательно
  • Etcd — распределенно хранит конфигурацию кластера
  • Fleet — обеспечивает распределенное управление службами («надстройка» над systemd)

Описание

В CoreOS нет пакетного менеджера, все устанавливаемые приложения должны работать внутри собственных контейнеров, которые реализованы с помощью Docker на базе Linux Containers (LXC). LXC позволяет виртуализировать несколько независимых Linux контейнеров в рамках одного компьютера с Linux. Разделение ресурсов производится между несколькими программами пользовательского уровня без использования гипервизоров и полноценных виртуальных машин. Реализация использует подсистему ядра cgroups для изоляции, учёта и ограничения ресурсов (использование процессора, памяти, дискового и сетевого ввода-вывода и т. п.) для группы процессов. В качестве демона инициализации (init) в CoreOS используется systemd, тесно интегрированный с сервисами CoreOS.

Обновления

В качестве меры повышения безопасности и надежности, CoreOS использует FastPatch — схему с двумя корневыми файловыми системами, одна из которых является рабочей и защищена от записи. Обновления устанавливаются на вторую файловую систему, которая становится рабочей после перезагрузки или исполнения kexec. Таким образом обеспечивается возможность быстро вернуться к предыдущей версии. Каждый раздел может быть криптографически подписан для повышения безопасности. Изменяемая часть файловой иерархии хранится на разделе «state», который занимает все оставшееся дисковое пространство.

Система распределения обновлений CoreOS основана на открытом проекте компании Google Omaha. Для управления обновлениями кластеров CoreOS предоставляет веб-интерфейс CoreUpdate, который позволяет делить узлы кластера на группы с различными политиками обновления, предоставляет статистику по версиям, распределяет обновления.

Инфраструктура для кластеров

На каждом компьютере кластера работает демон etcd, который позволяет обновлять настройки узлов. Взаимодействие с etcd осуществляется с помощью API на базе JSON и протокола HTTP, либо через утилиту командной строки etcdctl . Демон fleet управляет программами systemd на уровне всего кластера. Взаимодействие с ним осуществляется с помощью утилиты fleetctl. Данные между узлами передаются поверх SSH туннелей. Оба демона etcd и fleet написаны на языке Golang(Go) и распространяются под открытой лицензией Apache License 2.0.

Установка

CoreOS можно установить различными способами. Но для экспериментальных целей проще всего через Vagrant:

1. Установите Git, VirtualBox, затем Vagrant последних версий.
2. Зайдите в папку, переименуйте там файл user-data.sample в user-data, config.rb.sample в config.rb. 
3. Зайдите на discovery.etcd.io/new, скопируйте в буфер появившийся URL, раскомментируйте строчку с инструкцией discovery в user-data и замените там URL.
4. Зайдите в папку и выполните там vagrant up.
5. Дождитесь скачивания базового образа.
6. Выполните vagrant ssh. 

Установка в VirtualBox (linux) Данный скрипт основан на официальной инструкции по установке

#!/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

Примечания

Ссылки

  • Github [Электронный ресурс]: Веб-сервис для хостинга IT-проектов и их совместной разработки / Дата обращения: 24.12.2016. — Режим доступа: https://coreos.com/docs/ CoreOS documentation.
  • Github [Электронный ресурс]: Веб-сервис для хостинга IT-проектов и их совместной разработки / Дата обращения: 24.12.2016. — Режим доступа: http://www.sebastien-han.fr/blog/2013/09/03/first-glimpse-at-coreos/ First glimpse at CoreOS.
  • CBS Interactive [Электронный ресурс]: Электронный журнал, который издаётся компанией CBS Interactive / Дата обращения: 24.12.2016. — Режим доступа: http://www.zdnet.com/coreos-linux-for-the-cloud-and-the-datacenter-7000031137/ CoreOS: Linux for the cloud and the datacenter.
  • Github [Электронный ресурс]: Веб-сервис для хостинга IT-проектов и их совместной разработки / Дата обращения: 24.12.2016. — Режим доступа: https://github.com/coreos/fleet/blob/master/Documentation/architecture.md CoreOS fleet architecture.
  • Google [Электронный ресурс]: Служба хостинга сайтов и web-приложений на серверах Google / Дата обращения: 24.12.2016. — Режим доступа: http://googlecloudplatform.blogspot.com/2014/05/official-coreos-images-are-now-available-on-google-compute-engine.html Official CoreOS images available on Google Compute Engine.
  • Github [Электронный ресурс]: Веб-сервис для хостинга IT-проектов и их совместной разработки / Дата обращения: 24.12.2016. — Режим доступа: https://github.com/coreos CoreOS source code on GitHub.
  • Github [Электронный ресурс]: Веб-сервис для хостинга IT-проектов и их совместной разработки / Дата обращения: 24.12.2016. — Режим доступа: https://github.com/coreos/etcd etcd source code on GitHub.
  • Github [Электронный ресурс]: Веб-сервис для хостинга IT-проектов и их совместной разработки / Дата обращения: 24.12.2016. — Режим доступа: https://github.com/coreos/fleet fleet source code on GitHub.