Как стать автором
Обновить
1301.79
OTUS
Цифровые навыки от ведущих экспертов

Расширяем возможности Ansible: развертывание Docker

Уровень сложностиПростой
Время на прочтение7 мин
Количество просмотров16K

В предыдущих статьях мы уже рассмотрели установку Ansible и подготовку шаблонов для автоматизации работы с управляемыми узлами. В этой статье мы продолжим обсуждать те возможности, которые есть у Ansible, и рассмотрим развертывание Docker.

Управление установкой Docker с помощью Ansible позволяет вам один раз определить свою инфраструктуру и использовать ее везде, где и как вам нужно. Так, с помощью плейбуков мы можем легко развернуть необходимые нам настройки в любой целевой архитектуре.

При этом и Docker имеет множество преимуществ. Отличительной чертой контейнеров является та простота, с которой их можно как развернуть, так и удалить. При этом, в контейнерах могут работать достаточно сложные приложения, для которых важна правильная последовательность загрузки их компонентов. 

Далее перейдем к подготовке плейбука для установки и базовой настройки Docker. И начнем мы со списка задач, которые необходимо выполнить.

У любой задачи в Ansible есть имя, выполняемое действие, например apt, service или ansible.builtin.group, и в некоторых случаях циклы. Также действия содержат необходимые для их работы параметры.

Установка зависимостей

Начинать процесс развертывания мы будем с установки необходимых зависимостей, и в частности, нам потребуются следующие пакеты:

  • apt-transport-https

  • ca-certificates

  • curl

  • gnupg-agent

  • software-properties-common

Для их установки, создадим задачу install dependencies следующего вида в блоке tasks:

tasks:
  - name: install dependencies
      apt:
        name: "{{item}}"
        state: present
        update_cache: yes
      loop:
        - apt-transport-https
        - ca-certificates
        - curl
        - gnupg-agent
        - software-properties-common

Обратите внимание на параметр state, которое имеет значение present. Это состояние, в которое требуется привести модуль. То есть, Ansible должен убедиться, что этот пакет есть, либо доустановить его.

Ключи и репозитории

Далее нам необходимо добавить ключ APT в систему. Это необходимо для установки определенных репозиториев Ubuntu. Для этого создадим следующую задачу:

      - name: add GPG key
          apt_key:
            url: https://download.docker.com/linux/ubuntu/gpg
            state: present

Затем нам необходимо добавить репозиторий docker в apt. Это потребуется для установки компонентов Docker на сервер. Задача будет иметь следующий вид:

    - name: add docker repository to apt
        apt_repository:
          repo: deb https://download.docker.com/linux/ubuntu bionic stable
          state: present

Установка Docker

Ну а следующая задача предназначена для непосредственной установки Docker. Как видно здесь у нас тоже присутствует цикл, в котором мы поочередно извлекаем наименования необходимых для установки компонентов.

    - name: install docker
        apt:
          name: "{{item}}"
          state: latest
          update_cache: yes
        loop:
          - docker-ce
          - docker-ce-cli
          - containerd.io

Проверка установки

Если все предыдущие действия мы могли реализовать с помощью скриптов, вообще не прибегая к помощи Ansible, и при этом количество строк кода увеличилось бы не сильно, то следующие действия по проверке корректности установки показывают наглядно удобство использования плейбуков Ansible.

В первой задаче мы проверяем запущен ли Docker:

    - name: check docker is active
        service:
          name: docker
          state: started
          enabled: yes

Далее проверяем наличие группы docker в системе:

    - name: Ensure group "docker" exists
        ansible.builtin.group:
          name: docker
          state: present

На данный момент у нас уже должен быть установлен Docker. Но сейчас мы можем запускать команды только с помощью sudo, что нежелательно. Поэтому мы создаем следующую задачу добавления ubuntu в группу docker, которая добавляет пользователя ubuntu - нашего запущенного пользователя - в группу docker:

    - name: adding ubuntu to docker group
        user:
          name: ubuntu
          groups: docker
          append: yes

Теперь Docker установлен и мы можем выполнять команды без sudo. Но для полноты картины нам не хватает еще одного компонента – Docker Composer. Для его установки необходимо выполнить следующие задачи:

    - name: Install docker-compose
        get_url:
            url: https://github.com/docker/compose/releases/download/1.29.2/docker-compose-Linux-x86_64
            dest: /usr/local/bin/docker-compose
            mode: 'u+x,g+x'

Сначала мы скачали нужные файлы и теперь нам необходимо сменить владельца, группу и права доступа:

    - name: Change file ownership, group and permissions
        ansible.builtin.file:
          path: /usr/local/bin/docker-compose
          owner: ubuntu
          group: ubuntu

На этом тему настройки задач можно считать завершенной.

Но для того, чтобы наш плейбук был полностью работоспособен, необходимо в его начало добавить параметр hosts, значение которого равно all, означает, что playbook будет выполняться на всех доступных хостах.

Затем у нас есть параметр remote_user: это пользователь, которого мы используем для подключения к компьютеру по SSH, скажем, ubuntu, но это может быть любой пользователь с доступом по SSH и надлежащими разрешениями. И в третьей строке у нас будет параметр become со значением true. Это означает что мы собираемся выполнять различные команды с помощью sudo. Это необходимо для установки пакетов, изменения разрешений, групп и т.д.

    - hosts: all
        remote_user: ubuntu
        become: true

Теперь давайте посмотрим, что же у нас получилось в итоге. Далее приводится все содержимое файла main.yaml с плейбуком для установки Docker.

---
- hosts: all
  remote_user: ubuntu
  become: true
  tasks:
    - name: install dependencies
      apt:
        name: "{{item}}"
        state: present
        update_cache: yes
      loop:
        - apt-transport-https
        - ca-certificates
        - curl
        - gnupg-agent
        - software-properties-common
    - name: add GPG key
      apt_key:
        url: https://download.docker.com/linux/ubuntu/gpg
        state: present
    - name: add docker repository to apt
      apt_repository:
        repo: deb https://download.docker.com/linux/ubuntu bionic stable
        state: present
    - name: install docker
      apt:
        name: "{{item}}"
        state: latest
        update_cache: yes
      loop:
        - docker-ce
        - docker-ce-cli
        - containerd.io
    - name: check docker is active
      service:
        name: docker
        state: started
        enabled: yes
    - name: Ensure group "docker" exists
      ansible.builtin.group:
        name: docker
        state: present
    - name: adding ubuntu to docker group
      user:
        name: ubuntu
        groups: docker
        append: yes
    - name: Install docker-compose
      get_url:
        url: https://github.com/docker/compose/releases/download/1.29.2/docker-compose-Linux-x86_64
        dest: /usr/local/bin/docker-compose
        mode: 'u+x,g+x'
    - name: Change file ownership, group and permissions
      ansible.builtin.file:
        path: /usr/local/bin/docker-compose
        owner: ubuntu
        group: ubuntu 

Проверяем

Для проверки работы данного плейбука необходимо выполнить следующую команду:

ansible-playbook -i inventoгдry playbooks/main.yaml

В результате выполнения на целевых машинах должны быть установлены компоненты Docker и выполнены все необходимые настройки.

Заключение

В этой небольшой статье рассмотрен пример развертывания полновесного приложения и необходимых компонентов средствами Ansible. В следующей статье мы поговорим о расширении возможностей Ansible c помощью Ansible Vault.

А прямо сейчас хочу порекомендовать вам бесплатный урок курса DevOps Практики и инструменты, где мы рассмотрим различные типы анализа исходного кода (SAST/SCA/DAST/IAST/RASP) и поговорим об инструментах, позволяющих внедрить их в ваш CI/CD пайплайн.

Теги:
Хабы:
Всего голосов 7: ↑5 и ↓2+5
Комментарии12

Публикации

Информация

Сайт
otus.ru
Дата регистрации
Дата основания
Численность
101–200 человек
Местоположение
Россия
Представитель
OTUS