Kuruluma başlamadan önce DevStack kurulumunun yapılmış olması ve Neutron servisinin aktif olması gerekmektedir. Eğer hali hazırda bir kurulumunuz yoksa bu dökümandan yararlanabilirsiniz.
Heat servisini kurmamız için local.conf dosyamıza aşağıdaki satırları eklemeliyiz.
enable_service h-eng, h-api, h-api-cfn, h-api-cw
enable_plugin ceilometer https://opendev.org/openstack/ceilometer liberty-eol
Eğer bir önceki dökümantasyondan takip ediyorsanız local.conf dosyası aşağıdaki gibi olmalıdır.
[[local|localrc]]
ADMIN_PASSWORD=secret
DATABASE_PASSWORD=$ADMIN_PASSWORD
RABBIT_PASSWORD=$ADMIN_PASSWORD
SERVICE_PASSWORD=$ADMIN_PASSWORD
SERVICE_TOKEN=$ADMIN_PASSWORD
HOST_IP=127.0.0.1
SERVICE_HOST=$HOST_IP
MYSQL_HOST=$HOST_IP
RABBIT_HOST=$HOST_IP
GLANCE_HOSTPORT=$HOST_IP:9292
FORCE=yes
disable_service n-net
enable_service q-svc, q-agt, q-dhcp, q-l3, q-meta, neutron, h-eng, h-api, h-api-cfn, h-api-cw
enable_plugin ceilometer https://opendev.org/openstack/ceilometer liberty-eol
Ardından ./stack.sh yaparak DevStack’ı başlatmalıyız.
NOT: Daha önce DevStack çalıştırdıysanız lütfen ./unstack.sh yaparak sonlandırınız.
./stack.sh scripti tamamlandıktan sonra openstack service list
veya heat stack-list
komutlarını çalıştırarak Heat servisinin başarılı bir şekilde kurulduğundan emin olabiliriz.
$ openstack service list
+----------------------------------+-------------+----------------+
| ID | Name | Type |
+----------------------------------+-------------+----------------+
| 0a403d66cdef4dc6b34368ba654fd3f4 | cinder | volume |
| 1a8522b857474749af664eacdf6e78c4 | heat-cfn | cloudformation |
| 1c464cd86c88439398f0f8c5d2b2bf31 | nova_legacy | compute_legacy |
| 2cde9f5be21248baa0f3fc5860421952 | ec2 | ec2 |
| 343f26eb02f24d4db2d56d1b3d44c27d | ceilometer | metering |
| 3aa4859a4ddb4d8f947da5dc193ae514 | cinderv2 | volumev2 |
| 52ecbcbd25b24495977325953d8d7c2e | neutron | network |
| 6a260db901124d0e954dff42f3d3612b | glance | image |
| a313f5ee0bda450bb43cb1a220ff9d0f | nova | compute |
| d5a150328d0e4a44a8a2c4a766614cf4 | heat | orchestration |
| e767721be99749bf93a34015c897b766 | keystone | identity |
+----------------------------------+-------------+----------------+
$ heat stack-list
+----+------------+--------------+---------------+--------------+
| id | stack_name | stack_status | creation_time | updated_time |
+----+------------+--------------+---------------+--------------+
+----+------------+--------------+---------------+--------------+
Otomatik ölçeklendirme adımından önce ölçeklendirmeyi düşündüğümüz imajı Glance servisimize tanıtmalı, oluşacak örneğe bağlanabilmek için bir ssh-keypair oluşturmalı ve ssh portuna (22) izin vermeliyiz.
NOT: Bu örnekte ubuntu 14.04 versiyonu kullanılacaktır.
$ wget https://cloud-images.ubuntu.com/trusty/current/trusty-server-cloudimg-amd64-disk1.img
'trusty-server-cloudimg-amd64-disk1.img' saved.
$ mv trusty-server-cloudimg-amd64-disk1.img ubuntu-14.04.img
$ openstack image create --disk-format qcow2 --container-format bare --public --file ./ubuntu-14.04.img Ubuntu-14.04
+------------------+------------------------------------------------------+
| Field | Value |
+------------------+------------------------------------------------------+
| checksum | 52fc95ebfee7f3e5bb64eed425820c4a |
| container_format | bare |
| created_at | 2019-07-22T06:44:17Z |
| disk_format | qcow2 |
| file | /v2/images/7833b7e2-80ff-46cb-829a-63e32a1909d0/file |
| id | 7833b7e2-80ff-46cb-829a-63e32a1909d0 |
| min_disk | 0 |
| min_ram | 0 |
| name | Ubuntu-14.04 |
| owner | f06f764ff76047aba24bfd32dc921081 |
| protected | False |
| schema | /v2/schemas/image |
| size | 263848448 |
| status | active |
| updated_at | 2019-07-22T06:44:19Z |
| virtual_size | None |
| visibility | public |
+------------------+------------------------------------------------------+
$ openstack keypair create sshKey > sshKey.pem
$ chmod 600 sshKey.pem
$ openstack security group rule create default --proto tcp --dst-port 22:22
+-----------------+--------------------------------------+
| Field | Value |
+-----------------+--------------------------------------+
| group | {} |
| id | 65e5b5d1-dbda-4581-8255-264e633e81b3 |
| ip_protocol | tcp |
| ip_range | 0.0.0.0/0 |
| parent_group_id | d10575a4-c1e6-4432-b140-ffd4237d732a |
| port_range | 22:22 |
+-----------------+--------------------------------------+
Artık ölçeklendirme için hazırız.
Bu adımda Heat servisinden yararlanarak otomatik ölçeklendirme işlemi yapacağız. Temel amacımız CPU için yüzdesel olarak belirteceğimiz eşik değerleri aşıldığında Heat servisinin otomatik olarak reaksiyon alıp yeni bir örnek başlatması veya sonlandırması.
ubuntu.yaml ve scaler.yaml adında iki dosya oluşturmalı ve aşağıdaki satırları oluşturduğumuz dosyalara yapıştırmalıyız. Bu işlemin ardından elimizde bulunan iki config dosyasını aynı dizine taşımalıyız.
ubuntu.yaml
heat_template_version: 2015-10-15
description: Ubuntu-14.04 server
resources:
server:
type: OS::Nova::Server
properties:
image: Ubuntu-14.04
flavor: m1.small
key_name: sshKey
networks:
- port: { get_resource: port }
port:
type: OS::Neutron::Port
properties:
network: private
security_groups:
- default
floating_ip:
type: OS::Neutron::FloatingIP
properties:
floating_network: public
floating_ip_assoc:
type: OS::Neutron::FloatingIPAssociation
properties:
floatingip_id: { get_resource: floating_ip }
port_id: { get_resource: port }
NOT: ubuntu.yaml dosyasında otomatik olarak oluşacak örneklerin özellikleri yer almaktadır.
scaler.yaml
heat_template_version: 2015-10-15
description: Auto scaling
resources:
server_group:
type: OS::Heat::AutoScalingGroup
properties:
cooldown: 60
desired_capacity: 1
max_size: 3
min_size: 1
resource:
type: ubuntu.yaml
scaleup_policy:
type: OS::Heat::ScalingPolicy
properties:
adjustment_type: change_in_capacity
auto_scaling_group_id: { get_resource: server_group }
cooldown: 60
scaling_adjustment: 1
scaledown_policy:
type: OS::Heat::ScalingPolicy
properties:
adjustment_type: change_in_capacity
auto_scaling_group_id: { get_resource: server_group }
cooldown: 60
scaling_adjustment: -1
cpu_alarm_high:
type: OS::Ceilometer::Alarm
properties:
meter_name: cpu_util
statistic: avg
period: 120
evaluation_periods: 1
threshold: 50
alarm_actions:
- {get_attr: [scaleup_policy, alarm_url]}
comparison_operator: gt
cpu_alarm_low:
type: OS::Ceilometer::Alarm
properties:
meter_name: cpu_util
statistic: avg
period: 180
evaluation_periods: 1
threshold: 10
alarm_actions:
- {get_attr: [scaledown_policy, alarm_url]}
comparison_operator: lt
NOT: scaler.yaml dosyası auto scaling için config dosyasıdır.
$ mkdir scaling
$ mv ubuntu.yaml ./scaling/ubuntu.yaml
$ mv scaler.yaml ./scaling/scaler.yaml
scaler.yaml dosyasını yorumlayacak olursak, eğer iki dakika için CPU ortalaması %50'nin üzerindeyse yeni bir örnek ayağa kaldırılacak yani scale-up işlemi yapılacaktır. Eğer bu ortalama üç dakika için %10'un altındaysa oluşturulmuş eski örnek yok edilecek, scale-down işlemi yapılacaktır. CPU ortalaması sürekli %50'nin üzerinde ise maksimum üç adet örnek oluşacaktır. Fakat CPU ortalaması sürekli %10'un altında ise minimum bir örneğimiz aktif kalacaktır.
Artık Heat servisimizi başlatabilir ve otomatik ölçeklendirmeyi aktif edebiliriz.
$ heat stack-create scaler --template-file /opt/stack/scaling/scaler.yaml
+--------------------------------------+------------+--------------------+---------------------+--------------+
| id | stack_name | stack_status | creation_time | updated_time |
+--------------------------------------+------------+--------------------+---------------------+--------------+
| ff4eddd6-228d-4f4a-b627-41bda149efe1 | scaler | CREATE_IN_PROGRESS | 2019-07-22T07:47:51 | None |
+--------------------------------------+------------+--------------------+---------------------+--------------+
$ heat stack-list
+--------------------------------------+------------+-----------------+---------------------+--------------+
| id | stack_name | stack_status | creation_time | updated_time |
+--------------------------------------+------------+-----------------+---------------------+--------------+
| ff4eddd6-228d-4f4a-b627-41bda149efe1 | scaler | CREATE_COMPLETE | 2019-07-22T07:47:51 | None |
+--------------------------------------+------------+-----------------+---------------------+--------------+
$ openstack server list
+--------------------------------------+-------------------------------------------------------+--------+-------------------------------------------------------------------+
| ID | Name | Status | Networks |
+--------------------------------------+-------------------------------------------------------+--------+-------------------------------------------------------------------+
| c053665a-2d40-4938-bf99-d106bf24b2cd | sc-65cn-wj2fjiyddhyb-pfcwoks5qalk-server-yg4tz2l2kgd4 | ACTIVE | private=10.0.0.3, fd58:e23c:721d:0:f816:3eff:fec8:2af, 172.24.4.3 |
+--------------------------------------+-------------------------------------------------------+--------+-------------------------------------------------------------------+
Yukarıda da görüldüğü üzere Heat servisimiz başarılı bir şekilde kuruldu, ilk örneğini yarattı ve ip adresi 172.24.4.3 olarak atandı. Auto scaling için oluşan alarmlarımıza da göz atmalıyız.
$ ceilometer alarm-list
+--------------------------------------+------------------------------------+-------------------+----------+---------+------------+--------------------------------------+------------------+
| Alarm ID | Name | State | Severity | Enabled | Continuous | Alarm condition | Time constraints |
+--------------------------------------+------------------------------------+-------------------+----------+---------+------------+--------------------------------------+------------------+
| afbc7c73-3e19-43c0-8b75-08925a355ec5 | scaler-cpu_alarm_low-yfhwzcrykdwu | insufficient data | low | True | True | avg(cpu_util) < 10.0 during 1 x 180s | None |
| beeccadf-f38c-4f45-aa58-ca2fd457ad44 | scaler-cpu_alarm_high-zfgwuch2t6be | insufficient data | low | True | True | avg(cpu_util) > 50.0 during 1 x 120s | None |
+--------------------------------------+------------------------------------+-------------------+----------+---------+------------+--------------------------------------+------------------+
Görüldüğü üzere her iki alarmımız da başarılı şekilde oluşturulmuş. Fakat state olarak insufficient data yani yetersiz veri görmekteyiz. Bu durum alarmlar için henüz veri sağlanmadığından kaynaklanmaktadır. Veri örneklerini ceilometer sample-list -m cpu_util
komutunu yazarak görebiliriz.
Ceilometer, veri okumayı default olarak 10 dakikada bir yapmaktadır. Bu süreyi kısaltmalı ve biraz veri oluşturmalıyız. Süreyi kısaltmak için /etc/ceilometer/pipeline.yaml dosyasındaki interval kısımlarını 600'den 60'a düşürmeliyiz. Böylece her dakika veri üretimini sağlayacağız.
$ vim /etc/ceilometer/pipeline.yaml
sources:
- name: meter_source
interval: 60
meters:
- "*"
sinks:
- meter_sink
- name: cpu_source
interval: 60
meters:
- "cpu"
sinks:
- cpu_sink
- cpu_delta_sink
- name: disk_source
interval: 60
meters:
- "disk.read.bytes"
- "disk.read.requests"
- "disk.write.bytes"
- "disk.write.requests"
- "disk.device.read.bytes"
- "disk.device.read.requests"
- "disk.device.write.bytes"
- "disk.device.write.requests"
sinks:
- disk_sink
- name: network_source
interval: 60
meters:
- "network.incoming.bytes"
- "network.incoming.packets"
- "network.outgoing.bytes"
- "network.outgoing.packets"
sinks
...
Bu değişikliğin ardından ceilometer-acompute servisini yeniden başlatmalıyız. Bu işlemi gerçekleştirebilmek için DevStack'ta oluşturduğumuz oturuma yeniden katılmalı ve servisi durdurup yeniden başlatmalıyız.
$ sudo ./devstack/rejoin-stack.sh
2019-07-22 08:15:15.533 19537 INFO ceilometer.agent.manager [-] Skip pollster network.incoming.bytes, no new resources found this cycle
$(L) ceilometer-anotifica* 27$(L) ceilometer-aipmi 28$(L) ceilometer-api 29$(L) ceilometer-collector 30$(L) ceilometer-acompute 31-$(L) ceilometer-alarm-notifier 32$(L) ceilometer-alarm-evaluator
NOT: Servisler arasında geçiş yapmak için CTRL + A ardından CTRL + P (geri) ve CTRL + A ardından CTRL + N (ileri) kullanabiliriz. NOT: Aktif olan servisin isminin sonunda * işareti bulunmaktadır.
ceilometer-acompute servisi üzerine gelip sonlandırmalı (CTRL + C) ve yeniden başlatmalıyız.
#start ceilometer-acompute
$ /usr/bin/python /usr/local/bin/ceilometer-polling --polling-namespaces compute --config-file /etc/ceilometer/ceilometer.conf
Yeniden başlatma işleminin ardından CTRL + A ardından CTRL + D yaparak DevStack oturumundan çıkış yapabiliriz.
Bir kaç dakika sonra verilerimizi kontrol edebiliriz.
$ ceilometer sample-list -m cpu_util --limit 3
+--------------------------------------+----------+-------+----------------+------+----------------------------+
| Resource ID | Name | Type | Volume | Unit | Timestamp |
+--------------------------------------+----------+-------+----------------+------+----------------------------+
| c053665a-2d40-4938-bf99-d106bf24b2cd | cpu_util | gauge | 0.321711737551 | % | 2019-07-22T08:21:46.966554 |
| c053665a-2d40-4938-bf99-d106bf24b2cd | cpu_util | gauge | 0.317754823355 | % | 2019-07-22T08:20:46.755992 |
| c053665a-2d40-4938-bf99-d106bf24b2cd | cpu_util | gauge | 0.522804435087 | % | 2019-07-22T08:19:46.961463 |
+--------------------------------------+----------+-------+----------------+------+----------------------------+
$ ceilometer alarm-list
+--------------------------------------+------------------------------------+-------+----------+---------+------------+--------------------------------------+------------------+
| Alarm ID | Name | State | Severity | Enabled | Continuous | Alarm condition | Time constraints |
+--------------------------------------+------------------------------------+-------+----------+---------+------------+--------------------------------------+------------------+
| afbc7c73-3e19-43c0-8b75-08925a355ec5 | scaler-cpu_alarm_low-64nlj5pbpyrw | ok | low | True | True | avg(cpu_util) < 10.0 during 1 x 180s | None |
| beeccadf-f38c-4f45-aa58-ca2fd457ad44 | scaler-cpu_alarm_high-rl54fpd34rum | ok | low | True | True | avg(cpu_util) > 50.0 during 1 x 120s | None |
+--------------------------------------+------------------------------------+-------+----------+---------+------------+--------------------------------------+------------------+
Verilerimiz istediğimiz gibi dakikada bir oluşmaya başlamış ve alarmlarımız aktif durumda. Şimdi oluşan ilk örneğimize biraz yük bindirmeli ve ikinci örneğin başlamasını sağlamalıyız.
Öncelikle oluşan örneğe bağlanmalı ve sonsuz IO işlemi başlatarak CPU'a yük bindirmeliyiz.
$ ssh ubuntu@172.24.4.3 -i sshKey.pem
The authenticity of host '172.24.4.3 (172.24.4.3)' cannot be established.
ECDSA key fingerprint is 41:2a:d7:52:34:af:da:d0:24:5e:b6:27:ba:8f:c8:57.
Are you sure you want to continue connecting (yes/no)? yes
# io loop command: dd if=/dev/zero of=/dev/null &
ubuntu@sc-gwg7-oth272nxusrq-w6nzzwwsslhn-server-df7ndjovwatz:~$ dd if=/dev/zero of=/dev/null &
[1] 1514
ubuntu@sc-gwg7-oth272nxusrq-w6nzzwwsslhn-server-df7ndjovwatz:~$ dd if=/dev/zero of=/dev/null &
[2] 1515
ubuntu@sc-gwg7-oth272nxusrq-w6nzzwwsslhn-server-df7ndjovwatz:~$ logout
NOT: Eğer ssh bağlantısı sırasında Connection refused veya No route to host hatası alıyorsanız biraz beklemeniz gerekebilir. Bunun sebebi örneğin yeni kuruluyor olmasından kaynaklanmaktadır.
Bir kaç dakika sonra veri listemizdeki değişimleri görüntüleyebiliriz.
$ ceilometer sample-list -m cpu_util --limit 5
+--------------------------------------+----------+-------+----------------+------+----------------------------+
| Resource ID | Name | Type | Volume | Unit | Timestamp |
+--------------------------------------+----------+-------+----------------+------+----------------------------+
| c053665a-2d40-4938-bf99-d106bf24b2cd | cpu_util | gauge | 62.6439069056 | % | 2019-07-22T09:37:47.462466 |
| c053665a-2d40-4938-bf99-d106bf24b2cd | cpu_util | gauge | 62.7612794668 | % | 2019-07-22T09:36:47.445764 |
| c053665a-2d40-4938-bf99-d106bf24b2cd | cpu_util | gauge | 34.7904874944 | % | 2019-07-22T09:35:47.121946 |
| c053665a-2d40-4938-bf99-d106bf24b2cd | cpu_util | gauge | 0.946347178752 | % | 2019-07-22T09:34:47.301289 |
| c053665a-2d40-4938-bf99-d106bf24b2cd | cpu_util | gauge | 18.6354401373 | % | 2019-07-22T09:33:47.069694 |
+--------------------------------------+----------+-------+----------------+------+----------------------------+
$ ceilometer alarm-list
+--------------------------------------+------------------------------------+-------+----------+---------+------------+--------------------------------------+------------------+
| Alarm ID | Name | State | Severity | Enabled | Continuous | Alarm condition | Time constraints |
+--------------------------------------+------------------------------------+-------+----------+---------+------------+--------------------------------------+------------------+
| afbc7c73-3e19-43c0-8b75-08925a355ec5 | scaler-cpu_alarm_low-64nlj5pbpyrw | ok | low | True | True | avg(cpu_util) < 10.0 during 1 x 180s | None |
| beeccadf-f38c-4f45-aa58-ca2fd457ad44 | scaler-cpu_alarm_high-rl54fpd34rum | alarm | low | True | True | avg(cpu_util) > 50.0 during 1 x 120s | None |
+--------------------------------------+------------------------------------+-------+----------+---------+------------+--------------------------------------+------------------+
Görüldüğü gibi son iki dakikada CPU tüketimi ortalama %50'nin üzerinde olduğu için scaler-cpu_alarm_high-rl54fpd34rum'ın state'i alarm olarak ayarlandı. Bu durumda ikinci örneğimizin başlamış olması gerekmekte.
$ openstack server list
+--------------------------------------+-------------------------------------------------------+--------+--------------------------------------------------------------------+
| ID | Name | Status | Networks |
+--------------------------------------+-------------------------------------------------------+--------+--------------------------------------------------------------------+
| 136f220c-4545-43a4-9f6b-7f9f2ff3acef | sc-gwg7-j7teomzvtp2s-qpfba363ukoy-server-6bunlueu5co6 | ACTIVE | private=fd58:e23c:721d:0:f816:3eff:fe0c:57ff, 10.0.0.4, 172.24.4.4 |
| c053665a-2d40-4938-bf99-d106bf24b2cd | sc-gwg7-oth272nxusrq-w6nzzwwsslhn-server-df7ndjovwatz | ACTIVE | private=fd58:e23c:721d:0:f816:3eff:fe3f:5aca, 10.0.0.3, 172.24.4.3 |
+--------------------------------------+-------------------------------------------------------+--------+--------------------------------------------------------------------+
Her iki örneğimizde sorunsuz şekilde ayakta. 172.24.4.3 ip adresli örneğe bağlanıp sonsuz IO işlemini iptal etmeliyiz. Ardından scale-down işleminin gerçekleştiğini ve bir adet örneğimizin kaldığını göreceğiz.
$ ssh ubuntu@172.24.4.3 -i sshKey.pem
ubuntu@sc-gwg7-oth272nxusrq-w6nzzwwsslhn-server-df7ndjovwatz:~$ kill -9 1514
ubuntu@sc-gwg7-oth272nxusrq-w6nzzwwsslhn-server-df7ndjovwatz:~$ kill -9 1515
ubuntu@sc-gwg7-oth272nxusrq-w6nzzwwsslhn-server-df7ndjovwatz:~$ logout
CPU tüketimi üç dakika için %10'un altında kaldığında scale-down işlemimiz başlayacak ve bir örneğimiz kalacaktır. Bu nedenle bir kaç dakika beklemeliyiz.
$ ceilometer alarm-list
+--------------------------------------+------------------------------------+-------+----------+---------+------------+--------------------------------------+------------------+
| Alarm ID | Name | State | Severity | Enabled | Continuous | Alarm condition | Time constraints |
+--------------------------------------+------------------------------------+-------+----------+---------+------------+--------------------------------------+------------------+
| afbc7c73-3e19-43c0-8b75-08925a355ec5 | scaler-cpu_alarm_low-64nlj5pbpyrw | alarm | low | True | True | avg(cpu_util) < 10.0 during 1 x 180s | None |
| beeccadf-f38c-4f45-aa58-ca2fd457ad44 | scaler-cpu_alarm_high-rl54fpd34rum | ok | low | True | True | avg(cpu_util) > 50.0 during 1 x 120s | None |
+--------------------------------------+------------------------------------+-------+----------+---------+------------+--------------------------------------+------------------+
$ openstack server list
+--------------------------------------+-------------------------------------------------------+--------+--------------------------------------------------------------------+
| ID | Name | Status | Networks |
+--------------------------------------+-------------------------------------------------------+--------+--------------------------------------------------------------------+
| 136f220c-4545-43a4-9f6b-7f9f2ff3acef | sc-gwg7-j7teomzvtp2s-qpfba363ukoy-server-6bunlueu5co6 | ACTIVE | private=fd58:e23c:721d:0:f816:3eff:fe0c:57ff, 10.0.0.4, 172.24.4.4 |
+--------------------------------------+-------------------------------------------------------+--------+--------------------------------------------------------------------+
Son durumda scaler-cpu_alarm_low-64nlj5pbpyrw alarmının state'i alarm olarak ayarlandı ve ikinci örneğimiz sonlandırıldı.
NOT: Sonlandırma işlemi sırasında daima ilk başlatılan örnek sonlandırılır.
Bu dökümanda OpenStack Liberty versiyonunda Heat servisi ile auto scaling işlemini tamamladık. Dilerseniz seriye Murano Servisi için DevStack Yapılandırması ve Uygulama Kataloğu isimli döküman ile devam edebilirsiniz.