Како да се користи Ansible за да се инсталира и постави Docker на Ubuntu 18.04


Вовед

Автоматизацијата на серверот сега игра суштинска улога во администрирањето на системите, поради природата за еднократна употреба на модерните апликациски средини. Ansible вообичаено се користат за да се насочи процесот на автоматизирање на поставувањето на серверот преку воспоставување стандардни процедури за нови сервери, истовремено намалувајќи ја човечката грешка поврзана со рачно поставување.

Ansible нуди едноставна архитектура која не бара специјален софтвер да се инсталира на јазлите. Исто така, обезбедува робустен сет на функции и вградени модули кои го олеснуваат пишувањето скрипти за автоматизација.

Овој водич објаснува како да се користи Ansible за автоматизирање на чекорите содржани во нашиот водич за Docker е апликација која го поедноставува процесот на управување со контејнери, процеси изолирани од ресурси кои се однесуваат на сличен начин како виртуелните машини, но се попреносливи, попогодни за ресурсите и повеќе зависат од оперативниот систем домаќин.

Предуслови

За да го извршите автоматското поставување обезбедено од Playbook во ова упатство, ќе ви требаат:

  • Еден контролен јазол Ansible: машина на Ubuntu 18.04 со инсталирана и конфигурирана Ansible за поврзување со вашите Ansible хостови користејќи SSH клучеви. Осигурајте се дека контролниот јазол има редовен корисник со дозволи за sudo и овозможен заштитен ѕид, како што е објаснето во нашиот Како да се инсталира и конфигурира Ansible на Ubuntu 18.04.
  • Еден или повеќе Ansible Host: еден или повеќе оддалечени Ubuntu 18.04 сервери претходно поставени според водичот за Како да се користи Ansible за автоматизирање на почетното поставување на серверот на Ubuntu 18.04.

Пред да продолжите, прво треба да бидете сигурни дека вашиот контролен јазол Ansible може да се поврзе и да извршува команди на вашиот Ansible домаќин(и). За тест за поврзување, проверете го Чекор 3 од Како да инсталирате и конфигурирате Ansible на Ubuntu 18.04.

Што прави оваа Playbook?

Оваа книга за игри Ansible обезбедува алтернатива за рачно извршување на постапката наведена во нашиот водич за Како да се инсталира и користи Docker на Ubuntu 18.04. Поставете ја вашата Playbook еднаш и користете ја за секоја инсталација потоа.

Извршувањето на оваа книга ќе ги изврши следните дејства на вашите Ansible хостови:

  1. Инсталирајте го aptitude, што го претпочита Ansible како алтернатива на менаџерот на пакети apt.
  2. Инсталирајте ги потребните системски пакети.
  3. Инсталирајте го клучот Docker GPG APT.
  4. Додајте го официјалното складиште на Docker на изворите apt.
  5. Инсталирајте го Docker.
  6. Инсталирајте го модулот Python Docker преку pip.
  7. Повлечете ја стандардната слика наведена со default_container_image од Docker Hub.
  8. Создадете го бројот на контејнери дефинирани со променливата container_count, секој користејќи ја сликата дефинирана со default_container_image и извршете ја командата дефинирана во default_container_command во секој нов контејнер.

Откако книгата за игри ќе заврши со работа, ќе имате креирани голем број контејнери врз основа на опциите што сте ги дефинирале во вашите конфигурациски променливи.

За почеток, најавете се на корисник со овозможен sudo на вашиот Ansible контролен јазол сервер.

Чекор 1 - Подготовка на вашата Playbook

Датотеката playbook.yml е местото каде што се дефинирани сите ваши задачи. Задачата е најмалата единица на дејствување што можете да ја автоматизирате користејќи Ansible Playbook. Но, прво, креирајте ја вашата датотека за играње користејќи го претпочитаниот уредувач на текст:

  1. nano playbook.yml

Ова ќе отвори празна YAML-датотека. Пред да почнете да додавате задачи во вашата книга за игри, започнете со додавање на следново:

---
- hosts: all
  become: true
  vars:
    container_count: 4
    default_container_name: docker
    default_container_image: ubuntu
    default_container_command: sleep 1

Речиси секоја книга за игри што ќе ја сретнете ќе започне со декларации слични на оваа. hosts изјавува кои сервери ќе ги насочува контролниот јазол Ansible со оваа книга. become наведува дали сите команди ќе се вршат со зголемени root привилегии.

vars ви овозможува да складирате податоци во променливи. Ако одлучите да ги промените овие во иднина, ќе треба само да ги уредувате овие поединечни линии во вашата датотека. Еве кратко објаснување за секоја променлива:

  • counter_count: Бројот на контејнери што треба да се создадат.
  • default_container_name: Стандардно име на контејнер.
  • default_container_image: Стандардна слика на Docker што ќе се користи при креирање контејнери.
  • default_container_command: Стандардна команда за извршување на нови контејнери.

Забелешка: ако сакате да ја видите датотеката со плејбук во нејзината конечна завршена состојба, префрлете се на чекор 5. YAML-датотеките може да бидат особени со нивната структура на вовлекување, па можеби ќе сакате повторно да ја проверите вашата книга за игри штом ќе Ги додадов сите ваши задачи.

Чекор 2 - Додавање задачи за инсталација на пакети во вашата Playbook

Стандардно, задачите се извршуваат синхроно од Ansible со редослед од врвот до дното во вашата книга за игри. Ова значи дека подредувањето на задачите е важно и можете безбедно да претпоставите дека една задача ќе заврши со извршување пред да започне следната задача.

Сите задачи во оваа книшка може да стојат сами и повторно да се користат во другите ваши книги.

Додајте ги вашите први задачи за инсталирање aptitude, алатка за поврзување со менаџерот на пакети на Linux и инсталирање на потребните системски пакети. Ansible ќе обезбеди овие пакети секогаш да се инсталираат на вашиот сервер:

  tasks:
    - name: Install aptitude
      apt:
        name: aptitude
        state: latest
        update_cache: true

    - name: Install required system packages
      apt:
        pkg:
          - apt-transport-https
          - ca-certificates
          - curl
          - software-properties-common
          - python3-pip
          - virtualenv
          - python3-setuptools
        state: latest
        update_cache: true

Овде, го користите apt вградениот модул Ansible за да го насочите Ansible да ги инсталира вашите пакети. Модулите во Ansible се кратенки за извршување на операции кои инаку би требало да ги извршувате како необработени баш команди. Ansible безбедно се враќа на apt за инсталирање пакети ако aptitude не е достапен, но Ansible историски претпочита aptitude.

Можете да додавате или отстранувате пакети по ваш вкус. Ова ќе осигури дека сите пакети не само што се присутни, туку и на најновата верзија и ќе бидат направени откако ќе се повика ажурирањето со apt.

Чекор 3 - Додавање задачи за инсталација на Docker во вашата Playbook

Вашата задача ќе ја инсталира најновата верзија на Docker од официјалното складиште. Додаден е клучот Docker GPG за да се потврди преземањето, официјалното складиште се додава како нов извор на пакети и ќе се инсталира Docker. Дополнително, ќе се инсталира и Docker модулот за Python:

    - name: Add Docker GPG apt Key
      apt_key:
        url: https://download.docker.com/linux/ubuntu/gpg
        state: present

    - name: Add Docker Repository
      apt_repository:
        repo: deb https://download.docker.com/linux/ubuntu bionic stable
        state: present

    - name: Update apt and install docker-ce
      apt:
        name: docker-ce
        state: latest
        update_cache: true

    - name: Install Docker Module for Python
      pip:
        name: docker

Ќе видите дека вградените Ansible модули apt_key и apt_repository прво се насочени кон правилните URL-адреси, а потоа имаат задача да се осигураат дека се присутни. Ова овозможува инсталирање на најновата верзија на Docker, заедно со користење на pip за инсталирање на модулот за Python.

Чекор 4 - Додавање на задачи за слика и контејнер во вашата Playbook

Вистинското создавање на вашите Docker контејнери започнува овде со повлекување на саканата слика на Docker. Стандардно, овие слики доаѓаат од официјалниот Docker Hub. Користејќи ја оваа слика, контејнерите ќе се креираат според спецификациите поставени од променливите декларирани на врвот на вашата книга за игри:

    - name: Pull default Docker image
      docker_image:
        name: "{{ default_container_image }}"
        source: pull

    - name: Create default containers
     .docker_container:
        name: "{{ default_container_name }}{{ item }}"
        image: "{{ default_container_image }}"
        command: "{{ default_container_command }}"
        state: present
      with_sequence: count={{ container_count }}

docker_image се користи за да се повлече сликата на Docker што сакате да ја користите како основа за вашите контејнери. docker_container ви овозможува да ги одредите спецификите на контејнерите што ги креирате, заедно со командата што сакате да ги пренесете.

with_sequence е Ansible начин за креирање циклус, и во овој случај ќе го заокружи создавањето на вашите контејнери според бројот што сте го навеле. Ова е основна јамка за броење, така што променливата item овде дава број што ја претставува тековната итерација на јамката. Овој број се користи овде за именување на вашите контејнери.

Чекор 5 - Прегледајте ја вашата комплетна Playbook

Вашата книга за игри треба да изгледа приближно како следново, со мали разлики во зависност од вашите прилагодувања:

---
- hosts: all
  become: true
  vars:
    container_count: 4
    default_container_name: docker
    default_container_image: ubuntu
    default_container_command: sleep 1d

  tasks:
    - name: Install aptitude
      apt:
        name: aptitude
        state: latest
        update_cache: true

    - name: Install required system packages
      apt:
        pkg:
          - apt-transport-https
          - ca-certificates
          - curl
          - software-properties-common
          - python3-pip
          - virtualenv
          - python3-setuptools
        state: latest
        update_cache: true

    - name: Add Docker GPG apt Key
      apt_key:
        url: https://download.docker.com/linux/ubuntu/gpg
        state: present

    - name: Add Docker Repository
      apt_repository:
        repo: deb https://download.docker.com/linux/ubuntu bionic stable
        state: present

    - name: Update apt and install docker-ce
      apt:
        name: docker-ce
        state: latest
        update_cache: true

    - name: Install Docker Module for Python
      pip:
        name: docker

    - name: Pull default Docker image
      docker_image:
        name: "{{ default_container_image }}"
        source: pull

    - name: Create default containers
      docker_container:
        name: "{{ default_container_name }}{{ item }}"
        image: "{{ default_container_image }}"
        command: "{{ default_container_command }}"
        state: present
      with_sequence: count={{ container_count }}

Слободно модифицирајте ја оваа книга за најдобро да одговара на вашите индивидуални потреби во рамките на вашиот сопствен работен тек. На пример, можете да го користите модулот docker_container за да поставите контејнерски мрежи.

Забелешка: Ова е нежен потсетник да внимавате на вашите вдлабнатини. Ако наидете на грешка, ова е многу веројатно виновникот. YAML предлага користење на 2 празни места како вовлекување, како што беше направено во овој пример.

Откако ќе бидете задоволни со вашата книга за игри, можете да излезете од уредувачот на текст и да зачувате.

Чекор 6 - Вклучување на вашата Playbook

Сега сте подготвени да ја извршите оваа книга на еден или повеќе сервери. Повеќето книги за репродукција се стандардно конфигурирани да се извршуваат на секој сервер во вашиот инвентар, но вие ќе го одредите вашиот сервер овој пат.

За да ја извршите Playbook само на server1, поврзувајќи се како sammy, можете да ја користите следнава команда:

  1. ansible-playbook playbook.yml -l server1 -u sammy

Знамето -l го одредува вашиот сервер, а знамето -u одредува кој корисник да се најави на оддалечениот сервер. Ќе добиете излез сличен на овој:

Output
. . . changed: [server1] TASK [Create default containers] ***************************************************************************************************************** changed: [server1] => (item=1) changed: [server1] => (item=2) changed: [server1] => (item=3) changed: [server1] => (item=4) PLAY RECAP *************************************************************************************************************************************** server1 : ok=9 changed=8 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0

Забелешка: за повеќе информации за тоа како да се стартуваат книгите за играње Ansible, проверете го нашиот Водич за мамење на Ansible.

Ова покажува дека поставувањето на вашиот сервер е завршено! Вашиот излез не мора да биде сосема ист, но важно е да имате нула неуспеси.

Кога книгата за игри ќе заврши со работа, најавете се преку SSH на серверот обезбеден од Ansible за да проверите дали контејнерите се успешно креирани.

Најавете се на далечинскиот сервер со:

  1. ssh sammy@your_remote_server_ip

И наведете ги вашите Docker контејнери на оддалечениот сервер:

  1. sudo docker ps -a

Треба да видите излез сличен на овој:

Output
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES a3fe9bfb89cf ubuntu "sleep 1d" 5 minutes ago Created docker4 8799c16cde1e ubuntu "sleep 1d" 5 minutes ago Created docker3 ad0c2123b183 ubuntu "sleep 1d" 5 minutes ago Created docker2 b9350916ffd8 ubuntu "sleep 1d" 5 minutes ago Created docker1

Ова значи дека контејнерите дефинирани во Playbook се успешно креирани. Бидејќи ова беше последната задача во Playbook, тоа исто така потврдува дека книгата за игри е целосно извршена на овој сервер.

Заклучок

Автоматизирањето на вашата инфраструктура не само што може да ви заштеди време, туку помага и да се осигурате дека вашите сервери ќе следат стандардна конфигурација што може да се прилагоди на вашите потреби. Со дистрибуираната природа на современите апликации и потребата за конзистентност помеѓу различните средини за поставување, автоматизацијата како оваа стана централна компонента во развојните процеси на многу тимови.

Во ова упатство, покажавте како да го користите Ansible за автоматизирање на процесот на инсталирање и поставување на Docker на оддалечен сервер. Бидејќи секој поединец обично има различни потреби кога работи со контејнери, ве охрабруваме да ја проверите официјалната документација на Ansible за повеќе информации и да користите случаи на модулот docker_container Ansible.

Ако сакате да вклучите други задачи во оваа книга за понатамошно прилагодување на почетното поставување на серверот, погледнете го нашиот воведен водич за Ansible Управување со конфигурација 101: Пишување на Ansible Playbooks.