2014年10月4日 星期六

安裝 OpenStack @ Ubuntu 14.04 (6) - 佈署第一個 VM

安裝 OpenStack @ Ubuntu 14.04 (6) - 佈署第一個 VM

目錄

1、安裝環境說明

  • OS:Ubuntu 14.04 LTS

  • Controller

    • IP:10.0.0.11 / 24
    • Gateway:10.0.0.1
  • Network

    • Management IP:10.0.0.21 / 24 (eth0)
    • Gateway:10.0.0.1
    • Instance Tunnel IP:10.0.1.21 / 24 (eth1)
    • External Interface (eth2)
      • IP:不指定 IP
      • 設定方式如下:(修改 /etc/network/interfaces)

    auto eth2
    iface eth2 inet manual
    up ip link set dev $IFACE up
    down ip link set dev $IFACE down

  • Compute 1

    • Management IP:10.0.0.31 / 24
    • Gateway:10.0.0.1
    • Instance Tunnel IP:10.0.1.31
  • 修改每個 node 的 /etc/hosts 檔案,並加入以下內容:

    10.0.0.11 controller
    10.0.0.21 network
    10.0.0.31 compute1

    • 使用者身分:root

    2、前言

    截至目前為止,一共安裝了 OpenStack 的服務包含以下:

    1. Identity Service (Keystone)
    2. Image Service (Glance)
    3. Compute Service (Nova)
    4. Networking Service (Neutron)

    若要啟動一個 VM instance,其實最少只要以上服務即可,接著以下來試著啟動一個 VM instance。

    3、產生金鑰對(keypair)

    大部分雲端系統支援公開金鑰認證(public key authentication)而並非簡單的帳號密碼認證,因此在啟動 VM instance 之前,我們要透過 ssh-keygen 工具來產生金鑰並加入 OpenStack 環境中使用。

    以下命令在 controller node 上執行

    # 以 demo 的身分執行
    controller# source ~/OpenStack/demo-openrc.sh
    
    # 產生金鑰對
    controller# ssh-keygen
    
    # 將產生的金鑰(公開)加入 OpenStack 環境中,並設定名稱為 demo-key
    controller# nova keypair-add --pub-key /root/.ssh/id_rsa.pub demo-key
    
    # 驗證公開金鑰是否已經匯入 OpenStack 環境中
    controller# nova keypair-list
    +----------+-------------------------------------------------+
    | Name     | Fingerprint                                     |
    +----------+-------------------------------------------------+
    | demo-key | 61:fe:66:8b:ee:dc:05:c9:3f:b0:7f:c4:92:34:df:a6 |
    +----------+-------------------------------------------------+

    4、佈署 & 啟動第一台 VM

    在開始佈署 VM instance 之前,有幾個部分是必須先確定的,包含 flavor(VM 的類型)、映像檔、網路、security group、公開金鑰、instance name …. 等等。

    4.1 flavor

    flavor 表示一群 VM 資源定義的集合,而定義中包含 VM 所使用的 vCPU 數量、記憶體大小、儲存空間 … 等資訊,以下列出目前預先定義好的 flavor 資訊:

    controller# nova flavor-list
    +----+-----------+-----------+------+-----------+------+-------+-------------+-----------+
    | ID | Name      | Memory_MB | Disk | Ephemeral | Swap | VCPUs | RXTX_Factor | Is_Public |
    +----+-----------+-----------+------+-----------+------+-------+-------------+-----------+
    | 1  | m1.tiny   | 512       | 1    | 0         |      | 1     | 1.0         | True      |
    | 2  | m1.small  | 2048      | 20   | 0         |      | 1     | 1.0         | True      |
    | 3  | m1.medium | 4096      | 40   | 0         |      | 2     | 1.0         | True      |
    | 4  | m1.large  | 8192      | 80   | 0         |      | 4     | 1.0         | True      |
    | 5  | m1.xlarge | 16384     | 160  | 0         |      | 8     | 1.0         | True      |
    +----+-----------+-----------+------+-----------+------+-------+-------------+-----------+

    從上表可以看到,flavor 的類型從 m1.tiny 到 m1.xlarge 都有,使用者可以根據需求決定要啟動的 VM instance 屬於哪種 flavor。

    以下範例我們將會以 m1.tiny 作示範。

    4.2 映像檔

    以下列出目前可用的映像檔:

    controller#  nova image-list
    +--------------------------------------+---------------------+--------+--------+
    | ID                                   | Name                | Status | Server |
    +--------------------------------------+---------------------+--------+--------+
    | 0985b2f3-058e-4ab9-84e3-65c51f849408 | cirros-0.3.3-x86_64 | ACTIVE |        |
    | 77c0d5f8-1bcc-4937-932c-72f4b0eccbc3 | cirros-0.3.3-x86_64 | ACTIVE |        |
    +--------------------------------------+---------------------+--------+--------+

    以下範例我們將會以 ID 為 77c0d5f8-1bcc-4937-932c-72f4b0eccbc3 的映像檔作示範。

    4.3 網路

    以下列出可用的網路區段:

    controller# neutron net-list
    +--------------------------------------+----------+------------------------------------------------------+
    | id                                   | name     | subnets                                              |
    +--------------------------------------+----------+------------------------------------------------------+
    | 629c575d-5d2e-4258-bb96-d2def517aa04 | ext-net  | 4af846a3-3e14-450d-b620-134cb1479e0d 192.168.20.0/24 |
    | 65c99acc-6438-493e-bbde-b3c0def3f575 | demo-net | eb46a51b-c1b0-4df9-9046-a19612fa532f 192.168.3.0/24  |
    +--------------------------------------+----------+------------------------------------------------------+

    以下範例我們將會使用 demo-net(192.168.3.0/24) 作示範。

    4.4 Security Group

    以下列出目前所有的 security group:

    controller#  nova secgroup-list
    +--------------------------------------+---------+-------------+
    | Id                                   | Name    | Description |
    +--------------------------------------+---------+-------------+
    | 909f974a-771d-4087-ae83-b6ed3aa88e56 | default | default     |
    +--------------------------------------+---------+-------------+

    因為我們先前沒有設定 security group,因此這邊只有 default 一項,而 default 這個群組的設定會阻擋所有來自遠端對 VM instance 的存取。

    4.5 啟動 VM instance

    所有必要條件都確認後,透過以下指令啟動 VM instance:

    nova boot --flavor m1.tiny --image 77c0d5f8-1bcc-4937-932c-72f4b0eccbc3 --nic net-id=65c99acc-6438-493e-bbde-b3c0def3f575 --security-group default --key-name demo-key demo-instance1
    +--------------------------------------+------------------------------------------------------------+
    | Property                             | Value                                                      |
    +--------------------------------------+------------------------------------------------------------+
    | OS-DCF:diskConfig                    | MANUAL                                                     |
    | OS-EXT-AZ:availability_zone          | nova                                                       |
    | OS-EXT-STS:power_state               | 0                                                          |
    | OS-EXT-STS:task_state                | scheduling                                                 |
    | OS-EXT-STS:vm_state                  | building                                                   |
    | OS-SRV-USG:launched_at               | -                                                          |
    | OS-SRV-USG:terminated_at             | -                                                          |
    | accessIPv4                           |                                                            |
    | accessIPv6                           |                                                            |
    | adminPass                            | gzkYV2K7nsHc                                               |
    | config_drive                         |                                                            |
    | created                              | 2014-10-04T04:21:56Z                                       |
    | flavor                               | m1.tiny (1)                                                |
    | hostId                               |                                                            |
    | id                                   | 29706374-fa90-4082-b51b-ca6a6cdf2a5e                       |
    | image                                | cirros-0.3.3-x86_64 (77c0d5f8-1bcc-4937-932c-72f4b0eccbc3) |
    | key_name                             | demo-key                                                   |
    | metadata                             | {}                                                         |
    | name                                 | demo-instance1                                             |
    | os-extended-volumes:volumes_attached | []                                                         |
    | progress                             | 0                                                          |
    | security_groups                      | default                                                    |
    | status                               | BUILD                                                      |
    | tenant_id                            | 7539436331ca4f9783bf93163e2a2e0f                           |
    | updated                              | 2014-10-04T04:21:56Z                                       |
    | user_id                              | bc1ae50e167f45edb064e582702c5792                           |
    +--------------------------------------+------------------------------------------------------------+

    4.6 確認 VM 狀態

    上述指令完成後,Nova Scheduler 會尋找合適的 compute node 將 VM instance 啟動,可以透過以下指令檢查一下目前 VM instance 的狀態:

    controller# nova list
    +--------------------------------------+----------------+--------+------------+-------------+----------------------+
    | ID                                   | Name           | Status | Task State | Power State | Networks             |
    +--------------------------------------+----------------+--------+------------+-------------+----------------------+
    | 29706374-fa90-4082-b51b-ca6a6cdf2a5e | demo-instance1 | ACTIVE | -          | Running     | demo-net=192.168.3.3 |
    +--------------------------------------+----------------+--------+------------+-------------+----------------------+

    從上面可以看到 VM instance 的 ID、Network、Status、IP …. 等資訊。

    5、存取 VM instance 並測試

    因為我們在之前有設定 noVNC,可透過 browser 連線到目前運行中的 VM instance,可透過以下指令取得 noVNC 的連線網址:

    controller# nova get-vnc-console demo-instance1 novnc
    +-------+---------------------------------------------------------------------------------+
    | Type  | Url                                                                             |
    +-------+---------------------------------------------------------------------------------+
    | novnc | http://controller:6080/vnc_auto.html?token=9395dcbd-b9e8-457b-b6fe-c7e07a268ba9 |
    +-------+---------------------------------------------------------------------------------+

    有了以上的網址後,就可以透過 browser 以 noVNC 的方式連線到 VM instance 內。

    6、問題排除

    6.1 無法解析 domain name

    透過 noVNC 連線到剛佈署好的 VM 後,可以連到 internet,但 DNS 忘了設定…..導致於 domain name 無法解析,因此我們在 controller node 加入以下設定來解決:

    # 顯示目前的 subnet
    controller# neutron subnet-list
    +--------------------------------------+-------------+-----------------+----------------------------------------------------+
    | id                                   | name        | cidr            | allocation_pools                                   |
    +--------------------------------------+-------------+-----------------+----------------------------------------------------+
    | 4af846a3-3e14-450d-b620-134cb1479e0d | ext-subnet  | 192.168.20.0/24 | {"start": "192.168.20.11", "end": "192.168.20.30"} |
    | eb46a51b-c1b0-4df9-9046-a19612fa532f | demo-subnet | 192.168.3.0/24  | {"start": "192.168.3.1", "end": "192.168.3.253"}   |
    +--------------------------------------+-------------+-----------------+----------------------------------------------------+
    
    # 為 subnet 補上 domain name server 資訊
    controller# neutron subnet-update demo-subnet --dns_nameservers list=true 8.8.8.8 8.8.4.4

    如此一來,之後產生的 VM 就可以解析 domain name 囉!

    7、參考資料

    1 則留言: