OpenStack Senlin
此專案為集群及服務,可將VM和Container作為集群,對於集群內的資源可以管理,規模可彈性伸縮、成員間負載均衡、被管對象和策略可定制等等。Auto scaling的部分也由senlin管理,透過簡單的yaml定義,不需寫得像heat模板般複雜,目前Auto scaling 可以使用 senlin 或 Heat 來實現。
由於此篇是由很久之前的個人紀錄搬至gitbook
內容已過時,僅供參考
使用 Auto scaling 前,請先安裝 ceilometer、gnocchi、aodh 專案,以下範例為 Queens 版。
安裝步驟
安裝服務
以下步驟在 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 資料庫
在 /etc/ceilometer/ceilometer.conf 增加
重啟 ceilometer 服務 (controller)
重啟 ceilometer-agent-compute (compute)
再來修改 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