add homework 5.2

This commit is contained in:
2022-04-27 09:48:56 +07:00
parent fa0db0f0c9
commit 4db8d0e5cb
3 changed files with 133 additions and 4 deletions

View File

@@ -20,3 +20,4 @@
* [4.2. Использование Python для решения типовых DevOps задач](/src/homework/04-script/4.2)
* [4.3. Языки разметки JSON и YAML](/src/homework/04-script/4.3)
* [5.1. Основы виртуализации](/src/homework/05-virtualization/5.1)
* [5.2. Применение принципов IaaC в работе с виртуальными машинами](/src/homework/05-virtualization/5.2)

View File

@@ -0,0 +1,119 @@
Выполнение [домашнего задания](https://github.com/netology-code/virt-homeworks/blob/virt-11/05-virt-02-iaac/README.md)
по теме "5.2. Применение принципов IaaC в работе с виртуальными машинами".
## Q/A
### Задача 1
> Опишите своими словами основные преимущества применения на практике IaaC паттернов.
Основные преимущества применения IaaC паттернов:
1. Хранение всей конфигурации инфраструктуры под системой контроля версий. Это даёт множество приемуществ:
1. Версионирование конфигурации, что позволяет сравнивать версии, видеть развитие, отлавливать ошибки на код-ревью.
2. Хранение конфигурации в централизованном хранилище (например, `github`/`gitlab`/`bitbucket`)
3. Возможность коллаборации инженеров в работе над конфигурацией. То есть, возможность одновременно вносить доработки
в одну часть инфраструктуры одним человеком, и добавлять новые сервисы другим.
2. Возможность "прочитать" конфигурацию, чтобы понять, как она работает, а не выяснять это опытным путём.
3. Возможность тестирования конфигурации.
4. Возможность автоматизировать частично или полностью применение конфигурации к инфраструктуре.
> Какой из принципов IaaC является основополагающим?
Основополагающий принцип IaaC - это идемпотентность. То есть, применяя готовую конфигурацию к инфраструктуре
(например, развёртывание виртуальных машин) инженер будет получать один и тот же ожидаемый результат, который не будет меняться,
сколько бы попыток не было.
### Задача 2
> Чем Ansible выгодно отличается от других систем управление конфигурациями?
Самое главное преимущество `ansible` - это необходимость установки утилиты только на машине,
откуда необходимо запустить применение конфигурации. То есть, на физических/виртуальных машинах, где будут происходить действия
по настройке никаких дополнительных утилит устанавливать не нужно.
> Какой, на ваш взгляд, метод работы систем конфигурации более надёжный push или pull?
Принцип `push` более надёжный, так как для данного метода не нужно держать активным некий сервис,
который будет принимать и обрабатывать запросы клиентов на обновление конфигурации.
При этом построение развёртывания конфигурации по принципу `push` проще, чем построение гибридного подхода,
что повышает надёжность на первых этапах построения инфраструктуры.
### Задача 3
> Установить на личный компьютер:
> * VirtualBox
> * Vagrant
> * Ansible
>
> Приложить вывод команд установленных версий каждой из программ, оформленный в markdown.
```shell
virtualbox --help
Oracle VM VirtualBox VM Selector v6.1.32
(C) 2005-2022 Oracle Corporation
All rights reserved.
```
```shell
vagrant --version
Vagrant 2.2.19
```
```shell
ansible --version
ansible [core 2.12.4]
config file = /etc/ansible/ansible.cfg
configured module search path = ['~/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
ansible python module location = /usr/lib/python3/dist-packages/ansible
ansible collection location = ~/.ansible/collections:/usr/share/ansible/collections
executable location = /usr/bin/ansible
python version = 3.8.10 (default, Mar 15 2022, 12:22:08) [GCC 9.4.0]
jinja version = 2.10.1
libyaml = True
```
### Задача 4 (*)
> Воспроизвести практическую часть лекции самостоятельно.
> Создать виртуальную машину.
Для создания виртуальной машины используется уже готовый [`Vagrantfile`](/src/vagrant/Vagrantfile),
в который дополнительно добавлены команды необходимые для установки `docker`:
```
config.vm.provision "shell", inline: <<-SHELL
apt update
apt install -y ca-certificates \
curl \
gnupg \
lsb-release
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null
apt update
apt install -y docker-ce docker-ce-cli containerd.io
usermod -aG docker vagrant
SHELL
```
> Зайти внутрь ВМ, убедиться, что Docker установлен с помощью команды `docker ps`
```shell
vagrant ssh
Welcome to Ubuntu 20.04.3 LTS (GNU/Linux 5.4.0-91-generic x86_64)
<...>
vagrant@vagrant:~$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
vagrant@vagrant:~$ docker run --rm hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
2db29710123e: Pull complete
Digest: sha256:10d7d58d5ebd2a652f4d93fdd86da8f265f5318c6a73cc5b6a9798ff6d2b2e67
Status: Downloaded newer image for hello-world:latest
Hello from Docker!
<...>
```

View File

@@ -64,10 +64,19 @@ Vagrant.configure("2") do |config|
# Enable provisioning with a shell script. Additional provisioners such as
# Ansible, Chef, Docker, Puppet and Salt are also available. Please see the
# documentation for more information about their specific syntax and use.
# config.vm.provision "shell", inline: <<-SHELL
# apt-get update
# apt-get install -y apache2
# SHELL
config.vm.provision "shell", inline: <<-SHELL
apt update
apt install -y ca-certificates \
curl \
gnupg \
lsb-release
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null
apt update
apt install -y docker-ce docker-ce-cli containerd.io
usermod -aG docker vagrant
SHELL
# for homework 3.5
# config.vm.provider :virtualbox do |vb|