21 post tagged

coreos

Ctrl + ↑ Later

Разработал для этого очень простой рецепт по мотивам предыдущей заметки:


- name: install docker-compose to coreos
  hosts: coreos
  gather_facts: no
  tasks:
    - name: install docker-compose
      become: yes
      file: path=/opt/bin state=directory mode=0755

    - name: get docker-compose url
      shell: curl -s https://api.github.com/repos/docker/compose/releases/latest | jq -r '.assets[].browser_download_url | select(contains("Linux") and contains("x86_64"))'
      register: url_info

    - name: fetch docker-compose
      become: yes
      get_url: url="{{url_info.stdout}}" dest=/opt/bin/docker-compose mode=0755
<code>

скрипт найдет url и скачает самую свежую версию и установит аттрибуты для корректного запуска из /opt/bin

напоминаю, /opt/bin переживает перезагрузки и является persistent каталогом в CoreOS.
ansiblecoreos

предварительно перейдя в sudo -s

curl -sS https://gist.githubusercontent.com/marszall87/ee7c5ea6f6da9f8968dd/raw/9f3a037ea0f294bdf5d835fa72cfadf0b95e4ca3/docker-compose-install.sh | bash

Сразу же после загрузки CoreOS из сетевого ISO установки на HDD не происходит. Для этого необходимы ручные манипуляции.
Вот мой достаточно простой плейбук coreos_install.yml для установки CoreOS на HDD в Xen Server.

- name: CoreOS Xen install
  hosts: coreos
  gather_facts: no
  become: yes
  tasks:
    - name: install coreos on hdd
      raw: coreos-install -d /dev/xvda -o xen -C stable

    - name: restart
      raw: reboot

запускаем ansible-playbook coreos_install.yml выбирая нужные хосты в inventory

coreosxen

Ведь для использования Ansible необходимо иметь python интерпретатор

"module_stdout": "/bin/sh: /usr/bin/python: No such file or directory\r\n",

к счастью у ansible есть режим так называемой raw работы, без использования интерпретатора python, который и даст установить python и необходимые модули.

запускаем

ansible-galaxy install defunctzombie.coreos-bootstrap -p ./roles

и создаем рецепт bootstrap.yml

- hosts: coreos
  gather_facts: False
  roles:
    - defunctzombie.coreos-bootstrap

и запускаем для нужного хоста coreos

ansible-playbook bootstrap.yml

это загрузит соответствующую версию мини-питона и даст ansible возможность выполняться на хосте как обычно.

Я использую macOS, поэтому пришлось ствить ansible из pip пакетов командой

sudo pip install ansible
pip install --upgrade setuptools --user python
pip install --upgrade pyasn1 --user python

Update:
в новой версии ansible вместо пакета docker предлагается использовать docker-container и docker-image, поэтому https://coreos.com/blog/managing-coreos-with-ansible/ немного устарел.

Вот мой работоспособный site.yml

- name: Nginx Example
  hosts: coreos
  tasks:
    ##- name: Start etcd
      #service: name=etcd.service state=started

    - name: Install docker-py
      pip: name=docker-py executable=/home/core/bin/pip

    - name: Install PyYAML
      pip: name=PyYAML executable=/home/core/bin/pip

    - name: Install docker-compose
      pip: name=docker-compose executable=/home/core/bin/pip

    - name: launch nginx container
      docker_container:
        name: "nginx-proxy"
        image: "jwilder/nginx-proxy"
        ports: "80:80"
        restart_policy: always
        state: started
        volumes:
          - /var/run/docker.sock:/tmp/docker.sock:ro

    - name: copy docker-compose.yml
      copy: src=./Sites/it-premium/docker-compose.prod.yml dest=/home/core/it-premium/docker-compose.yml
      tags: deploy

    - name: copy sqlite
      copy: src=./Sites/it-premium/sqlite dest=/home/core/it-premium/ directory_mode=yes mode=0644
      tags: deploy

    - name: launch it-premium docker-compose with 2 containers
      docker_service:
        project_src: it-premium
        build: no
      register: output

    - debug: var=output
    - assert:
        that: "not output.changed "

здесь я копирую docker-compose.yml подготовленный для продакшена и sqlite3 продакшен базу из бекапа.

ansiblecoreos

Для запуска блога егеи можете использовать image: mprokopov/egeya-apache.
Мой docker-compose.yml примерно такой:

db:
  image: mysql:5.6
  environment:
    - MYSQL_ROOT_PASSWORD=egenanan
    - MYSQL_DATABASE=egenanana
  volumes:
    - ./data:/docker-entrypoint-initdb.d # здесь лежит SQL дамп от предыдущей инсталляции

egeya:
   image: mprokopov/egeya-apache
   environment:
     - VIRTUAL_HOST=blog.it-premium.com.ua
   links:
     - db
   volumes:
     - ./themes:/var/www/html/themes
     - ./pictures:/var/www/html/pictures

Внутри apache2 + php запущенный на debian:latest, mysql отдельным контейнером.

Хостовая ОС — CoreOS

coreosdocker
curl -L `curl -s https://api.github.com/repos/docker/compose/releases/latest | jq -r '.assets[].browser_download_url | select(contains("Linux") and contains("x86_64"))'` > /opt/bin/docker-compose
coreosdocker

создаем файл /etc/systemd/network/000-static.network с содержимым

[Match]
Name=eth1

[Network]
Address=95.67.20.219/28
Gateway=95.67.20.217

и для DCHP /etc/systemd/network/000-dhcp.network

[Match]
Name=eth0

[Network]
DHCP=yes

[Route]
Gateway=192.168.160.1
Destination=192.168.0.0/16

инициализация происходит в алфавитном порядке

не забываем сделать

sudo systemctl restart systemd-networkd

для перезапуска интерфейсов.

coreosdocker

docker должен автоматически обновиться при ребуте, или мануально

update_engine_client -update
coreosdocker
  1. Обязательно в визарде в файле установки указать свой public key.
  1. После загрузки посмотреть выданный IP, зайти по ssh core@ip
    и выполнить
sudo coreos-install -d /dev/xvda -o xen -C stable

после чего выполнить перезагрузку и CoreOS загрузится с жесткого диска.

coreosxen
Ctrl + ↓ Earlier