<?xml version='1.0' encoding='utf-8' ?>
<!DOCTYPE bookinfo PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
<!ENTITY % BOOK_ENTITIES SYSTEM "cloudstack.ent">
%BOOK_ENTITIES;
]>

<!-- Licensed to the Apache Software Foundation (ASF) under one
 or more contributor license agreements.  See the NOTICE file
 distributed with this work for additional information
 regarding copyright ownership.  The ASF licenses this file
 to you under the Apache License, Version 2.0 (the
 "License"); you may not use this file except in compliance
 with the License.  You may obtain a copy of the License at
 
   http://www.apache.org/licenses/LICENSE-2.0
 
 Unless required by applicable law or agreed to in writing,
 software distributed under the License is distributed on an
 "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 KIND, either express or implied.  See the License for the
 specific language governing permissions and limitations
 under the License.
-->

<section id="cloud-infrastructure-overview">
    <title>Cloud Infrastructure Overview</title>
    <para>
        The Management Server manages one or more zones (typically,
        datacenters) containing host computers where guest virtual
        machines will run. The cloud infrastructure is organized as follows:
    </para>
    <itemizedlist>
        <listitem>
            <para>
               Zone: Typically, a zone is equivalent to a single
               datacenter. A zone consists of one or more pods and secondary
               storage.
            </para>
        </listitem>
        <listitem>
           <para>
              Pod: A pod is usually one rack of hardware that includes a
              layer-2 switch and one or more clusters.
           </para>
        </listitem>
        <listitem>
            <para>
               Cluster: A cluster consists of one or more hosts and primary
               storage.
            </para>
        </listitem>
        <listitem>
            <para>
               Host: A single compute node within a cluster. The hosts are
               where the actual cloud services run in the form of guest
               virtual machines.
            </para>
        </listitem>
        <listitem>
            <para>
               Primary storage is associated with a cluster, and it stores
               the disk volumes for all the VMs running on hosts in that cluster.
            </para></listitem>
        <listitem>
            <para>
                Secondary storage is associated with a zone, and it stores
                templates, ISO images, and disk volume snapshots.
            </para>
        </listitem>
    </itemizedlist>
    <mediaobject>
        <imageobject>
            <imagedata fileref="./images/infrastructure-overview.png" />
        </imageobject>
        <textobject><phrase>infrastructure_overview.png: Nested organization of a zone</phrase></textobject>
    </mediaobject>
    <para><emphasis role="bold">More Information</emphasis></para>
    <para>For more information, see documentation on cloud infrastructure concepts.</para>
</section>
