Skip to content
Open

lab5 #1213

Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 16 additions & 0 deletions .github/pull_request_template.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
## Goal
Выполнение Lab 1

## Changes
- submissions/lab1.md
- .github/pull_request_template.md
- SSH signing configured

## Testing
- go run ./app
- curl http://localhost:8080/health

## Checklist
- [x] Title is a clear sentence
- [x] Commits are signed
- [x] submissions/lab1.md updated
6 changes: 4 additions & 2 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -53,11 +53,13 @@ Thumbs.db
.claude/

# NOTE: deliberately NOT ignored, because students commit them as lab evidence:
# submissions/labN.md (lab reports)
# .github/workflows/*.yml (Lab 3 CI)
submissions/labN.md (lab reports)
.github/workflows/*.yml (Lab 3 CI)
# Dockerfile, compose.yaml (Lab 6)
# ansible/ (Lab 7)
# monitoring/ (Lab 8)
# *.sbom.cdx.json, zap-*.html/json, trivy-*.txt (Lab 9 scan evidence)
# flake.nix, flake.lock (Lab 11)
# wasm/main.go, spin.toml, go.sum (Lab 12)

.vagrant/
9 changes: 9 additions & 0 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
FROM golang:1.24-alpine AS builder
WORKDIR /app
COPY app/ .
RUN go mod download && go build -o /tmp/qn .

FROM alpine:latest
COPY --from=builder /tmp/qn /usr/local/bin/qn
EXPOSE 8080
CMD ["/usr/local/bin/qn"]
42 changes: 42 additions & 0 deletions Vagrantfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
# -*- mode: ruby -*-
# vi: set ft=ruby :

Vagrant.configure("2") do |config|
# Box: Ubuntu 24.04 LTS
# config.vm.box = "ubuntu/noble64"
config.vm.box = "ubuntu/jammy64"

# Hostname
config.vm.hostname = "quicknotes-dev"

# Port forwarding: host 18080 -> guest 8080, only localhost
config.vm.network "forwarded_port", guest: 8080, host: 18080, host_ip: "127.0.0.1"

# Synced folder: ./app -> /home/vagrant/app
# config.vm.synced_folder "./app", "/home/vagrant/app"
config.vm.synced_folder "./app", "/home/vagrant/app", type: "rsync", rsync__auto: true, rsync__exclude: [".git/", ".vagrant/"]

# Resources: 2 vCPU, 1024 MB RAM
config.vm.provider "virtualbox" do |vb|
vb.memory = "1024"
vb.cpus = 2
end

# Provisioning: install Go 1.24.x
config.vm.provision "shell", inline: <<-SHELL
apt-get update
apt-get install -y wget git

# Install Go 1.24.4 (фиксированная версия)
wget -q https://go.dev/dl/go1.24.4.linux-amd64.tar.gz
tar -C /usr/local -xzf go1.24.4.linux-amd64.tar.gz
rm go1.24.4.linux-amd64.tar.gz

# Add Go to PATH
echo 'export PATH=$PATH:/usr/local/go/bin' >> /home/vagrant/.bashrc
echo 'export PATH=$PATH:/usr/local/go/bin' >> /root/.bashrc

# Verify Go installation
/usr/local/go/bin/go version
SHELL
end
1 change: 1 addition & 0 deletions demo.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
NEW CHANGE FOR DEMO
Binary file added submissions/image-1.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added submissions/image-10.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added submissions/image-11.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added submissions/image-12.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added submissions/image-13.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added submissions/image-14.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added submissions/image-15.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added submissions/image-16.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added submissions/image-17.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added submissions/image-18.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added submissions/image-19.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added submissions/image-2.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added submissions/image-3.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added submissions/image-4.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added submissions/image-5.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added submissions/image-6.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added submissions/image-7.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added submissions/image-8.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added submissions/image-9.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added submissions/image.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
176 changes: 176 additions & 0 deletions submissions/lab5.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,176 @@
# 5 lab

Frolova AI, M25RO-01

a.frolova@innopolis.university

Ссылка на PR: https://github.com/inno-devops-labs/DevOps-Intro/pull/1213

## Task1 - Vagrant Up + Run QuickNotes Inside

### Vagrantfile

Ссылка на файл: https://github.com/kicchhi/DevOps-Intro/blob/feature/lab5/Vagrantfile

### Скриншоты

1. vagrant ssh

![alt text](image.png)

2. go version

![alt text](image-1.png)

3. внутри виртуалки:

![alt text](image-2.png)

4. c хоста:

![alt text](image-3.png)

вместо `vagrant ssh -c 'cd /path/to/synced/app && go build -o /tmp/qn && /tmp/qn &' &` запустила внутри виртуальной машины `go run .`

### Фрагмент vagrant up:

![alt text](image-4.png)

### Ответы на вопросы

> Q: Синхронизированные папки: Vagrant поддерживает типы монтирования nfs, rsync, virtualbox и smb . Какой из них вы выбрали и почему? В чем компромисс?

> A: Мной был выбран virtualbox, потому что на win он работает из коробки без дополнительных настроек. Другие типы монтирования требуют дополнительных заморочек в настройке и запуске.

---

> Q: NAT, Bridged или Host-only: какой сетевой режим вы используете (по умолчанию используется Bridged, но укажите, какой именно)? Почему переадресация портов 127.0.0.1-bound безопаснее, чем использование интерфейса Bridged для выполнения задания?

> A: Я использовала режим NAT, который позволяет хосту не видеть виртуальную машину напрямую, но при этом осуществлять связь. Переадресация портов 127.0.0.1-bound безопаснее, так как 127.0.0.1 - это локальный адрес, то есть сервер доступен только с этого компьютера, а не всей сети, и как раз это исключает какой-либо доступ извне. Bridgе (мост) это связь напрямую между двумя хостами.

---

> Q: Варианты подготовки: Vagrant поддерживает shell, ansible, ansible_local, puppet, chef, … какой из них вы выбрали для установки Go и почему?

> A: я выбрала shell, так как, опять же, это один из самых простых вариантов для меня. Я описала в vagrantfile все, что нужно скачать и установить, что заняло всего несколько строчек кода, без необходимости создавать дополнительные файлы или погружаться в изучение новых языков.

---

> Q: Почему Go привязан к конкретной версии (1.24.5) вместо 1.24?

> A: Ссылаться на конкретную версию - более надежный вариант, исключающий ситуацию, когда версия обновилась, и окружение уже не будет таким же, как и до этого, хотя настройки были практически идентичные. Это гарантия того, что мой код заработает у другого человека, а также избавляет от багов из-за конфликтов версий.

## Task2 - Vagrant Up + Run QuickNotes Inside

### 2.1 Ломаем и восстанавливаем VM

1. VM работает (`vagrant status`):

![alt text](image-5.png)
![alt text](image-6.png)

2. Делаем snapshot (`vagrant snapshot save working`):

![alt text](image-7.png)

3. Ломаем VM (`vagrant ssh -c 'sudo rm -rf /usr/local/go'`):

![alt text](image-8.png)

4. Проверяем, что не работает (`vagrant ssh -c 'go version'`):

![alt text](image-9.png)

5. Восстанавливаю из snapshot (`vagrant snapshot restore working`):

![alt text](image-10.png)

6. Проверяю, что работает.

![alt text](image-11.png)

### 2.3 Вопросы

> Q: Снимки состояния не являются резервными копиями. Объясните в 2–3 предложениях, почему снимки состояния бесполезны при сбоях.

> A: Snapshot фиксирует состояние системы в момент времени и хранится на том же диске, что и сама система. Если случится такое, что диск повредится, или виртуальная машина будет случайно удалена, снимок так же удалится, и восстановить машину не удастся.

---

> Q: Копирование при записи: в VirtualBox снимки состояния в Vagrant создаются с копированием при записи. Что это значит с точки зрения использования диска, если вы делаете 10 снимков состояния вместо одного?

> A: Новый снимок сохраняет только изменения относительно предыдущей версии системы, но не полную ее копию. Если мы делаем 10 снимков состояний, это займет конечно гораздо меньше места, чем полная копия состояния системы, но все еще больше, чем сгтмлк одного состояния.

---

> Q: В каких случаях создание снимков состояния является антипаттерном? (Подсказка: длинные цепочки.)

> A: Snapshot является антипаттерном, так как длинные цепочки (такими можно считать уже длиной более трёх), во первых, занимают много пространстваю, что сильно замедляет работу и увеличивает время восстановления. К тому же, если один снимок в цепочке повредится, то можно считать поврежденной всю цепочку, и она будет непригодна для использования. Поэтому лучше все же делать нормальные бекапы.


## Bonus

## 1 Часть - запуск Virtual Box

### 1.1 Время холодной загрузки

![alt text](image-12.png)

### 1.2 Оперативная память VM в простое

![alt text](image-13.png)

### 1.3 Количество процессов

![alt text](image-14.png)

### 1.4 Объем памяти

![alt text](image-15.png)

## 2 Часть - Docker

### 2.1 Время загрузки

![alt text](image-16.png)

### 2.2 RAM

![alt text](image-17.png)

### 2.3 Количество процессов

![alt text](image-18.png)

### 2.4 Размер образа

![alt text](image-19.png)

---

## Сравнительная таблица

| Dimension | Vagrant VM | Docker container |
|-----------|-----------|------------------|
| Cold start | 5m17s | 0.733s |
| Idle RAM | 163Mi | 2.734MiB |
| On-disk size | 3.3G | 26.5MB |
| Process count | 105 | 2 |

## Ответы на вопросы

> Q: Какие цифры вас удивили?

> A: Меня сильно удивила разница во времени запуска, Vagrant поднимался очень долго, в сравнении с Docker. По сравнительной таблице видно, что Docker оказался лучше по показателям, однако, учитывая, сколько времени я потратила на то, чтобы устранить ошибки docker, wsl и ubuntu (которые не устанавливались, пока я не перебрала кучу системных настроек), работа с Vagrant VM была менее болезненной.

---

> Q: Для каких рабочих нагрузок подходит та или иная модель?

> A: VM подходит для тяжелых приложений по типу баз данных, систем с жесткими требованиями к изоляции, а также приложений, которым нужно свое ядро или какие-то особенные драйверы. Контейнеры хорошо подойдут для микросервисов, CI-CD пайплайнов, которые должны запускаться за секунды (а мы уже увидели, что docker выигрывает)

---

> Q: Что говорят эти данные о том, почему в эпоху 2014–2020 годов контейнеры стали лучшим решением для микросервисов без сохранения состояния?

> A: Ключевое преимущество контейнеров в том, что они легче, быстрее и экономичнее. В эпоху микросервисов и облачных платформ скорость развёртывания и масштабирования стала критически важной. Контейнеры позволяют запускать сотни экземпляров приложения на одном хосте, тогда как VM в этом проигрывают. Именно эта эффективность сделала контейнеры стандартом для stateless приложений.