Оригинал: 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:
# 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:
Откройте терминал или командную строку и наберите:
docker run hello-world
Если вы видите сообщение «Привет от Docker!», поздравляем! Docker работает.
Шаг 2: Настройка Kubernetes – вашего оркестра контейнеров
Теперь давайте настроим инструмент для управления несколькими контейнерами. У нас есть два отличных варианта:
Вариант A: Minikube – дружественный Kubernetes
Minikube создает одноузловой кластер Kubernetes внутри виртуальной машины на вашем ноутбуке.
Для Windows:
- Загрузите программу установки Minikube со страницы Minikube на GitHub
- Запустите программу установки (файл .exe)
- Откройте командную строку от имени администратора
- Запустите Minikube командой:
minikube start --driver=docker
Для Mac:
# Using Homebrew
brew install minikube
# Start Minikube
minikube start --driver=docker
Или загрузите со страницы Minikube на GitHub.
Для Linux:
# 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:
# 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):
С помощью менеджеров пакетов:
# Windows (using Chocolatey)
choco install kind
# Mac or Linux (using Homebrew)
brew install kind
Или вручную:
# 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:
# 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:
# 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:
# 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:
# 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:
- Скачайте и установите VirtualBox с сайта VirtualBox
- Скачайте и установите Vagrant с сайта Vagrant
Проверим установку (все платформы):
# In terminal or PowerShell/CMD
vboxmanage --version
vagrant --version
(Опционально) Создание пользовательской коробки Ubuntu из ISO
Используйте этот способ, если вы не можете использовать Vagrant Cloud или хотите создать собственный образ.
1. Загрузите Ubuntu ISO:
- Перейдите на https://ubuntu.com/download/desktop (или сервер)
- Выберите Ubuntu 20.04 LTS и сохраните .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:
# 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. Запустите:
vagrant init ubuntu/focal64vagrant up
3. Входим через ssh:
vagrant ssh
Поздравляем – виртуалка Ubuntu работает!
Создание первого окружения Vagrant (все платформы):
1. Создайте новый каталог для проекта Vagrant
2. Внутри этого каталога создайте файл с именем Vagrantfile с таким содержимым:
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. Откройте терминал в этой папке и запустите:
vagrant up
4. Запустите http://localhost:8080 в вашем браузере, чтобы увидеть веб-сервер, управляемый вашим Vagrant!
Шаг 5: Установка Ansible, вашего помощника по автоматизации
Ansible поможет вам автоматизировать задачи на нескольких серверах.
Для Windows:
Ansible не работает под Windows нативно, но вы можете использовать его через WSL (Windows Subsystem for Linux):
1. Включите WSL, открыв PowerShell от имени администратора и выполнив команду:
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 и выполните:
sudo apt update
sudo apt install software-properties-common
sudo apt-add-repository --yes --update ppa:ansible/ansible
sudo apt install ansible
Для Mac:
# Using Homebrew
brew install ansible
Для Linux:
# 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
с содержимым:
[local]
localhost ansible_connection=local
2. Создайте файл playbook.yml
с содержимым:
---
- name: Test playbook
hosts: local
tasks:
- name: Print a message
debug:
msg: "Ansible is working!"
3. Запустите:
ansible-playbook -i hosts playbook.yml
Шаг 6: Установка Terraform, вашего мага инфраструктуры
Наконец, давайте установим Terraform, чтобы практиковать инфраструктуру как код.
Для Windows:
- Загрузите zip-архив для Windows с сайта Terraform
- Распакуйте архив
- Переместите файл terraform.exe в каталог в PATH
- Или установите с помощью Chocolatey:
choco install terraform
Для Mac:
# Using Homebrew
brew install terraform
Для Linux:
# 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
с содержимым:
resource "local_file" "hello" {
content = "Hello, Terraform!"
filename = "${path.module}/hello.txt"
}
2. Запустите:
terraform init
terraform apply
3. Проверьте, что создался файл hello.txt
с сообщением “Hello, Terraform!”
Ваш первый полный проект DevOps
Теперь давайте свяжем все воедино! Мы создадим проект, который:
- Использует Terraform для создания локального окружения
- Использует Vagrant для создания виртуальных машин
- Использует Ansible для настройки этих виртуальных машин
- Развертывает контейнерное приложение с помощью Docker
- Управляет этими контейнерами с помощью Kubernetes.
Проект: Простое двухуровневое веб-приложение
- Создайте каталог для вашего проекта
- Внутри этого каталога создайте следующие файлы:
main.tf (Terraform):
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:
terraform init
terraform apply
4. Поднимите виртуалки в Vagrant:
vagrant up
5. Запустите Ansible playbook, чтобы настроить виртуальные машины:
ansible-playbook -i inventory playbook.yml
6. Посетите http://localhost:8080 чтобы увидеть ваше приложение!
7. Когда закончите, сделайте очистку:
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 ждет вас, и это не будет стоить вам ни копейки!