Оригинал: How to Set Up a DevOps Lab on Your Laptop (Without Spending a Dime)

Перевод для канала Мы ж программист

Представьте себе, что у вас есть собственная игровая площадка, где вы можете экспериментировать с теми же мощными инструментами, которые технологические гиганты используют для создания и развертывания программного обеспечения. И все это без траты ни копейки или необходимости в быстром интернет-соединении. Звучит слишком хорошо, чтобы быть правдой? Это не так!

Проблема: практика DevOps без счета за облако

Джейн застряла. Она неделями изучала концепции DevOps, смотрела видео и читала статьи. Но когда пришло время практиковаться, все учебники указывали ей на AWS, Azure или Google Cloud.

«Подпишитесь на бесплатный уровень», – говорили они. Но Джейн знала, что у этих бесплатных уровней есть ограничения, и слышала страшные истории о том, как люди получали огромные счета, забыв отключить ресурсы.

«Должен быть лучший способ», – подумала она. И она оказалась права.

Что такое DevOps? (простым языком)

Прежде чем мы погрузимся в процесс, давайте разберемся, что же такое DevOps на самом деле.

Представьте, что вы строите дом. У вас есть архитекторы (разработчики), которые проектируют дом, и строители (операции), которые его строят. В традиционных компаниях эти две команды практически не общаются друг с другом. Архитекторы передают чертежи и говорят: «Постройте это», что часто приводит к проблемам, когда планы встречаются с реальностью.

DevOps – это как сказать: «Эй, а что если архитекторы и строители будут сотрудничать на протяжении всего процесса?». Улучшение коммуникации приводит к тому, что дома строятся быстрее и с меньшим количеством проблем.

Инструменты DevOps – это как современное оборудование, которое помогает обеим командам работать слаженно:

  • Docker: считайте, что это стандартный контейнер для вашего кода. Он упаковывает все, что нужно вашему приложению, чтобы оно везде работало одинаково.
  • Kubernetes: Контроллер трафика для множества контейнеров, следящий за тем, чтобы все они работали правильно и общались друг с другом.
  • Ansible: Ваш робот-помощник, автоматизирующий повторяющиеся задачи на многих компьютерах.
  • Terraform: Волшебный чертеж, позволяющий автоматически создавать всю ИТ-инфраструктуру с помощью одной команды.

Зачем создавать лабораторию на своем ноутбуке?

У собственной локальной лаборатории DevOps есть несколько потрясающих преимуществ:

  • Нулевая стоимость – никаких неожиданных счетов в конце месяца
  • Работает в автономном режиме – практикуйтесь в самолете или при нестабильном интернете
  • Никаких проблем с безопасностью – свободно экспериментируйте, не боясь, что вас взломают
  • Лучшее обучение – когда что-то ломается, вы чините это сами (отлично для обучения!)
  • Быстрая обратная связь – не нужно ждать, пока раскрутятся облачные ресурсы
  • Полный контроль – возитесь, ломайте и чините в безопасности.

Давайте создадим вашу лабораторию – шаг за шагом

Что вам понадобится:

  • Ноутбук с оперативной памятью не менее 8 ГБ (лучше 16 ГБ)
  • Около 20 ГБ свободного дискового пространства
  • Операционная система Windows, macOS или Linux
  • Доступ администратора к вашему компьютеру
  • Виртуализация включена в BIOS/UEFI
  • Несколько часов свободного времени.

Шаг 1: Настройка Docker – вашей контейнерной площадки

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

Для Windows:

Включение виртуализации (шаг, специфичный для Windows)

  • Перезагрузите компьютер и войдите в настройки BIOS/UEFI (как правило, нажав F2, F10, Del или Esc во время загрузки)
  • Найдите настройки виртуализации (часто в разделе конфигурации процессора, Advanced или Security)
  • Включите Intel VT-x, AMD-V, SVM или технологию виртуализации
  • Сохраните изменения и выйдите из BIOS.

Установка Docker Desktop

  • Загрузите Docker Desktop с сайта Docker
  • Дважды щелкните программу установки и следуйте подсказкам
  • Когда появится запрос, включите WSL 2 (Windows Subsystem for Linux)
  • Перезагрузите компьютер, когда появится запрос
  • После перезагрузки откройте Docker Desktop из меню «Пуск»
  • Подождите, пока значок кита на панели задач перестанет анимироваться (это означает, что Docker готов).

Для Mac:

  • Загрузите Docker Desktop с сайта Docker
  • Откройте загруженный файл .dmg и перетащите Docker в папку Applications
  • Откройте Docker из папки Applications
  • Введите пароль при появлении запроса
  • Подождите, пока значок кита в строке меню перестанет анимироваться.

Для Linux:

Bash
# Update your package lists
sudo apt-get update
# Install prerequisites
sudo apt-get install apt-transport-https ca-certificates curl software-properties-common
# Add Docker's official GPG key
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
# Add the Docker repository
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
# Update package database with Docker packages
sudo apt-get update
# Install Docker
sudo apt-get install docker-ce
# Start and enable Docker
sudo systemctl start docker
sudo systemctl enable docker
# Add your user to the docker group so you don't need sudo
sudo usermod -aG docker $USER

Выйдите из системы и снова войдите в нее, чтобы изменения в группе вступили в силу.

Давайте протестируем Docker:

Откройте терминал или командную строку и наберите:

Bash
docker run hello-world

Если вы видите сообщение «Привет от Docker!», поздравляем! Docker работает.

Шаг 2: Настройка Kubernetes – вашего оркестра контейнеров

Теперь давайте настроим инструмент для управления несколькими контейнерами. У нас есть два отличных варианта:

Вариант A: Minikube – дружественный Kubernetes

Minikube создает одноузловой кластер Kubernetes внутри виртуальной машины на вашем ноутбуке.

Для Windows:

  • Загрузите программу установки Minikube со страницы Minikube на GitHub
  • Запустите программу установки (файл .exe)
  • Откройте командную строку от имени администратора
  • Запустите Minikube командой: minikube start --driver=docker

Для Mac:

Bash
# Using Homebrew
brew install minikube
# Start Minikube
minikube start --driver=docker

Или загрузите со страницы Minikube на GitHub.

Для Linux:

Bash
# Download Minikube
curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64# Make it executable
chmod +x minikube-linux-amd64

# Move it to your path
sudo mv minikube-linux-amd64 /usr/local/bin/minikube

# Start Minikube
minikube start --driver=docker

Тестируем Minikube:

Bash
# Check if your cluster is running
minikube status
# Open the Kubernetes dashboard in your browser
minikube dashboard

Вариант B: Kind (Kubernetes IN Docker) – облегченная альтернатива

Kind запускает кластеры Kubernetes внутри контейнеров Docker, что делает его очень легким.

Для всех платформ (Windows, Mac, Linux):

С помощью менеджеров пакетов:

Bash
# Windows (using Chocolatey)
choco install kind
Bash
# Mac or Linux (using Homebrew)
brew install kind

Или вручную:

Bash
# Download Kind
curl -Lo ./kind https://kind.sigs.k8s.io/dl/v0.11.1/kind-$(uname)-amd64
# Make it executable
chmod +x ./kind
# Move it to your path
sudo mv ./kind /usr/local/bin/kind

Создание кластера с Kind:

Bash
# Create a new cluster
kind create cluster --name my-local-lab

Шаг 3: Установка kubectl – дистанционное управление Kubernetes

kubectl – это то, как вы будете общаться с кластером Kubernetes.

Для Windows:

  • Скачайте kubectl.exe с сайта Kubernetes
  • Поместите его в каталог, который находится в вашей переменной окружения PATH
  • Или установите с помощью Chocolatey: choco install kubernetes-cli

Для Mac:

Bash
# Using Homebrew
brew install kubectl
# Or using curl
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/darwin/amd64/kubectl"
chmod +x ./kubectl
sudo mv ./kubectl /usr/local/bin/kubectl

Для Linux:

Bash
# Using curl
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
chmod +x kubectl
sudo mv kubectl /usr/local/bin/kubectl

Тестируем kubectl:

Bash
# List all pods in all namespaces
kubectl get pods --all-namespaces

Шаг 4: Настройка Vagrant – вашего менеджера виртуальных машин

Vagrant позволяет легко создавать и управлять виртуальными машинами, он идеально подходит для тестирования многосерверных систем.

Для Windows:

1. Проверьте, включен ли Hyper-V (шаг, специфичный для Windows)

Если Hyper-V включен, вам нужно либо:

  • Использовать Hyper-V в качестве провайдера Vagrant вместо VirtualBox, либо
  • Отключить Hyper-V (может потребоваться перезагрузка)

Проверить можно с помощью: systeminfo | findstr "Hyper-V"

2. Установите VirtualBox и Vagrant

  • Скачайте VirtualBox с сайта VirtualBox
  • Запустите программу установки с параметрами по умолчанию
  • Скачайте Vagrant с сайта Vagrant
  • Запустите программу установки и перезагрузитесь, если появится запрос.

Для Mac и Linux:

Проверим установку (все платформы):

Bash
# In terminal or PowerShell/CMD
vboxmanage --version
vagrant --version

(Опционально) Создание пользовательской коробки Ubuntu из ISO

Используйте этот способ, если вы не можете использовать Vagrant Cloud или хотите создать собственный образ.

1. Загрузите Ubuntu ISO:

2. Установите Ubuntu в VirtualBox:

  • Откройте VirtualBox → New → Name: ubuntu-devops → Type: Linux → Version: Ubuntu (64‑bit)
  • Выделите 2048 MB RAM, 20 GB HDD (VDI)
  • В разделе Storage присоедините ваш загруженный .iso как Optical Drive
  • Запустите виртуальную машину и завершите установку Ubuntu (создайте пользователя, установите пароль)

3. Упакуйте виртуалку в Vagrant box:

Bash
# List your VM name exactly  
VBoxManage list vms  
# Package 
vagrant package --base "ubuntu-devops" --output ubuntu2004.box  
# Add to Vagrant  
vagrant box add ubuntu2004 ubuntu2004.box

Теперь у вас есть ubuntu2004 в локальной коробке – интернет не нужен.

Быстрый старт с преднастроенной коробкой

Если у вас есть интернет, используйте Ubuntu Box в Vagrant Cloud.

1. Создайте новую папку, откройте терминал/PowerShell/CMD в ней

2. Запустите:

Bash
vagrant init ubuntu/focal64vagrant up

3. Входим через ssh:

Bash
vagrant ssh

Поздравляем – виртуалка Ubuntu работает!

Создание первого окружения Vagrant (все платформы):

1. Создайте новый каталог для проекта Vagrant

2. Внутри этого каталога создайте файл с именем Vagrantfile с таким содержимым:

Dockerfile
Vagrant.configure("2") do |config|
  config.vm.box = "ubuntu/focal64"
  
  # Create a private network between VMs
  config.vm.network "private_network", type: "dhcp"
  
  # Forward port 8080 to 80
  config.vm.network "forwarded_port", guest: 80, host: 8080
  
  # Provision with shell script
  config.vm.provision "shell", inline: <<-SHELL
    apt-get update
    apt-get install -y nginx
    echo "Hello from Vagrant!" > /var/www/html/index.html
  SHELL
end

3. Откройте терминал в этой папке и запустите:

Bash
vagrant up

4. Запустите http://localhost:8080 в вашем браузере, чтобы увидеть веб-сервер, управляемый вашим Vagrant!

Шаг 5: Установка Ansible, вашего помощника по автоматизации

Ansible поможет вам автоматизировать задачи на нескольких серверах.

Для Windows:

Ansible не работает под Windows нативно, но вы можете использовать его через WSL (Windows Subsystem for Linux):

1. Включите WSL, открыв PowerShell от имени администратора и выполнив команду:

Bash
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestar

2. Перезагрузите компьютер

3. Установите Ubuntu из Microsoft Store

4. Откройте Ubuntu и выполните:

Bash
sudo apt update
sudo apt install software-properties-common
sudo apt-add-repository --yes --update ppa:ansible/ansible
sudo apt install ansible

Для Mac:

Bash
# Using Homebrew
brew install ansible

Для Linux:

Bash
# For Ubuntu/Debian
sudo apt update
sudo apt install software-properties-common
sudo apt-add-repository --yes --update ppa:ansible/ansible
sudo apt install ansible

# For Red Hat/CentOS
sudo yum install ansible

Тестируем Ansible:

1. В папке /etc/ansible создайте файл hosts с содержимым:

INI
[local]
localhost ansible_connection=local

2. Создайте файл playbook.yml с содержимым:

YAML
---
- name: Test playbook
  hosts: local
  tasks:
    - name: Print a message
      debug:
        msg: "Ansible is working!"

3. Запустите:

Bash
ansible-playbook -i hosts playbook.yml

Шаг 6: Установка Terraform, вашего мага инфраструктуры

Наконец, давайте установим Terraform, чтобы практиковать инфраструктуру как код.

Для Windows:

  • Загрузите zip-архив для Windows с сайта Terraform
  • Распакуйте архив
  • Переместите файл terraform.exe в каталог в PATH
  • Или установите с помощью Chocolatey: choco install terraform

Для Mac:

Bash
# Using Homebrew
brew install terraform

Для Linux:

Bash
# Download
wget https://releases.hashicorp.com/terraform/1.0.0/terraform_1.0.0_linux_amd64.zip

# Unzip
unzip terraform_1.0.0_linux_amd64.zip

# Move to a directory in your PATH
sudo mv terraform /usr/local/bin/

Тестируем Terraform:

1. Создайте файл main.tf с содержимым:

INI
resource "local_file" "hello" {
  content  = "Hello, Terraform!"
  filename = "${path.module}/hello.txt"
}

2. Запустите:

Bash
terraform init
terraform apply

3. Проверьте, что создался файл hello.txt с сообщением “Hello, Terraform!”

Ваш первый полный проект DevOps

Теперь давайте свяжем все воедино! Мы создадим проект, который:

  1. Использует Terraform для создания локального окружения
  2. Использует Vagrant для создания виртуальных машин
  3. Использует Ansible для настройки этих виртуальных машин
  4. Развертывает контейнерное приложение с помощью Docker
  5. Управляет этими контейнерами с помощью Kubernetes.

Проект: Простое двухуровневое веб-приложение

  1. Создайте каталог для вашего проекта
  2. Внутри этого каталога создайте следующие файлы:

main.tf (Terraform):

INI
resource "local_file" "vagrant_file" {
  content  = <<-EOT
    Vagrant.configure("2") do |config|
      config.vm.box = "ubuntu/focal64"
      
      # Web server
      config.vm.define "web" do |web|
        web.vm.network "private_network", ip: "192.168.33.10"
        web.vm.network "forwarded_port", guest: 80, host: 8080
      end
      
      # Database server
      config.vm.define "db" do |db|
        db.vm.network "private_network", ip: "192.168.33.11"
      end
    end
  EOT
  filename = "${path.module}/Vagrantfile"
}

resource "local_file" "ansible_inventory" {
  content  = <<-EOT
    [webservers]
    192.168.33.10 ansible_user=vagrant ansible_ssh_private_key_file=.vagrant/machines/web/virtualbox/private_key

    [dbservers]
    192.168.33.11 ansible_user=vagrant ansible_ssh_private_key_file=.vagrant/machines/db/virtualbox/private_key
  EOT
  filename = "${path.module}/inventory"
}

resource "local_file" "ansible_playbook" {
  content  = <<-EOT
    ---
    - name: Configure web server
      hosts: webservers
      become: yes
      tasks:
        - name: Install Docker
          apt:
            name: docker.io
            state: present
            update_cache: yes
        
        - name: Start Docker service
          service:
            name: docker
            state: started
            enabled: yes
        
        - name: Run Nginx container
          docker_container:
            name: webapp
            image: nginx
            ports:
              - "80:80"
            restart_policy: always
            
    - name: Configure database server
      hosts: dbservers
      become: yes
      tasks:
        - name: Install MariaDB
          apt:
            name: mariadb-server
            state: present
            update_cache: yes
            
        - name: Start MariaDB service
          service:
            name: mariadb
            state: started
            enabled: yes
  EOT
  filename = "${path.module}/playbook.yml"
}

3. Запустите Terraform для создания Vagrantfile и файлов Ansible:

Bash
terraform init
terraform apply

4. Поднимите виртуалки в Vagrant:

Bash
vagrant up

5. Запустите Ansible playbook, чтобы настроить виртуальные машины:

Bash
ansible-playbook -i inventory playbook.yml

6. Посетите http://localhost:8080 чтобы увидеть ваше приложение!

7. Когда закончите, сделайте очистку:

Bash
vagrant destroy -f
terraform destroy

Решение проблем, специфичных для Windows

Если вы – пользователь Windows, вот решения распространенных проблем:

1. VirtualBox не устанавливается или не запускается

  • Убедитесь, что Hyper-V отключен, если вы используете VirtualBox
  • Запустите PowerShell от имени администратора: Disable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V-All
  • Перезагрузите компьютер

2. Проблемы с установкой WSL2

  • Убедитесь, что Windows обновлена до последней версии
  • Если вы видите сообщение «WSL 2 требует обновления компонента ядра», загрузите и установите обновление с сайта Microsoft.

3. Ошибки Docker Desktop

  • Если Docker падает с ошибками виртуализации, проверьте, включена ли виртуализация в BIOS
  • Попробуйте запустить: systeminfo | findstr "Hyper-V Requirements" – все элементы должны содержать “Yes”

4. Сбой Vagrant SSH

  • Windows может иметь проблемы с путями SSH. Попробуйте: vagrant ssh -- -v для отладки
  • Или: ssh -i .vagrant/machines/default/virtualbox/private_key vagrant@127.0.0.1 -p 2222

5. Проблемы с производительностью

  • Если система работает очень медленно, попробуйте уменьшить RAM-память, выделенную виртуальным машинам в Vagrantfile
  • Пример: web.vm.provider "virtualbox" do |v| v.memory = 512 end

Плюсы и минусы локальной DevOps лаборатории

Плюсы

  • Полностью бесплатно – Никаких затрат на облако
  • Работает в автономном режиме – Отлично подходит для обучения в самолетах, поездах или при плохом интернете
  • Полный контроль – Вы управляете всем сверху донизу
  • Конфиденциальность – Никаких опасений по поводу раскрытия конфиденциальных данных
  • Никаких ограничений по времени – В отличие от бесплатных уровней облака, срок действия которых истекает
  • Лучшее понимание – Вы изучаете внутренние механизмы, а не только реализации, специфичные для облака
  • Безопасно ломать вещи – Свободно экспериментируйте без реальных последствий
  • Реалистичные многомашинные установки – Отлично подходит для изучения концепций кластеризации.

Минусы

  • Ограничения по ресурсам – Процессор, оперативная память и дисковое пространство вашего ноутбука – это ваши пределы
  • Нет истинного масштабирования – Невозможно моделировать сценарии массового масштабирования
  • Отсутствие специфических облачных сервисов – Нет прямых аналогов для таких вещей, как Lambda, S3 и т. д.
  • Проблемы с производительностью – запуск виртуальных машин внутри виртуальных машин может быть медленным
  • Разряд батареи – эти инструменты требовательны к ресурсам
  • Некоторые отличия от реального мира – облачные среды могут иметь несколько иное поведение.

Следующие шаги в DevOps-путешествии

Теперь, когда вы создали свою лабораторию, вот несколько проектов, которые можно попробовать:

  • Создайте конвейер CI/CD с помощью Jenkins или GitLab CI (оба могут работать локально)
  • Постройте архитектуру микросервисов с несколькими контейнерами, взаимодействующими друг с другом
  • Настройте мониторинг с помощью Prometheus и Grafana
  • Создайте балансировку нагрузки с помощью Nginx или HAProxy
  • Практикуйте аварийное восстановление, намеренно ломая компоненты и исправляя их.

Заключение: Ваша песочница DevOps ждет

Помните Джейн из нашей истории? Она создала впечатляющую местную лабораторию DevOps. Через три месяца она получила должность младшего сотрудника DevOps, несмотря на отсутствие профессионального опыта. Во время собеседования она поделилась своим репозиторием GitHub с локальными проектами и демонстрационными сценариями, которые она создала.

«Ваш практический опыт действительно выделяет вас среди других», – сказал ей новый руководитель.

Вы можете сделать то же самое. DevOps – это не только понимание концепций, но и их применение. Ваш ноутбук – это все, что вам нужно, чтобы начать это путешествие.

Так чего же вы ждете? Ваша площадка DevOps ждет вас, и это не будет стоить вам ни копейки!