Terraform: инфраструктура на уровне кода | страница 16



Контейнеры эмулируют пользовательское пространство ОС5. Для изоляции процессов, памяти, точек монтирования и сети запускается среда выполнения контейнеров, такая как Docker, CoreOS rkt или cri-o. Преимущество этого подхода в том, что любой контейнер, который выполняется в данной среде, может видеть только собственно пользовательское пространство, поэтому он изолирован от основного компьютера и других контейнеров. При этом он ведет себя одинаково в любой среде (например, на вашем компьютере, сервере проверки качества, боевом сервере и т. д.). Но есть и недостаток: все контейнеры, запущенные на одном сервере, одновременно пользуются ядром его ОС и его оборудованием, поэтому достичь того уровня изоляции и безопасности, который вы получаете в ВМ, намного сложнее6. Поскольку применяются общие ядро и оборудование, ваши контейнеры могут загружаться в считаные миллисекунды и практически не будут требовать дополнительных ресурсов процессора или памяти. Образы контейнеров можно описывать в виде кода, используя такие инструменты, как Docker и CoreOS rkt.

Например, ниже представлен шаблон Packer под названием web-server.json, создающий Amazon Machine Image (AMI) — образ ВМ, который можно запускать в AWS:

{

  "builders": [{

    "ami_name": "packer-example",

    "instance_type": "t2.micro",

    "region": "us-east-2",

    "type": "amazon-ebs",

    "source_ami": "ami-0c55b159cbfafe1f0",

    "ssh_username": "ubuntu"

  }],

  "provisioners": [{

    "type": "shell",

    "inline": [

      "sudo apt-get update",

      "sudo apt-get install -y php apache2",

      "sudo git clone https://github.com/brikis98/php-app.git /var/www/html/app"

    ],

    "environment_vars": [

      "DEBIAN_FRONTEND=noninteractive"

    ]

  }]

}

Шаблон Packer настраивает тот же веб-сервер Apache, который мы видели в файле setup-webserver.sh, и использует тот же код на bash7. Единственное отличие от предыдущего кода в том, что Packer не запускает веб-сервер Apache (с помощью коман­ды вроде sudoserviceapache2start). Дело в том, что шаблоны серверов обычно применяются для установки ПО в образах, а запуск этого ПО должен происходить во время выполнения образа (например, когда он будет развернут на сервере).

Вы можете создать AMI из этого шаблона, запустив команду packerbuildwebserver.json. Когда сборка завершится, полученный образ AMI можно будет установить на все ваши серверы в AWS и сконфигурировать Apache для запуска во время загрузки компьютера (пример этого см. в подразделе «Средства оркестрации» на с. 35). В результате все они будут запущены абсолютно одинаково.