2014年9月25日 星期四

安裝 OpenStack @ Ubuntu 14.04 (3) - 安裝 Image Service (Glance)

安裝 OpenStack @ Ubuntu 14.04 (3) - 安裝 Image Service (Glance)

目錄

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、Image Service 概觀

    在 OpenStack 中,Image Service 的用途在於讓使用者可以尋找/註冊/取得虛擬機器的映像檔來使用,而提供這樣的服務的專案稱為 Glance

    Glance 是用來管理虛擬磁碟的 image 之用,除了可以讓使用者新增 image 之外,也可以從正在運作的 server 上取得 snapshop 來作為 image 的備份或者是其他虛擬磁碟的 image。

    Glance 包含了以下四個主要部分:

    • glance-api

      • 接受來自其他服務的 API call
    • glance-registry

      • 管理 image 的 metadata 之用(例如:image 的大小 & 類型)。
    • Database

      • 儲存 image metadata 之用,可選擇 MySQL or SQLite。
    • 存放 image 的 storage repository

      • 存放 image 的位置有很多種不同的選擇,例如:一般的檔案系統、Object Storage、RADOS Block device、甚至是 Amazon S3 也可以。(但某些 repository 僅支援唯讀模式)

    OpenStack conceptual architecture

    以上是 OpenStack 的概念架構圖,從圖中可以看出 Glance 的定位:

    1. 可以將 image 存於 Swift 中
    2. 提供 image 給 Nova 作為執行 VM 之用
    3. 使用者可以透過 Horizon 呼叫 Glance API 來管理 image
    4. 在使用 Glance API 之前,都需要通過 Keystone 的認證

    3、安裝 Glance

    3.1 安裝套件

    這個範例會將 Glance 安裝在 controller 上,執行以下指令:

    $ apt-get install glance python-glanceclient

    3.2 設定資料庫

    原本預設 Glance 會將資料存於 SQLite 中,為了跟其他服務一致,以下把它改成使用 MySQL,首先先在 MySQL 中建立 glance 資料庫並給定權限:

    root@controller:~/OpenStack# mysql -u root -p
    Enter password:
    Welcome to the MySQL monitor.  Commands end with ; or \g.
    Your MySQL connection id is 107
    Server version: 5.5.38-0ubuntu0.14.04.1 (Ubuntu)
    
    Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved.
    
    Oracle is a registered trademark of Oracle Corporation and/or its
    affiliates. Other names may be trademarks of their respective
    owners.
    
    Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
    
    mysql> create database glance;
    Query OK, 1 row affected (0.00 sec)
    
    mysql> grant all privileges on glance.* to 'glance'@'localohost' identified by 'YOUR_GLANCE_DBPASS';
    Query OK, 0 rows affected (0.00 sec)
    
    mysql> grant all privileges on glance.* to 'glance'@'%' identified by 'YOUR_DB_PASSWORD';
    Query OK, 0 rows affected (0.00 sec)
    
    mysql> exit

    3.3 修改設定

    接著修改 Glance API & Registry 的設定,分別是以下的兩個檔案:

    • /etc/glance/glance-api.conf
    • /etc/glance/glance-registry.conf

    修改 [database] 區段,移除原本的 SQLite 設定,改為以下內容:

    [database]
    connection = mysql://glance:YOUR_GLANCE_DBPASS@controller/glance

    3.4 建立 Glance 用 MySQL DB

    建立 MySQL DB for Glance:

    $ sh -c "glance-manage db_sync" glance

    3.5 將 Glance 與 Identity Service(Keystone) 連結

    每個 service 都必須跟 Identity Service(Keystone) 進行連結,以下分成兩個步驟:

    3.5.1 建立認證用帳號(Glance 管理者)

    # 建立認證用帳號 & E-Mail
    keystone user-create --name=glance --pass=YOUR_GLANCE_AUTH_PASS \
       --email=admin@example.com
    +----------+----------------------------------+
    | Property |              Value               |
    +----------+----------------------------------+
    |  email   |        admin@example.com         |
    | enabled  |               True               |
    |    id    | ec4848f8a9d342038668029c78f77565 |
    |   name   |              glance              |
    | username |              glance              |
    +----------+----------------------------------+
    
    # 指定使用 service Tenant 並隸屬於 admin Role
    $ keystone user-role-add --user=glance --tenant=service --role=admin

    3.5.2 註冊 Image Service

    同樣修改 API(/etc/glance/glance-api.conf) & Registry(/etc/glance/glance-registry.conf) 兩個設定檔,修改 [keystone_authtoken] & [paste_deploy] 區段內容如下:

    [keystone_authtoken]
    auth_uri = http://controller:5000
    auth_host = controller
    auth_port = 35357
    auth_protocol = http
    admin_tenant_name = service
    admin_user = glance
    admin_password = YOUR_GLANCE_AUTH_PASS
    
    [paste_deploy]
    flavor = keystone

    最後下指令將 Glance 註冊至 Keystone 中並產生 API 服務端點,讓 OpenStack 其他的 service 可以知道 Image Service(Glance) 所在的位置:

    # 註冊 Glance 服務
    $ keystone service-create --name=glance --type=image --description="OpenStack Image Service"
    +-------------+----------------------------------+
    |   Property  |              Value               |
    +-------------+----------------------------------+
    | description |     OpenStack Image Service      |
    |   enabled   |               True               |
    |      id     | 95a34885c3dc486f98153cf2d3740355 |
    |     name    |              glance              |
    |     type    |              image               |
    +-------------+----------------------------------+
    
    # 註冊 Glance API 端點服務
    $ keystone endpoint-create --service-id=$(keystone service-list | awk '/ image / {print $2}') --publicurl=http://controller:9292 --internalurl=http://controller:9292 --adminurl=http://controller:9292
    +-------------+----------------------------------+
    |   Property  |              Value               |
    +-------------+----------------------------------+
    |   adminurl  |      http://controller:9292      |
    |      id     | 4ca758a4fe4049c491a5c5ace5b792f2 |
    | internalurl |      http://controller:9292      |
    |  publicurl  |      http://controller:9292      |
    |    region   |            regionOne             |
    |  service_id | 95a34885c3dc486f98153cf2d3740355 |
    +-------------+----------------------------------+

    3.6 啟動服務

    最後重新啟動 Glance service 讓之前的設定生效:

    $ service glance-registry restart
    $ service glance-api restart

    4、驗證 Glance 安裝是否成功

    我們可以透過下載隨意一個 linux image 並註冊到 Glance 來測試安裝是否成功。

    下載 Linux image:

    $ mkdir /tmp/images
    $ cd /tmp/images/
    $ wget http://cdn.download.cirros-cloud.net/0.3.3/cirros-0.3.3-x86_64-disk.img

    將下載的 Linux image 註冊到 Glance:

    # 透過 shell script 匯入 OS_USERNAME / OS_PASSWORD / OS_TENANT_NAME / OS_AUTH_URL 等環境變數
    $ source ~/OpenStack/admin-openrc.sh
    
    # 註冊 image 至 Glance
    $ glance image-create --name "cirros-0.3.3-x86_64" --disk-format qcow2 --container-format bare --is-public true --progress < cirros-0.3.3-x86_64-disk.img
    [=============================>] 100%
    +------------------+--------------------------------------+
    | Property         | Value                                |
    +------------------+--------------------------------------+
    | checksum         | 133eae9fb1c98f45894a4e60d8736619     |
    | container_format | bare                                 |
    | created_at       | 2014-09-24T23:29:42                  |
    | deleted          | False                                |
    | deleted_at       | None                                 |
    | disk_format      | qcow2                                |
    | id               | 77c0d5f8-1bcc-4937-932c-72f4b0eccbc3 |
    | is_public        | True                                 |
    | min_disk         | 0                                    |
    | min_ram          | 0                                    |
    | name             | cirros-0.3.3-x86_64                  |
    | owner            | 27466ca061e34b469f84da1e57b5605e     |
    | protected        | False                                |
    | size             | 13200896                             |
    | status           | active                               |
    | updated_at       | 2014-09-24T23:29:42                  |
    | virtual_size     | None                                 |
    +------------------+--------------------------------------+

    因為 Linux image 都可以直接在網路上取得,所以我們也不需要真的下載到本機空間,也可以直接透過 copy-from 參數來使用外部的連結來註冊:

    # 使用 copy-from 變數註冊來自外部的 image
    $ glance image-create --name "cirros-0.3.3-x86_64" --disk-format qcow2 --container-format bare --is-public true --copy-from http://download.cirros-cloud.net/0.3.3/cirros-0.3.3-x86_64-disk.img
    +------------------+--------------------------------------+
    | Property         | Value                                |
    +------------------+--------------------------------------+
    | checksum         | None                                 |
    | container_format | bare                                 |
    | created_at       | 2014-09-24T23:36:17                  |
    | deleted          | False                                |
    | deleted_at       | None                                 |
    | disk_format      | qcow2                                |
    | id               | 0985b2f3-058e-4ab9-84e3-65c51f849408 |
    | is_public        | True                                 |
    | min_disk         | 0                                    |
    | min_ram          | 0                                    |
    | name             | cirros-0.3.3-x86_64                  |
    | owner            | 27466ca061e34b469f84da1e57b5605e     |
    | protected        | False                                |
    | size             | 13200896                             |
    | status           | queued                               |
    | updated_at       | 2014-09-24T23:36:17                  |
    | virtual_size     | None                                 |
    +------------------+--------------------------------------+

    最後透過以下指令可以查詢目前 image 的註冊狀況:

    $ glance image-list
    +--------------------------------------+---------------------+-------------+------------------+----------+--------+
    | ID                                   | Name                | Disk Format | Container Format | Size     | Status |
    +--------------------------------------+---------------------+-------------+------------------+----------+--------+
    | 77c0d5f8-1bcc-4937-932c-72f4b0eccbc3 | cirros-0.3.3-x86_64 | qcow2       | bare             | 13200896 | active |
    | 0985b2f3-058e-4ab9-84e3-65c51f849408 | cirros-0.3.3-x86_64 | qcow2       | bare             | 13200896 | active |
    +--------------------------------------+---------------------+-------------+------------------+----------+--------+
    

    4 則留言:

    1. 你好
      你這裡下載0.3.2版
      wget http://cdn.download.cirros-cloud.net/0.3.2/cirros-0.3.2-x86_64-disk.img
      但是下一步是用0.3.3版作image
      不知是否打錯?

      回覆刪除
      回覆
      1. 謝謝您的提醒,的確是打錯了,已經修正!

        刪除
    2. 你好
      auth_uri = http://controller:5000 這行是否應是 auth_url ,謝謝~

      回覆刪除
    3. 您好 請問要如何安裝ubnutu或windows的image 而非cirros?

      回覆刪除