Читаем Terraform: инфраструктура на уровне кода полностью

• Масштабировать количество ВМ и контейнеров в обе стороны в зависимости от нагрузки (автомасштабирование).

• Распределять трафик между своими ВМ и контейнерами (балансировка нагрузки).

• Позволять своим ВМ и контейнерам находить друг друга и общаться между собой по сети (обнаружение сервисов).

Выполнение этих задач находится в сфере ответственности средств оркестрации, таких как Kubernetes, Marathon/Mesos, Amazon Elastic Container Service (Amazon ECS), Docker Swarm и Nomad. Например, Kubernetes позволяет описывать и администрировать контейнеры Docker в виде кода. Вначале развертывается кластер Kubernetes, который представляет собой набор серверов для выполнения ваших контейнеров Docker. У большинства облачных провайдеров есть встроенная ­поддержка развертывания управляемых кластеров Kubernetes: вроде Amazon Elastic Container Service for Kubernetes (Amazon EKS), Google Kubernetes Engine (GKE) и Azure Kubernetes Service (AKS).

Подготовив рабочий кластер, вы можете описать развертывание своего контейнера Docker в виде кода внутри YAML-файла:

apiVersion: apps/v1

# Используем объект Deployment для развертывания нескольких реплик вашего

# Docker-контейнера (возможно, больше одного) и декларативного выкатывания

# обновлений для него

kind: Deployment

# Метаданные этого развертывания, включая его имя

metadata:

  name: example-app

# Спецификация, которая конфигурирует это развертывание

spec:

  # Благодаря этому развертывание знает, как искать ваш контейнер

  selector:

    matchLabels:

      app: example-app

# Приказываем объекту Deployment развернуть три реплики Docker-контейнера

replicas: 3

# Определяет способ обновления развертывания. Здесь указываем скользящие обновления

strategy:

  rollingUpdate:

    maxSurge: 3

    maxUnavailable: 0

  type: RollingUpdate

# Этот шаблон описывает, какие контейнеры нужно развернуть

template:

# Метаданные контейнера, включая метки

metadata:

  labels:

    app: example-app

# Спецификация контейнера

spec:

  containers:

    # Запускаем Apache на порту 80

    - name: example-app

      image: httpd:2.4.39

      ports:

        - containerPort: 80

Этот файл говорит Kubernetes, что нужно создать развертывание, которое декларативно описывает следующее.

• Один или несколько контейнеров Docker для совместного запуска. Эта группа контейнеров называется подом, или под-оболочкой. Под, описанный в приведенном выше коде, содержит единственный контейнер, который запускает Apache.

• Настройки каждого контейнера Docker в под-оболочке. В нашем примере под-оболочка настраивает Apach для прослушивания порта 80.

• Сколько копий (реплик) под-оболочки должно быть в вашем кластере. У нас указано три реплики. Kubernetes автоматически определяет, в какой области кластера их следует развернуть, используя алгоритм планирования для выбора оптимальных серверов с точки зрения высокой доступности (например, каждая под-оболочка может оказаться на отдельном сервере, чтобы сбой на одном из них не остановил работу всего приложения), ресурсов (скажем, выбираются серверы с доступными портами, процессором, памятью и другими ресурсами, необходимыми вашему контейнеру), производительности (в частности, выбираются наименее загруженные серверы) и т. д. Кроме того, Kubernetes постоянно следит за тем, чтобы в кластере всегда было три реплики. Для этого автоматически заменяется любая под-оболочка, вышедшая из строя или переставшая отвечать.

• Как развертывать обновления. Когда выходит новая версия контейнера Docker, наш код выкатывает три новые реплики, ждет, когда они станут работоспособными, и затем удаляет три старые копии.

Так много возможностей всего в нескольких строчках на YAML! Чтобы развернуть свое приложение в Kubernetes, нужно выполнить команду kubectlapply-fexample-app.yml. Чтобы выкатить обновления, вы можете отредактировать YAML-файл и снова запустить kubectlapply.

Средства инициализации ресурсов

В отличие от инструментов для управления конфигурацией, шаблонизации серверов и оркестрации, код которых выполняется на каждом сервере, средства­ инициализации ресурсов, такие как Terraform, CloudFor­mation и OpenStack Heat, ­отвечают за создание самих серверов. С их помощью можно создавать не только серверы, но и базы данных, кэши, балансировщики нагрузки, очереди, си­сте­мы мониторинга, настройки подсетей и брандмауэра, правила маршрутизации, сертификаты SSL и почти любой другой аспект вашей инфраструктуры (рис. 1.5).

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

Например, следующий код развертывает веб-сервер с помощью Terraform:

resource "aws_instance" "app" {

  instance_type     = "t2.micro"

  availability_zone = "us-east-2a"

  ami               = "ami-0c55b159cbfafe1f0"

  user_data = <<-EOF

              #!/bin/bash

              sudo service apache2 start

              EOF

}

Перейти на страницу:

Все книги серии Бестселлеры O'Reilly

Искусство управления IT-проектами
Искусство управления IT-проектами

В отличие от множества трудов, посвященных руководству проектами и командами, в этой книге не проповедуются никакие новые учения и не превозносятся великие теории. Скотт Беркун считает залогом успеха практику и разнообразие подходов. В книге описываются основные сложности и проблемные ситуации, возникающие в работе менеджера проекта, даны рекомендации по выходу из них.Издание предназначено не только для лидеров команд и менеджеров высшего звена, но и для программистов, тестеров и других исполнителей конкретных проектных заданий. Также оно будет полезно студентам, изучающим бизнес-менеджмент, проектирование изделий или программную инженерию.Текст нового издания значительно переработан автором с целью добиться большей ясности, кроме того, книга дополнена новым приложением и более чем 120 практическими упражнениями.

Скотт Беркун

Деловая литература
iOS. Приемы программирования
iOS. Приемы программирования

Книга, которую вы держите в руках, представляет собой новый, полностью переписанный сборник приемов программирования по работе с iOS. Он поможет вам справиться с наболевшими проблемами, с которыми приходится сталкиваться при разработке приложений для iPhone, iPad и iPod Touch. Вы быстро освоите всю информацию, необходимую для начала работы с iOS 7 SDK, в частности познакомитесь с решениями для добавления в ваши приложения реалистичной физики или движений — в этом вам помогут API UIKit Dynamics.Вы изучите новые многочисленные способы хранения и защиты данных, отправки и получения уведомлений, улучшения и анимации графики, управления файлами и каталогами, а также рассмотрите многие другие темы. При описании каждого приема программирования приводятся образцы кода, которые вы можете смело использовать.

Вандад Нахавандипур

Программирование, программы, базы данных / Программирование / Книги по IT

Похожие книги