Примечание куратора: содержание этой статьи было первоначально написано Дэвидом Нэлли в блоге 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.