OpenStack Kilo版本新功能分析


OpenStack Kilo版本已經於2015年4月30日正式Release,這是OpenStack第11個版本,距離OpenStack項目推出已經整整過去了5年多的時間。在這個階段OpenStack得到不斷的增強,同時OpenStack社區也成為即Linux之后的第二大開源社區,參與的人數、廠商眾多,也成就了OpenStack今天盛世的局面。雖然OpenStack在今年經歷了Nebula的倒閉,但是隨着國內的傳統行業用戶對OpenStack越來越重視,我們堅信OpenStack明天會更好。

OpenStack Kilo版本的完整翻譯版本可見:https://wiki.openstack.org/wiki/ReleaseNotes/Kilo/zh-hans

OpenStack Kilo版本的翻譯工作由我和我的同事裴瑩瑩(Wendy)共同完成,翻譯校對工作由裴瑩瑩完成。如果翻譯有任何問題,請各位多多指正。

社區貢獻分析

我們先來看一下OpenStack在最近的4個穩定版本發布中,每一個項目的貢獻情況:

{% img left /images/blogs/what-is-new-in-kilo-contribution-by-modules.jpg %}

我們能夠很明顯的發現,OpenStack最早的幾大核心模塊(Nova, Cinder, Glance, Keystone, Horizon, Swift)的代碼貢獻所占比例呈明顯下降趨勢,這里強調一下,是比例而不是數量,從數量上來看,版本之間相差並不大,以Nova為例,從Havana版本的24%下降到如今的10%。這從一個側面反映了OpenStack的核心模塊日趨穩定,更多的關注集中到更高層次或者功能優化上。

Neutron模塊則一直處於穩中有升的狀態,從Havana版本的7%上升到10%,說明Neutron仍然處於需要進一步完善的狀態。

對於Ceilometer,Heat,Sahara,Ironic, Trove等新晉的核心模塊,都處於穩步增長的階段。貢獻的比例在四個版本中基本保持持平的態勢。在Kilo版本中,Sahara和Heat進入了前十名。

從Kilo版本的比例來看,Others的比例過半,Others主要包括了OpenStack測試相關項目,例如Rally;開發相關項目,例如Devstack;以及一些新的模塊,例如:Manila,Magnum等眾多進入孵化器的項目;還包括所有的Client以及Spec等。可以預見,OpenStack的開發重心逐步從底層的核心模塊,逐步向更高層次、提供更豐富功能的方向發展。

國內社區貢獻分析

{% img center /images/blogs/what-is-new-in-kilo-contributor.png %}

從企業貢獻排名來看,幾大巨頭企業牢牢占據貢獻榜的前幾名,OpenStack最成功的公司-Mirantis排名緊追Redhat成為第二貢獻大戶。排名前幾位的公司還包括:IBM, Rackspace, Cisco, Suse, VMware, Intel等。

國內方面,華為繼續穩定在第13名,但Review的數量從Juno版本的1353提升到2548個,貢獻的項目幾乎涵蓋所有的項目,主要貢獻來自Heat,Ceilometer, Horizon,Neutron, Nova等項目。

國內排名第2的貢獻企業是九州雲,排名達到了21位,看來龔永生的到來為九州雲添加了無限活力。九州雲的貢獻主要來自Horizon和Neutron兩個項目,龔永生不愧為Neutron的Core,在網絡方面的貢獻,九州雲的確很給力。

排名第3的企業是海雲捷迅,排名為44位,海雲是國內比較早的一批OpenStack創業企業,貢獻方面以Sahara,Neutron,Nova,oslo.messaging以及Cinder為主,從之前了解的情況來看,海雲的項目不少,可能提交的修改是與在實際項目中遇到的問題有關。

排名之后的企業還有Kylin Cloud,UnitedStack,EasyStack等。由於是手工統計,在統計過程中如有遺漏,希望大家多多指正。

Horizon新功能

Horizon在K版本除了增強了對新增模塊的支持,從UE的角度也為我們帶來了很多新功能

  • 支持向導式的創建虛擬機,現在還處於beta版本,如果想在Horizon里激活,可以通過設置local_setting.py的配置實現:
LAUNCH_INSTANCE_NG_ENABLED = True

{% img left /images/blogs/what-is-new-in-kilo-instance-guide1.png %}

{% img left /images/blogs/what-is-new-in-kilo-instance-guide2.png %}

  • 支持簡單的主題,主要通過修改_variables.scss和_style.scss完成對主題顏色和簡單樣式的修改,但是格局不能改變,修改local_settings.py
CUSTOM_THEME_PATH = 'static/themes/blue'
$gray:                   #2751DB !default;
$gray-darker: #94A5F2 !default;
$gray-dark: #0C0CED !default;
$gray-light: #C7CFF2 !default;
$gray-lighter: #DCE1F5 !default;

$brand-primary: #375A7F !default;
$brand-success: #00bc8c !default;
$brand-info: #34DB98 !default;
$brand-warning: #F39C12 !default;
$brand-danger: #E74C3C !default;
// Blue
// ----

@mixin btn-shadow($color) {
@include gradient-vertical-three-colors(lighten($color, 3%), $color, 6%, darken($color, 3%));
filter: none;
border: 1px solid darken($color, 10%);
}

// Buttons ====================================================================

.btn-default,
.btn-default:hover {
@include btn-shadow($btn-default-bg);
}

.btn-primary,
.btn-primary:hover {
@include btn-shadow($btn-primary-bg);
}

{% img left /images/blogs/what-is-new-in-kilo-horizon-theme1.png %}

{% img left /images/blogs/what-is-new-in-kilo-horizon-theme2.png %}

Nova新功能

Nova Scheduler

  • 標准化了conductor,compute與scheduler的接口,為之后的接口分離做好准備,對於部分直接訪問nova數據庫的filters進行了優化,不再允許直接訪問,參考鏈接:https://github.com/openstack/nova-specs/blob/master/specs/kilo/approved/isolate-scheduler-db-filters.rst
  • 對Scheduler做了一些優化,例如:Scheduler對於每一個請求都會重新進行Filters/Weighers,為了優化這個問題,將filter/weighter的初始化從handler移到scheduler,這樣每次請求的時候都可以重新使用了。

Libvirt NFV相關功能

  • NUMA(Non Uniform Memory Architecture),在這個架構下,每個處理器都會訪問“本地”的內存池,從而在CPU和存儲之間有更小的延遲和更大的帶寬。
  • 在Kilo版本中針對此功能的實現包括:基於NUMA的調度的實現;可以將vCPU綁定在物理CPU上;超大頁的支持。以上提到的三點都是通過Flavor的Extra Spces完成定義的。

EC2 API

  • EC2 API被從Nova中踢出去了
  • 取而代之的是在stackforge的EC2 API轉換服務

API Microversioning

先來解釋一下為什么需要API的微版本:主要原因在於現在這種API擴展方式,對於API實現的代碼的增加或減少管理非常不方便,容易導致不一致性。引入微版本主要目的就是讓開發人員在修改API代碼時能夠向前兼容,而不是加入一個新的API擴展;用戶通過指定API的版本,在請求時也能決定是使用的具體的動作。

包含版本的返回:

GET /
{
"versions": [
{
"id": "v2.1",
"links": [
{
"href": "http://localhost:8774/v2/",
"rel": "self"
}
],
"status": "CURRENT",
"version": "5.2"
"min_version": "2.1"
},
]
}

客戶端的Header信息:

X-OpenStack-Nova-API-Version: 2.114

一個已知的問題:Evacuate

這個問題的產生主要是因為Evacuate的清理機制,主機名的變化會導致nova-compute重啟過程中誤刪所有虛擬機,所以一個變通的方法是設置

destroy_after_evacuate=False

這個問題會在Liberty中得到修復,相關的Spec:https://review.openstack.org/#/c/161444/3/specs/liberty/approved/robustify_evacuate.rst

Glance新功能

  • 自動進行鏡像格式轉化,例如,Ceph是使用RAW格式的,假如我們上傳的是QCOW2,創建虛擬機時,就會經歷一番上傳下載的過程,速度異常緩慢。而且RAW格式通常都是原始大小,上傳時候非常慢,完全可以通過上傳小鏡像自動轉換為指定格式。
  • Glance支持多字段排序
/images?sort_key=status&sort_dir=asc&sort_key=name&sort_dir=asc&sort_key=created_at&sort_dir=desc
  • 臨時將鏡像設置為非活躍狀態,假如一個鏡像里有病毒,管理員就會將該鏡像設置為非活躍狀態,在清理后重新發布該鏡像,在這個過程中,所有非管理員用戶都無法使用或者下載這個鏡像
  • 免重啟動態加載配置文件,配置文件改動后重啟服務,現在可以給glance服務發送SIGHUP觸發,這樣升級就可以零當機時間。
  • 使用多個Swift容器存儲鏡像,減少大規模部署時的請求瓶頸

Cinder新功能

  • 實現服務邏輯代碼與數據庫結構之間的解耦,支持Rolling更新
  • 一致性組是指具備公共操作的卷,邏輯上化為一組。在K版本中對增強一致性組的功能:可以添加、刪除卷,從已經存在的快照創建新的組,關於一致性組的詳細操作可以參考:http://docs.openstack.org/admin-guide-cloud/content/consistency-groups.html
cinder consisgroup-update
[--name NAME]
[--description DESCRIPTION]
[--add-volumes UUID1,UUID2,......]
[--remove-volumes UUID3,UUID4,......]
CG
cinder consisgroup-create-from-src
[--cgsnapshot CGSNAPSHOT]
[--name NAME]
[--description DESCRIPTION]
  • 卷類型的增強功能主要包含兩個:為某一項目創建私有的卷類型和為卷類型增加描述信息
cinder type-create <name> --is-public
cinder type-create <name> <description>

Neutron新功能

  • DVR支持OVS中的VLANs
  • 新的V2版本的LBaas的API
  • 新的插件的更新,詳情請見更新日志中
  • 一些高級服務的分離,例如:L3, ML2, VPNaaS, LBaaS

網絡方面我不是權威,希望有高人能出來講講Kilo中的Neutron新功能。

Keystone新功能

  • 項目嵌套,創建一個新的Project時候,可以指定parent的Project
POST /projects

{
"project": {
"description": "Project space for Test Group",
"domain_id": "1789d1",
"enabled": true,
"name": "Test Group",
"parent_id": "7fa612"
}
}
  • Keystone與Keystone的聯盟,有了這個功能兩個或者更多的雲服務提供者就可以共享資源,這個功能在J版本引入,在K版本中主要針對該功能的進一步增強,具體的使用方法可參考這篇博文:http://blog.rodrigods.com/playing-with-keystone-to-keystone-federation/
  • 針對新人授權的一些增強功能
  • keystone的配置中有部分配置發生了變化,例如:keystone.token.backends.memcache被keystone.token.persistence.backends.memcache取代,更多詳細內容請參考更新日志

Swift新功能

  • 糾刪碼的加入應該是這個版本最大的亮點,但是糾刪碼作為beta版本發布,並不推薦應用於生產環境,關於糾刪碼的詳細介紹可以參考:http://docs.openstack.org/developer/swift/overview_erasure_code.html
  • 復合型令牌,簡而言之就是需要用戶加上服務的Token才能對Swfit存放的內容進行操作,如下圖所示:
client
\
\ <request>: <path-specific-to-the-service>
\ x-auth-token: <user-token>
\
SERVICE
\
\ PUT: /v1/SERVICE_1234/<container>/<object>
\ x-auth-token: <user-token>
\ x-service-token: <service-token>
\
Swift

具體的設計文檔:http://docs.openstack.org/developer/swift/overview_backing_store.html

  • 全局性的集群復制優化,大幅提高效率,避免經過廣域網傳播的數據

Ceilometer新功能

{
"context_is_admin": [["role:admin"]]
}

更細粒度的控制

{
"context_is_admin": [["role:admin"]],
"admin_or_cloud_admin": [["rule:context_is_admin"],
["rule:admin_and_matching_project_domain_id"]]
,
"telemetry:alarm_delete": [["rule:admin_or_cloud_admin"]]
}
  • 接口中的模糊查詢,增加了一個新的查詢符號=~
  • 支持更多的測量,包括Hyper-V,IPMI相關的

Ironic新功能

  • iLO的優化
  • 使用Config Drive替代Metadata服務
  • 全盤鏡像支持,可以跳過raddisk和kernel,這樣就可以部署Windows的鏡像了
  • 使用本地盤啟動,替代PXE方式,可以通過設置flavor的capabilities:boot_option實現

Oslo

解決了很多之前遺留的技術債,還有一些命名規范的問題。olso.messaging實現了心跳,olso.log在所有項目中使用,優化了oslo.db的代碼。

OpenStack文檔

優化了docs.openstack.org頁面,也可以從中選擇相應的語言。有專門的團隊負責安裝、網絡和高可靠的文檔。

其他模塊

對於Sahara, Heat, Trove等模塊的更新沒有在這里Highlight出來,大家可以參考更新日志里的內容,或者查看specs中的具體描述。

總結

通過Kilo的一些更新可以看到,Kilo版本在不斷優化代碼結構的基礎上,增加了一些新功能,也償還了一些技術債,總體來說是一種穩中有升的態勢,但是總體感覺並沒有太多的驚喜和出人意料。相信隨着更多的孵化項目進入正式版本中,OpenStack一定會向更多元化的方向發展。


注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2020 ITdaan.com