Статьи

Puppet и CloudStack

Примечание куратора: содержание этой статьи было первоначально написано Дэвидом Нэлли в блоге Build a Cloud .

Эффективное использование CloudStack действительно требует управления конфигурацией (среди прочего). Я был пользователем марионеток в течение многих лет, предшествовавших моему участию в CloudStack, и поэтому у меня есть небольшой уклон к марионеткам.

Таким образом, я был безумно рад, когда увидел, как такие люди, как Джейсон Хэнкок , работают над автоматизацией конфигурации экземпляров CloudStack. Джейсон действительно знает Puppet и даже управляет новым стартапом Hosted Puppetmaster . Джейсон несколько раз демонстрировал это как на PuppetCamp LA 2012, так и на конференции CloudStack Collaboration Conference в 2012 году.

Это потрясающая работа, и вы должны потратить время, чтобы посмотреть оба его видео и проверить его блог.

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

А потом появился нож ….. плагин

Затем я узнал, что хорошие люди на
Edmunds.com написали
плагин CloudStack для ножа . Это было захватывающе само по себе, особенно как человек из CloudStack. Это был не просто
нож , который является инструментом командной строки для
Chef , другого инструмента управления конфигурацией. Нож обычно используется, чтобы обеспечить машины, и люди в Edmunds.com испекли в некоторой дополнительной удивительности. У них была возможность определять стек приложений на основе JSON-определения того, как выглядит стек.

Таким образом, можно определить Hadoop Cluster как это в JSON, в комплекте с конфигурацией сети и брандмауэра:

"name": "hadoop_cluster_a",
"description": "A small hadoop cluster with hbase",
"version": "1.0",
"environment": "production",
"servers": [
  {
    "name": "zookeeper-a, zookeeper-b, zookeeper-c",
    "description": "Zookeeper nodes",
    "template": "rhel-5.6-base",
    "service": "small",
    "port_rules": "2181",
    "run_list": "role[cluster_a], role[zookeeper_server]",
    "actions": [
      { "knife_ssh": ["role:zookeeper_server", "sudo chef-client"] }
    ]
  },
  {
    "name": "hadoop-master",
    "description": "Hadoop master node",
    "template": "rhel-5.6-base",
    "service": "large",
    "networks": "app-net, storage-net",
    "port_rules": "50070, 50030, 60010",
    "run_list": "role[cluster_a], role[hadoop_master], role[hbase_master]"
  },
  {
    "name": "hadoop-worker-a hadoop-worker-b hadoop-worker-c",
    "description": "Hadoop worker nodes",
    "template": "rhel-5.6-base",
    "service": "medium",
    "port_rules": "50075, 50060, 60030",
    "run_list": "role[cluster_a], role[hadoop_worker], role[hbase_regionserver]",
    "actions": [
      { "knife_ssh": ["role:hadoop_master", "sudo chef-client"] },
      { "http_request": "http://${hadoop-master}:50070/index.jsp" }
    ]
  }

А затем развернуть кластер Hadoop так же просто, как:

    knife cs stack create hadoop_cluster_a

Как парень из CloudStack, я подумал, что это было круто, сложные приложения неожиданно легко развертывались, и это именно та автоматизация, которую CloudStack должен включить.

РЕВНОСТЬ

Как любитель марионеток, мне стало немного грустно, ничего такого не было для людей, использующих кукол, и я ревновал.

Затем я пошел в FOSDEM

В FOSDEM некоторые сотрудники картографической компании говорили об использовании CloudStack и отмечали, что им нужны типы ресурсов CloudStack. Сначала я был смущен. Затем они показали мне некоторые работы Кена Барбера по ресурсам и типам OpenNebula , и я понял, что это именно то, что сыграет роль стекового функционала ножа-облака. Во многих отношениях это действительно будет инфраструктура как код. Это будет не просто настройка ОС и программного обеспечения на компьютере, но это будет настройка самой машины и множества машин. Вы можете буквально иметь большую часть своей инфраструктуры в виде кода.

Это было круто, но это было для OpenNebula, а не для CloudStack — я начал глючить таких людей, как Тейо Тайри иДэн Боде об этом.

Puppetconf

Затем я посетил Puppetconf и увидел, что неподражаемый Дэн Боде демонстрирует похожий (хотя и развившийся)
тип ресурса для Google Compute Engine . Я был еще более завистлив в этом вопросе.

А потом, сразу после Дня благодарения — Дэн Боде представил
ресурсы и типы для Apache CloudStack .

Теперь вы можете использовать Puppet не только для запроса CloudStack, но вы также можете определить свою инфраструктуру.

    cloudstack_instance { 'foo1':
      ensure     => present,
      flavor     => 'M1.Medium',
      zone       => 'FMT-ACS-001',
      image      => 'CentOS 6.3(64-bit)',
      network    => 'davidsnetwork',
    }

Как и с другими типами ресурсов, вы можете определить значения по умолчанию:

Cloudstack_instance{
  image   => 'CentOS 6.3(64bit)',
  flavor  => 'M1.Medium',
  zone    => 'FMT-ACS-001',
  network => 'davidsnetwork',
  keypair => 'davidskeys',
}

Что значительно упрощает определение экземпляров и выглядит примерно так:

cloudstack_instance { 'bar':
  ensure  => $::ensure,
  group   => 'role=db'
}

Конечно, это все еще одна машина, поэтому, если мы хотим иметь многолучевой LAMP-стек.

class my_web_stack {
  cloudstack_instance { 'httpd':
    ensure => present,
    group  => 'role=httpd',
  }

  cloudstack_instance { 'mysql':
    ensure => present,
    group  => 'role=mysql',
  }
}

Надеюсь, это вас так волнует, что вы можете теперь куколки ВСЕХ своих экземпляров CloudStack.