Tagged "openstack"

OpenStack Heat 使用筆記

Heat 是 OpenStack 中,負責提供 Orchestration 服務的 component。

Heat 用 resource 來描述 OpenStack 的狀態。例如你設定一個 network resource,在這個 resource 中,設定名稱為 default。接下來 Heat 將會在你的 project 中,檢查是否有一個名稱為 default 的 network;如果沒有,則 Heat 將會在 project 建立 network。除了 network 之外,image、volume、port、instance 等都可以是 Heat 的 resource。

Resource 之間可以建立關連性,例如你可以先建立一個 volume resource。接下來再設定一個 instance resource ,並且在 instance resource 的 block_device_mapping 的屬性中,設定與 volume resource 建立關連性。這樣 Heat 就會先檢查 volume 是否存在,然後檢查 instance 是否存在並且 volume 是否已掛載到 instance 中。

這個想法與許多 deployment 軟體相同,例如 Puppet 是讓使用者設定 resource,然後 Puppet 根據 resource 的描述去配置 Linux;而 Saltstack 則是根據 user 設定的 state 來配置 Linux。

Read more...

Debugging Saltstack States

利用 Saltstack 安裝 OpenStack Keystone。按照 OpenStack 官方安裝手冊,裝完 Keystone 之後,必須要為 Keystone 自己註冊 service 與 endpoint。

這一個步驟,我把他寫成 Saltstack states 如下:

waiting-keystone-startup:
  cmd.run:
    - name: sleep 1

registry-keystone-service:
  keystone.service_present:
    - name: keystone
    - service_type: identity
    - description: "OpenStack Identity"
    - require:
      - cmd: waiting-keystone-startup

registry-keystone-endpoint:
  keystone.endpoint_present:
    - name: keystone
    - publicurl: http://host-01:5000/v2.0
    - internalurl: http://host-01:5000/v2.0
    - adminurl: http://host-01:35357/v2.0
    - region: regionOne
    - require:
      - keystone: registry-keystone-service

結果執行時發生 KeyError:

user@host-01:/srv/salt/openstack/keystone$ salt '*' state.sls openstack.keystone.registry
host-01:
    The minion function caused an exception: Traceback (most recent call last):
      File "/usr/lib/python2.7/dist-packages/salt/minion.py", line 1161, in _thread_return
        return_data = func(*args, **kwargs)
      File "/usr/lib/python2.7/dist-packages/salt/modules/state.py", line 681, in sls
        ret = st_.state.call_high(high_)
      File "/usr/lib/python2.7/dist-packages/salt/state.py", line 2067, in call_high
        ret = dict(list(disabled.items()) + list(self.call_chunks(chunks).items()))
      File "/usr/lib/python2.7/dist-packages/salt/state.py", line 1623, in call_chunks
        running = self.call_chunk(low, running, chunks)
      File "/usr/lib/python2.7/dist-packages/salt/state.py", line 1769, in call_chunk
        self._mod_init(low)
      File "/usr/lib/python2.7/dist-packages/salt/state.py", line 612, in _mod_init
        self.states['{0}.{1}'.format(low['state'], low['fun'])]  # pylint: disable=W0106
      File "/usr/lib/python2.7/dist-packages/salt/utils/lazy.py", line 90, in __getitem__
        raise KeyError(key)
    KeyError: 'keystone.service_present'

Read more...

IPv6 Neighbour table overflow

這兩天一直在 syslog 上看到 Neighbour table overflow

Apr 30 06:27:03 host-42 kernel: [72924.290265] net_ratelimit: 1739 callbacks suppressed
Apr 30 06:27:03 host-42 kernel: [72924.290269] IPv6: Neighbour table overflow

每兩分鐘就出現6~7筆,數量非常的多 如果不處理它,放任它繼續增長,過一兩天後系統就會 kernel panic。

Read more...

OpenStack Glance Image-list 401

架設 OpenStack Juno ,安裝完 Glance 後進行測試時,glance 指令會一直出現 401 錯誤。

root@localhost:~# glance --debug image-list
curl -i -X GET -H 'User-Agent: python-glanceclient' -H 'Content-Type: application/octet-stream' -H 'Accept-Encoding: gzip, deflate, compress' -H 'Accept: */*' -H 'X-Auth-Token: ***' http://140.114.91.220:9292/v1/images/detail?sort_key=name&sort_dir=asc&limit=20
Request returned failure status 401.
Invalid OpenStack Identity credentials.

Read more...

Install Rally 筆記 (OpenStack benchmark)

Rally 是一套 OpenStack benchmark tool。關於 Rally 的介紹本文就不再贅述。本篇安裝時是以 OpenStack 官方 Wiki 的教學為參考內容,紀錄安裝與使用 Rally 的筆記。

Read more...

OpenStack Nova cannot reboot instance - Unable to create tap device

早上因為某種因素,將 nova compute 強制重開機。當開機完成之後,使用 nova reboot --hard <server> 的方式,想要開啟instance 卻失敗,在 /var/log/nova/nova-compute.log 中看到以下錯誤訊息:

2015-02-11 16:10:54.110 ERROR nova.compute.manager [req-a3d9cf35-82ee-4857-b69d-99ef0c8ca753 b6a90e8c63ad4612917655fb9b04ad92 ecb687200c6a4574bdaf3ea3633c6b3f] [instance: 7bdad622-dd70-49d7-89ca-827d2e86367f] Cannot reboot instance: Unable to create tap device tape10b9639-d8: Device or resource busy

Read more...

復原 OpenStack 中被刪除的 instance

上週五在測試 puppet 全自動安裝 Openstack compute,大概是 class dependency 沒有設好的原因,總之 puppet 在安裝 compute 時總是會漏掉許多設定值。因此,我不斷地做 install/uninstall 來做測試。

Unstall 時已經很習慣用 apt-get –purge install nova-* quantum-* 。原本這行指令並沒有甚麼問題,但在於實驗的cloud環境,將 /var/lib/nova/instance 用 ceph 分享給所有 compute。

所以…悲劇發生了,所有 running 中 VM 的 instance 都被我刪除了。這個問題整個周末都沒有發現,是昨天上班時,我問效維新安裝的伺服器是否有發生狀況,這時我們才發現了這個大問題。

所幸,Linux 有個保護機制,當一個 file 被某些 process 佔用時,如果將該檔案刪除,此時系統只會將檔案 mark 為 (deleted)。 這樣一來其他 process、user 是讀取不到該檔案,但是該檔案還是繼續存在於 file system 中,直到那些所佔用 process 都結束了,這些 file 才會消失。

回到正題,cloud 上的 VM instance 被刪除會發生甚麼狀況呢?

  • VM 沒有關機,但是他也不能做 clone (在 Openstack Dashbard 上是 snaphost 功能)
  • VM 一旦關機,instance 就會被刪掉 => user 的資料消失(除非 user 放在 volume 裡面,而我們系統將 volume 獨立開來)

萬一整個 cloud 上所有 user 的資料都消失了,那我想我應該會被罵到死吧= =

萬幸的是我終於找到方法了

Read more...