日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

OpenStack Heat服务介绍 (三)

發布時間:2023/12/31 编程问答 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 OpenStack Heat服务介绍 (三) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Heat是OpenStack中的Orchestration services,也就是應用程序的配置管理。

Heat用聲明式的方法來管理公有云或者私有云中的應用程序。它和其他OpenStack的服務類似,對外提供ReSTful接口,但除此之外,它定義了一套配置管理的模版。Heat的模版才是Heat的核心所在。


因為OpenStack開發Heat一開始的目的是為了能支持AWS中的CloudFormation模版,所以很多術語和概念都來源于AWS的CloudFormation(http://awsdocs.s3.amazonaws.com/AWSCloudFormation/latest/cfn-ug.pdf)


讓我們先從CloudFormation格式的getting_started.template 來介紹其中的幾個關鍵概念。

https://github.com/openstack/heat-templates/blob/master/cfn/F17/getting_started.template


{"AWSTemplateFormatVersion" : "2010-09-09","Parameters" : {"KeyName" : {"Description" : "Name of an existing EC2 KeyPair to enable SSH access to the instance","Type" : "String"}},"Resources" : {"MyInstance" : {"Type" : "AWS::EC2::Instance","Properties" : {"KeyName" : { "Ref" : "KeyName" },"ImageId" : "F17-x86_64-cfntools","InstanceType": "m1.small","UserData" : { "Fn::Base64" : "80" }}}},"Outputs" : {"InstanceIp" : {"Value" : { "Fn::Join" : ["", ["ssh ec2-user@",{"Fn::GetAtt": ["MyInstance","PublicIp"]}]]},"Description" : "My ssh command"}} }

AWSTemplateFormatVersion定義了Template的版本信息。

Parameters是用戶在創建Stack時可以輸入的參數類型。

Resources中,MyInstance是一個EC2的Instance,它的屬性包括SSH的Key,Glance中的Image名稱,Instance的Flavor類型,還有允許傳給虛擬機的用戶參數。

Outputs中定義了創建Stack后的輸出。Instance的Ip值是從MyInstance中得到PublicIp值。


Heat中的基本術語

1. 棧。棧是CloudFormation中管理一組資源的基本單位。一個棧往往對應與一個應用程序。在Heat自己給出的例子中,WordPress就是一個web應用,用它的配置文件可以創建一個棧實例。

2. 資源。一個棧可以擁有很多資源, 資源是底層服務的抽象。CPU,memory,disk,網絡等都可以看作是資源。資源和資源之間會存在依賴關系。Heat在創建棧的時候會自動解析依賴關系,按順序創建資源。從Havana開始Heat能并行的創建沒有依賴關系的資源。



理想情況下,Heat允許你象寫代碼那樣來管理你的應用,你可以把Heattemplate保存在版本管理器中,當你修改了模版的內容,應用的配置也會自動做出調整。當然,這是理想情況。。。


Heat模版

Heat模版和CloudFormation模版的一個很大不同是格式。AWS的CloudFormation采用的是JSON格式,它的一個缺點是沒辦法插入注釋。Heat采用Yaml格式來克服這一缺點。另一個好處是解析不同版本的Yaml文件更為方便。因為Yaml是JSON格式的超集,JSON格式的文件可以無損轉成Yaml格式。下面,讓我們先來看一個Heat模版的例子:


Parameters:ssh_key_name: Type: StringDescription: ssh keypair namep_w_picpath_name:Type: StringDescription: The p_w_picpath to boot Resources:my_server:Type: OS::Nova::ServerProperties:flavor: m1.smallkey_name: {"Ref": "ssh_key"}block_device_mapping:device_name: vdavolume_id: {"Ref": "my_vol"}my_vol:Type: OS::Cinder::VolumeProperties:size: 20p_w_picpath: {"Ref": "p_w_picpath_name"} Outputs:server_ip:Description: The server IPValue: {"Fn::GetAtt":["my_server","first_address"]}


模版中有四個關鍵段:

Parameters(可選):定義用戶在創建stack需要輸入的參數。

Mappings (可選):定義一組靜態 Key/ValuePair。用Fn::FindInMap可以查找對應的值。

Resources (必填):定義你的應用所依賴的Resources,以及Resources之間的關系。比如你的應用依賴于哪些包,該如何配置網絡,需要的CPU,Memory多少等等。

Outputs (可選): 描述給用戶的返回值。


所有的Resources都用通用的接口。

一些可選或必填的屬性:用來配置這些資源。

一些輸出屬性:通過內置函數,如Fn:GetAtt,來得到的屬性。


資源之間可以建立起樹狀的依賴關系。下面是一個典型的Autoscaling例子,用Heat的模版表示會是這樣


Resources:MEMAlarmHigh:Type: AWS::CloudWatch::AlarmProperties:AlarmDescription: Scale-up if MEM > 50% for 1 minuteMetricName: MemoryUtilizationNamespace: system/linuxStatistic: AveragePeriod: '60'EvaluationPeriods: '1'Threshold: '50'AlarmActions:- {Ref: WebServerScaleUpPolicy}Dimensions:- Name: AutoScalingGroupNameValue: {Ref: WebServerGroup}ComparisonOperator: GreaterThanThresholdWebServerScaleUpPolicy:Type: AWS::AutoScaling::ScalingPolicyProperties:AdjustmentType: ChangeInCapacityAutoScalingGroupName: {Ref: WebServerGroup}Cooldown: '60'ScalingAdjustment: '1'WebServerGroup:Type: AWS::AutoScaling::AutoScalingGroupProperties:AvailabilityZones: {'Fn::GetAZs': ''}LaunchConfigurationName: {Ref: LaunchConfig}MinSize: '1'MaxSize: '3'LoadBalancerNames:- {Ref: ElasticLoadBalancer}ElasticLoadBalancer:Type: AWS::ElasticLoadBalancing::LoadBalancerProperties:...LaunchConfig:Type: AWS::AutoScaling::LaunchConfigurationMetadata:...Properties:


大家可以看到Resource之間通過{Ref:}關鍵字相互聯系了起來。


Heat通過AWS::AutoScaling::AutoScalingGroup來支持Autoscaling。當新的VM起來的時候,Scaling Group可以同時更新Load balancer的配置來加入新的VM信息。


Providers 和 Environments是Havana release中增加的兩個features。Providers用來定義用戶自定義的Resources, ?Providers的語法和Heat內置支持的Resources語法格式完全一樣。Environments用來覆蓋template中的部分內容,比如基本環境的設置。理想的情況是用一組providertemplate來部署你的應用(每個provider template定義一個應用),用一個environmenttemplate來定義一個云的基礎架構。這樣通過選擇provider模版和environment模版就能在不同的云環境下使用。


目前Heat還在開發自己的模版格式HOT (HeatOrchestration Template),在Heat的模版倉庫中已經包含了HOT模版的例子,更多的例子可以看這里:

https://github.com/openstack/heat-templates/

轉載于:https://blog.51cto.com/zhenhua2000/1335468

總結

以上是生活随笔為你收集整理的OpenStack Heat服务介绍 (三)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。