DevOps Шпаргалка

Изучите DevOps с практическими лабораториями

Изучите практики DevOps с помощью практических лабораторий и сценариев реального мира. LabEx предлагает комплексные курсы по DevOps, охватывающие основные операции, управление инфраструктурой, конвейеры CI/CD, контейнеризацию, мониторинг и автоматизацию. Научитесь развертывать приложения, управлять инфраструктурой как кодом, автоматизировать рабочие процессы и внедрять современные практики DevOps для эффективной поставки программного обеспечения.

Infrastructure as Code (IaC)

Terraform: Provisioning Инфраструктуры

Определение и предоставление инфраструктуры с использованием декларативного языка конфигурации.

# Инициализация Terraform
terraform init
# Планирование изменений инфраструктуры
terraform plan
# Применение изменений инфраструктуры
terraform apply
# Уничтожение инфраструктуры
terraform destroy
# Форматирование файлов конфигурации
terraform fmt
# Проверка конфигурации
terraform validate
Викторина

Войдите в систему, чтобы ответить на эту викторину и отслеживать свой прогресс обучения

Что делает команда terraform plan?
Немедленно применяет изменения инфраструктуры
Показывает, какие изменения будут внесены, без их применения
Уничтожает всю инфраструктуру
Инициализирует Terraform

Ansible: Управление Конфигурацией

Автоматизация развертывания приложений и управления конфигурацией.

# Запуск плейбука
ansible-playbook site.yml
# Запуск плейбука на определенных хостах
ansible-playbook -i inventory site.yml
# Проверка синтаксиса
ansible-playbook --syntax-check site.yml
# Запуск с указанием пользователя
ansible-playbook -u ubuntu site.yml

CloudFormation: Собственный IaC для AWS

Предоставление ресурсов AWS с использованием шаблонов JSON/YAML.

# Создание стека
aws cloudformation create-stack --stack-name mystack --template-body file://template.yml
# Обновление стека
aws cloudformation update-stack --stack-name mystack --template-body file://template.yml
# Удаление стека
aws cloudformation delete-stack --stack-name mystack

Управление Контейнерами

Docker: Контейнеризация

Сборка, доставка и запуск приложений в контейнерах.

# Сборка образа
docker build -t myapp:latest .
# Запуск контейнера
docker run -d -p 8080:80 myapp:latest
# Список запущенных контейнеров
docker ps
# Остановка контейнера
docker stop container_id
# Удаление контейнера
docker rm container_id

Kubernetes: Оркестрация Контейнеров

Развертывание и управление контейнеризированными приложениями в масштабе.

# Применение конфигурации
kubectl apply -f deployment.yml
# Получение подов
kubectl get pods
# Масштабирование развертывания
kubectl scale deployment myapp --replicas=5
# Просмотр логов
kubectl logs pod_name
# Удаление ресурсов
kubectl delete -f deployment.yml
Викторина

Войдите в систему, чтобы ответить на эту викторину и отслеживать свой прогресс обучения

Что делает команда kubectl apply -f deployment.yml?
Создает или обновляет ресурсы, определенные в YAML-файле
Удаляет все ресурсы в кластере
Создает только новые ресурсы
Показывает, что будет создано, без применения

Helm: Менеджер Пакетов Kubernetes

Управление приложениями Kubernetes с помощью чартов.

# Установка чарта
helm install myrelease stable/nginx
# Обновление релиза
helm upgrade myrelease stable/nginx
# Список релизов
helm list
# Удаление релиза
helm uninstall myrelease

Управление CI/CD Конвейерами

Jenkins: Автоматизация Сборки

Настройка и управление конвейерами непрерывной интеграции.

// Пример Jenkinsfile
pipeline {
    agent any
    stages {
        stage('Build') {
            steps {
                sh 'mvn clean compile'
            }
        }
        stage('Test') {
            steps {
                sh 'mvn test'
            }
        }
        stage('Deploy') {
            steps {
                sh './deploy.sh'
            }
        }
    }
}

GitHub Actions: Облачный CI/CD

Автоматизация рабочих процессов непосредственно из репозиториев GitHub.

# .github/workflows/ci.yml
name: CI
on: [push, pull_request]
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - name: Setup Node
        uses: actions/setup-node@v2
        with:
          node-version: '14'
      - run: npm install
      - run: npm test

GitLab CI: Интегрированный DevOps

Использование встроенных возможностей CI/CD GitLab для полных рабочих процессов DevOps.

# .gitlab-ci.yml
stages:
  - build
  - test
  - deploy
build_job:
  stage: build
  script:
    - echo "Building the app"
test_job:
  stage: test
  script:
    - echo "Running tests"

Контроль Версий и Сотрудничество

Git: Система Контроля Версий

Отслеживание изменений и совместная работа над разработкой кода.

# Клонирование репозитория
git clone https://github.com/user/repo.git
# Проверка статуса
git status
# Добавление изменений
git add .
# Фиксация изменений
git commit -m "Add feature"
# Отправка на удаленный репозиторий
git push origin main
# Получение последних изменений
git pull origin main
Викторина

Войдите в систему, чтобы ответить на эту викторину и отслеживать свой прогресс обучения

В чем разница между git pull и git fetch?
Разницы нет
git pull отправляет изменения, git fetch получает изменения
git pull работает локально, git fetch работает удаленно
git fetch загружает изменения без слияния, git pull загружает и сливает изменения

Управление Ветками

Управление различными потоками разработки и выпусками.

# Создание ветки
git checkout -b feature-branch
# Слияние ветки
git merge feature-branch
# Список веток
git branch -a
# Переключение ветки
git checkout main
# Удаление ветки
git branch -d feature-branch
# Сброс к предыдущему коммиту
git reset --hard HEAD~1
# Просмотр истории коммитов
git log --oneline

GitHub: Хостинг Кода и Сотрудничество

Размещение репозиториев и управление совместной разработкой.

# Команды GitHub CLI
gh repo create myrepo
gh repo clone user/repo
gh pr create --title "New feature"
gh pr list
gh pr merge 123
gh issue create --title "Bug report"
gh release create v1.0.0
# Создание pull request
git push -u origin feature-branch
# Затем создание PR на GitHub/GitLab

Code Review и Качество Кода

Обеспечение качества кода посредством взаимного обзора и автоматизированных проверок.

# Пример pre-commit хуков
#!/bin/sh
# Запуск тестов перед коммитом
npm test
if [ $? -ne 0 ]; then
  echo "Tests failed"
  exit 1
fi

Мониторинг и Наблюдаемость

Prometheus: Сбор Метрик

Мониторинг метрик системы и приложений с помощью данных временных рядов.

# Использование ЦП
cpu_usage_percent{instance="server1"}
# Использование памяти
(node_memory_MemTotal_bytes - node_memory_MemAvailable_bytes) / node_memory_MemTotal_bytes * 100
# Частота HTTP-запросов
rate(http_requests_total[5m])
# Пример правил оповещения
ALERT HighCPUUsage
  IF cpu_usage_percent > 80
  FOR 5m

Grafana: Панели Визуализации

Создание панелей и визуализаций для данных мониторинга.

# Создание панели
curl -X POST http://admin:admin@localhost:3000/api/dashboards/db \
  -H "Content-Type: application/json" \
  -d @dashboard.json
# Получение панели
curl http://admin:admin@localhost:3000/api/dashboards/uid/dashboard-uid

Стек ELK: Управление Логами

Сбор, поиск и анализ данных логов в инфраструктуре.

# Запросы Elasticsearch
# Поиск логов
GET /logs/_search
{
  "query": {
    "match": {
      "message": "error"
    }
  }
}
# Конфигурация Logstash
input {
  file {
    path => "/var/log/app.log"
  }
}
filter {
  grok {
    match => { "message" => "%{TIMESTAMP_ISO8601:timestamp}" }
  }
}
output {
  elasticsearch {
    hosts => ["localhost:9200"]
  }
}

Мониторинг Производительности Приложений

Отслеживание производительности приложений и метрик пользовательского опыта.

# Настройка агента New Relic
# Добавить в приложение
require 'newrelic_rpm'
# Метрики Datadog
from datadog import DogStatsdClient
statsd = DogStatsdClient('localhost', 8125)
statsd.increment('web.requests')
statsd.histogram('web.response_time', 0.75)

Управление Облачными Платформами

AWS CLI: Amazon Web Services

Взаимодействие с сервисами AWS из командной строки.

# Настройка AWS CLI
aws configure
# Список инстансов EC2
aws ec2 describe-instances
# Создание бакета S3
aws s3 mb s3://my-bucket-name
# Развертывание функции Lambda
aws lambda create-function --function-name myfunction --runtime python3.8 --role arn:aws:iam::123456789:role/lambda-role --handler lambda_function.lambda_handler --zip-file fileb://function.zip
# Список запущенных сервисов
aws ecs list-services --cluster my-cluster

Azure CLI: Microsoft Azure

Управление ресурсами и сервисами Azure.

# Вход в Azure
az login
# Создание группы ресурсов
az group create --name myResourceGroup --location eastus
# Создание виртуальной машины
az vm create --resource-group myResourceGroup --name myVM --image Ubuntu2204 --admin-username azureuser --generate-ssh-keys
# Список веб-приложений
az webapp list

Google Cloud: GCP

Развертывание и управление приложениями на Google Cloud Platform.

# Аутентификация в GCP
gcloud auth login
# Установка проекта
gcloud config set project my-project-id
# Развертывание приложения App Engine
gcloud app deploy
# Создание инстанса Compute Engine
gcloud compute instances create my-instance --zone=us-central1-a
# Управление кластером Kubernetes
gcloud container clusters create my-cluster --num-nodes=3

Мультиоблачное Управление

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

# Pulumi (мультиоблачный IaC)
import pulumi_aws as aws
import pulumi_gcp as gcp
# Создание бакета AWS S3
bucket = aws.s3.Bucket("my-bucket")
# Создание бакета GCP storage
gcp_bucket = gcp.storage.Bucket("my-gcp-bucket")

Управление Безопасностью и Секретами

HashiCorp Vault: Управление Секретами

HashiCorp Vault — это инструмент для безопасного доступа к секретам. Секрет — это все, к чему вы хотите строго контролировать доступ, например, ключи API, пароли или сертификаты.

# Запись секрета
vault kv put secret/myapp/config username=myuser password=mypassword
# Чтение секрета
vault kv get secret/myapp/config
# Удаление секрета
vault kv delete secret/myapp/config
# Включение метода аутентификации
vault auth enable kubernetes
# Создание политики
vault policy write myapp-policy myapp-policy.hcl

Сканирование Безопасности: Trivy & SonarQube

Сканирование контейнеров и кода на наличие уязвимостей безопасности.

# Сканирование контейнера Trivy
trivy image nginx:latest
# Сканирование файловой системы
trivy fs /path/to/project
# Анализ SonarQube
sonar-scanner -Dsonar.projectKey=myproject -Dsonar.sources=. -Dsonar.host.url=http://localhost:9000

Управление SSL/TLS Сертификатами

Управление SSL-сертификатами для безопасной связи.

# Let's Encrypt с Certbot
certbot --nginx -d example.com
# Продление сертификатов
certbot renew
# Проверка срока действия сертификата
openssl x509 -in cert.pem -text -noout | grep "Not After"
# Генерация самоподписанного сертификата
openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -days 365

Безопасность Контейнеров

Защита контейнеризированных приложений и сред выполнения.

# Запуск контейнера от имени непривилегированного пользователя
docker run --user 1000:1000 myapp
# Сканирование образа на уязвимости
docker scan myapp:latest
# Использование образов distroless
FROM gcr.io/distroless/java:11
COPY app.jar /app.jar
ENTRYPOINT ["java", "-jar", "/app.jar"]

Оптимизация Производительности

Мониторинг Производительности Системы

Независимо от того, управляете ли вы серверами, настраиваете развертывания или исправляете что-то, что только что сломалось в продакшене, эти команды помогут вам работать быстрее и умнее.

# Использование ЦП и памяти
htop
# Использование диска
df -h
# Сетевые подключения
netstat -tulpn
# Мониторинг процессов
ps aux | grep process_name
# Нагрузка системы
uptime
# Детали памяти
free -h

Настройка Производительности Приложений

Оптимизация производительности приложений и утилизации ресурсов.

# Мониторинг производительности JVM
jstat -gc -t PID 1s
# Производительность Node.js
node --inspect app.js
# Оптимизация запросов к базе данных
EXPLAIN ANALYZE SELECT * FROM table WHERE condition;
# Настройка Nginx
nginx -t && nginx -s reload

Тестирование Нагрузки и Бенчмаркинг

Тестирование производительности приложений в различных условиях нагрузки.

# Apache Bench
ab -n 1000 -c 10 http://example.com/
# wrk HTTP benchmarking
wrk -t12 -c400 -d30s http://example.com/
# Artillery load testing
artillery run load-test.yml
# Kubernetes horizontal pod autoscaler
kubectl autoscale deployment myapp --cpu-percent=70 --min=1 --max=10

Производительность Базы Данных

Мониторинг и оптимизация производительности и запросов базы данных.

# Производительность MySQL
SHOW PROCESSLIST;
SHOW STATUS LIKE 'Threads_connected';
# Мониторинг PostgreSQL
SELECT * FROM pg_stat_activity;
# Мониторинг Redis
redis-cli --latency
redis-cli info memory

Установка Инструментов

Менеджеры Пакетов

Установка инструментов с использованием системных менеджеров пакетов.

# Ubuntu/Debian
apt update && apt install -y docker.io kubectl terraform
# CentOS/RHEL
yum install -y docker kubernetes-client terraform
# macOS Homebrew
brew install docker kubectl terraform ansible

Установка Среды Выполнения Контейнеров

Настройка Docker и инструментов оркестрации контейнеров.

# Установка Docker
curl -fsSL https://get.docker.com | sh
systemctl start docker
systemctl enable docker
# Установка Docker Compose
curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose

Инструменты Командной Строки Облачных Платформ

Установка интерфейсов командной строки для основных облачных провайдеров.

# AWS CLI
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
unzip awscliv2.zip && ./aws/install
# Azure CLI
curl -sL https://aka.ms/InstallAzureCLIDeb | bash
# Google Cloud SDK
curl https://sdk.cloud.google.com | bash

Конфигурация Окружения

Управление Переменными Окружения

Управление конфигурацией в различных средах безопасно.

# Пример файла .env
DATABASE_URL=postgresql://user:pass@localhost/db
API_KEY=your-api-key-here
ENVIRONMENT=production
# Загрузка переменных окружения
export $(cat .env | xargs)
# Переменные окружения Docker
docker run -e NODE_ENV=production -e API_KEY=secret myapp
# Kubernetes configmap
kubectl create configmap app-config --from-env-file=.env

Обнаружение Сервисов и Конфигурация

Управление обнаружением сервисов и динамической конфигурацией.

# Регистрация сервиса Consul
consul services register myservice.json
# Проверка здоровья сервиса
consul health service web
# Хранилище ключ-значение Etcd
etcdctl put /config/database/host localhost
etcdctl get /config/database/host

Настройка Среды Разработки

Настройка согласованных сред разработки с использованием контейнеров.

# Dockerfile для разработки
FROM node:16-alpine
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 3000
CMD ["npm", "run", "dev"]
# Docker Compose для разработки
version: '3.8'
services:
  app:
    build: .
    ports:
      - '3000:3000'
    volumes:
      - .:/app
      - /app/node_modules
  database:
    image: postgres:13
    environment:
      POSTGRES_DB: myapp

Укрепление Производственной Среды

Защита и оптимизация производственных сред.

# Конфигурация сервиса Systemd
[Unit]
Description=My Application
After=network.target
[Service]
Type=simple
User=myapp
WorkingDirectory=/opt/myapp
ExecStart=/opt/myapp/bin/start
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.target

Автоматизация и Оркестрация

Автоматизация Инфраструктуры с Ansible

Автоматизация предоставления инфраструктуры и управления конфигурацией.

# Пример плейбука Ansible
---
- hosts: webservers
  become: yes
  tasks:
    - name: Install nginx
      apt:
        name: nginx
        state: present
    - name: Start nginx
      service:
        name: nginx
        state: started
        enabled: yes
    - name: Deploy application
      copy:
        src: /local/app
        dest: /var/www/html

Оркестрация Рабочих Процессов

Оркестрация сложных рабочих процессов и конвейеров данных.

# Пример DAG Apache Airflow
from airflow import DAG
from airflow.operators.bash_operator import BashOperator
from datetime import datetime

dag = DAG('data_pipeline',
          start_date=datetime(2023, 1, 1),
          schedule_interval='@daily')

extract = BashOperator(task_id='extract_data',
                       bash_command='extract.sh',
                       dag=dag)
transform = BashOperator(task_id='transform_data',
                         bash_command='transform.sh',
                         dag=dag)
extract >> transform

Автоматизация на Основе Событий

Запуск автоматизации на основе системных событий и вебхуков.

# Обработчик вебхука GitHub
#!/bin/bash
if [ "$1" == "push" ]; then
  git pull origin main
  docker build -t myapp .
  docker run -d --name myapp-$(date +%s) myapp
fi
# Вебхук Prometheus alertmanager
curl -X POST http://webhook-handler/deploy \
  -H "Content-Type: application/json" \
  -d '{"service": "myapp", "action": "restart"}'

Интеграция ChatOps

Интеграция операций DevOps с платформами чата для совместной автоматизации.

# Пример команды бота Slack
/deploy myapp to production
/rollback myapp to v1.2.3
/scale myapp replicas=5
/status infrastructure
# Вебхук Microsoft Teams
curl -H "Content-Type: application/json" \
  -d '{"text": "Deployment completed successfully"}' \
  $TEAMS_WEBHOOK_URL

Соответствующие Ссылки