OpenStack Senlin

此專案為集群及服務,可將VM和Container作為集群,對於集群內的資源可以管理,規模可彈性伸縮、成員間負載均衡、被管對象和策略可定制等等。Auto scaling的部分也由senlin管理,透過簡單的yaml定義,不需寫得像heat模板般複雜,目前Auto scaling 可以使用 senlin 或 Heat 來實現。

triangle-exclamation
circle-exclamation

安裝步驟

安裝服務

以下步驟在 Controller 執行。 確認 openstack sdk 版本是否為 0.17.2,若不是可以用 pip 安裝

# pip show openstacksdk
---
Metadata-Version: 2.1
Name: openstacksdk
Version: 0.17.2

# pip install openstacksdk==0.17.2

安裝 senlin 請至 pypi 查看版號

# pip install senlin==6.0.0

建立資料夾及 user

# groupadd -r senlin
# adduser --system selin senlin
# mkdir /etc/senlin /var/log/senlin

建立資料庫 (注意 database 的 user)

建立資料表

設定 /etc/senlin/senlin.conf,根據環境替換 IP 和 hostname

建立 user 和 Endpoint,根據環境替換 IP 和 hostname

建立 senlin-api service

建立 senlin-engine 服務

建立 /etc/senlin/policy.yaml

修改資料夾權限

啟用服務

安裝 senlin-dashboard

啟用 dashboard

Auto Scaling 前置設定

  • 請先安裝 ceilometer,gnocchi,aodh

  • senlin 和 gnocchi、整合有些 bug,因此需要修改一下程式碼

  • Heat 的 autoscaling 是透過 vm 中 metadata 的 server_group=stack_id 來辨識是否為同一個 heat stack,gnocchi 所儲存的資源有包含 server_group。

  • senlin 所產生的 cluster 會有 cluster_id,並且在 VM 的 metadata 加上 clusetr_id 加以辨認,但是 gnocchi 的資源並沒有 clusetr_id,因此需要手動增加。

  • 修改 /usr/lib/python2.7/dist-packages/ceilometer/gnocchi_client.py,在 server_group 的下一行增加 cluster_id resource type

修改 /usr/lib/python2.7/dist-packages/ceilometer/publisher/data/gnocchi_resources.yaml, 在 server_group: 下一行加入 cluster_id

刪除已編譯的 gnocchi_client.pyc

更新 ceilometer 和 gnocchi 資料庫

circle-info

如果不想修改程式碼 可以使用 gnocchi api 更新 resource

在 /etc/ceilometer/ceilometer.conf 增加

重啟 ceilometer 服務 (controller)

重啟 ceilometer-agent-compute (compute)

circle-exclamation

再來修改 aodh,senlin 的 VM scaling 是透過呼叫 webhook 的方式增加減少 VM,但是呼叫 webhook 時,不能送出有值的 body,而 aodh alarm 所觸發的 webhook 一定會送出含有資料的 body,之後 senlin 增加了功能,如果呼叫 scaling 的 webhook,要送出有值的 body ,必須要加入 header openstack-api-version = clustering 1.10,但是 aodh 的 alarm 所送出的 header 只有 content-type = application/json,因此需要修改程式碼。

修改 /usr/lib/python2.7/dist-packages/aodh/notifier/rest.py,在 headers[‘content-type’]下一行增加 header ‘openstack-api-version’

刪除已編譯的 rest.pyc

重啟 aodh 服務

檢查是否成功新增 gnocchi instance 的 resource type 裡的 cluster_id 屬性

使用 Auto Scaling

建立 VM 模板,此模板為 scaling 的 VM,建立 server.yaml

建立 profile ,也就是樣板

建立 cluster,–desired-capacity 指定 cluster node 起始數量

查看 cluster 資訊

將上述所得到的 cluster id 匯入環境變數

建立 Receiver webhook,透過觸發 webhook,可以執行所設定的 action,Receiver 可以設定的 action 如下:

  • CLUSTER_SCALE_OUT

  • CLUSTER_SCALE_IN

  • CLUSTER_RESIZE

  • CLUSTER_CHECK

  • CLUSTER_UPDATE

  • CLUSTER_DELETE

  • CLUSTER_ADD_NODES

  • CLUSTER_DEL_NODES

  • NODE_CREATE

  • NODE_DELETE

  • NODE_UPDATE

  • NODE_CHECK

  • NODE_RECOVER

Auto scaling 需要 scale_out 和 sacle_in ,因此建立兩個 Receiver,count 是指觸發一次後要增加減少的 node 數量 建立 Receiver CLUSTER_SCALE_OUT

建立 Receiver CLUSTER_SCALE_IN

匯入環境變數 alarm_url,此 URL 為 webhook

建立 aodh alarm,以下為參數設定

  • metric: 根據什麼發出 alarm,這裡選擇 cpu 使用率,cpu_util

  • alarm-action: alarm 時要觸發的 webhook,為上述的 alarm_url

  • query: query 出 VM 的 metadata 中相同 cluster_id 的 VM,並聚合所有的 metric,請填入 cluster_id

  • threshold: 閥值,當監測的量此值,會觸發 1 次 alarm,這裡設定 cpu 70%

  • comparison-operator: 跟 threshold 結合,gt 就是大於,lt 小於,範例 gt 就是大於 70

  • evaluation-periods: 週期,到達幾次定的 threshold,就會發出 alarm,此範例為到達 1 次 cpu 大於 70%,就發出 alarm

  • aggregation-method: 如何計算 query 出的 metric 值,這裡填入平均 mean, repeat-actions: 重複執行 alarm-action,當 alarm 持續發生時,是否重複觸發 alarm-action

建立 cpu-high 警示

建立 cpu-low 警示

進入 VM,對 VM 做 CPU 壓力測試,此為 cirros 範例

使用 openstack alarm 查看警示狀態

使用 openstack cluster 查看集群是否有擴展

Last updated