인스턴스의 자동 확장
Red Hat OpenStack Platform에서 자동 확장 구성
OpenStack Documentation Team
rhos-docs@redhat.com초록
보다 포괄적 수용을 위한 오픈 소스 용어 교체
Red Hat은 코드, 문서, 웹 속성에서 문제가 있는 용어를 교체하기 위해 최선을 다하고 있습니다. 먼저 마스터(master), 슬레이브(slave), 블랙리스트(blacklist), 화이트리스트(whitelist) 등 네 가지 용어를 교체하고 있습니다. 이러한 변경 작업은 작업 범위가 크므로 향후 여러 릴리스에 걸쳐 점차 구현할 예정입니다. 자세한 내용은 CTO Chris Wright의 메시지를 참조하십시오.
Red Hat 문서에 관한 피드백 제공
문서 개선을 위한 의견을 보내 주십시오. Red Hat이 어떻게 이를 개선하는지 알려주십시오.
DDF(직접 문서 피드백) 기능 사용
특정 문장, 단락 또는 코드 블록에 대한 직접 주석은 피드백 추가 DDF 기능을 사용하십시오.
- 다중 페이지 HTML 형식으로 설명서를 봅니다.
- 문서 오른쪽 상단에 Feedback (피드백) 버튼이 표시되는지 확인합니다.
- 주석 처리하려는 텍스트 부분을 강조 표시합니다.
- 피드백 추가를 클릭합니다.
- 주석을 사용하여 Add Feedback (피드백 추가) 필드를 작성합니다.
- 선택 사항: 설명서 팀이 문제에 대한 자세한 내용을 문의할 수 있도록 이메일 주소를 추가하십시오.
- Submit(제출)을 클릭합니다.
1장. 컴퓨팅 인스턴스의 자동 확장 구성
많은 시스템 사용량에 따라 Compute 인스턴스를 자동으로 확장하려면 CPU 또는 메모리 사용량과 같은 요소를 고려하는 사전 정의된 규칙을 사용할 수 있습니다. 환경 요구에 따라 추가 인스턴스를 자동으로 추가 및 제거하도록 Orchestration(heat)을 구성할 수도 있습니다.
자동 확장을 제공하는 핵심 구성 요소는 Orchestration(heat)입니다. 오케스트레이션을 사용하여 사람이 읽을 수 있는 YAML 템플릿을 사용하여 규칙을 정의할 수 있습니다. 이러한 규칙은 원격 분석 데이터를 기반으로 시스템 부하를 평가하여 스택에 더 많은 인스턴스를 추가해야 하는지 여부를 확인하기 위해 적용됩니다. 부하가 감소하면 오케스트레이션에서 사용되지 않는 인스턴스를 자동으로 제거할 수 있습니다.
Telemetry를 사용하여 RHOSP(Red Hat OpenStack Platform) 환경의 성능을 모니터링하여 인스턴스 및 물리적 호스트에 대한 CPU, 스토리지 및 메모리 사용률의 데이터를 수집합니다. 오케스트레이션 템플릿은 원격 분석 데이터를 검사하여 사전 정의된 작업을 시작해야 하는지 여부를 평가합니다.
1.1. 키 자동 스케일링 용어
- 스택 - 스택은 애플리케이션을 운영하는 데 필요한 모든 리소스를 나타냅니다. 단일 인스턴스 및 해당 리소스만큼 간단하거나 다계층 애플리케이션을 구성하는 모든 리소스 종속성이 있는 여러 인스턴스만큼 복잡할 수 있습니다.
템플릿 - 오케스트레이션(heat)을 실행할 일련의 작업을 정의하는 YAML 스크립트입니다. 예를 들어 특정 기능에 별도의 템플릿을 사용하는 것이 좋습니다.
- Template File (템플릿 파일) - Telemetry에서 응답하는 임계값을 정의하고 자동 확장 그룹을 정의하는 위치입니다.
- Environment File (환경 파일) - 환경에 대한 빌드 정보(사용할 플레이버 및 이미지, 가상 네트워크 구성 방법 및 설치할 소프트웨어)를 정의합니다.
1.2. 예제: CPU 사용량에 따른 자동 스케일링
이 예제에서 오케스트레이션은 원격 분석 데이터를 검사하고 CPU 사용량이 많은 응답으로 인스턴스 수를 자동으로 늘립니다. 스택 템플릿과 환경 템플릿을 생성하여 규칙 및 후속 구성을 정의합니다. 이 예제에서는 네트워크와 같은 기존 리소스를 사용하며 사용자 환경의 사용자와 다를 수 있는 이름을 사용합니다.
cpu_util 지표는 더 이상 사용되지 않으며 Red Hat OpenStack Platform에서 제거되었습니다.
절차
인스턴스 플레이버, 네트워킹 구성 및 이미지 유형을 설명하는 환경 템플릿을 만듭니다. 템플릿을
/home/<user>/stacks/example1/cirros.yaml파일에 저장합니다.<user>변수를 실제 사용자 이름으로 바꿉니다.heat_template_version: 2016-10-14 description: Template to spawn an cirros instance. parameters: metadata: type: json image: type: string description: image used to create instance default: cirros flavor: type: string description: instance flavor to be used default: m1.tiny key_name: type: string description: keypair to be used default: mykeypair network: type: string description: project network to attach instance to default: internal1 external_network: type: string description: network used for floating IPs default: external_network resources: server: type: OS::Nova::Server properties: block_device_mapping: - device_name: vda delete_on_termination: true volume_id: { get_resource: volume } flavor: {get_param: flavor} key_name: {get_param: key_name} metadata: {get_param: metadata} networks: - port: { get_resource: port } port: type: OS::Neutron::Port properties: network: {get_param: network} security_groups: - default floating_ip: type: OS::Neutron::FloatingIP properties: floating_network: {get_param: external_network} floating_ip_assoc: type: OS::Neutron::FloatingIPAssociation properties: floatingip_id: { get_resource: floating_ip } port_id: { get_resource: port } volume: type: OS::Cinder::Volume properties: image: {get_param: image} size: 1오케스트레이션 리소스를
~/stacks/example1/environment.yaml에 등록합니다.resource_registry: "OS::Nova::Server::Cirros": ~/stacks/example1/cirros.yaml스택 템플릿을 생성합니다. 조사할 CPU 임계값과 추가할 인스턴스 수를 설명합니다. 이 템플릿에 참여할 수 있는 최소 및 최대 인스턴스 수를 정의하는 인스턴스 그룹도 생성됩니다.
참고cpu_util지표는 더 이상 사용되지 않으며 Red Hat OpenStack Platform에서 제거되었습니다. 동등한 기능을 얻으려면 누적CPU지표와rate:mean집계 방법을 포함하는 보관 정책을 사용합니다. 예를 들면ceilometer-high-rate및ceilometer-low-rate입니다. CPU 사용률 알람에 대해cpu지표를 사용하려면 임계값을 %에서 ns로 변환해야 합니다. 공식은 time_ns = ✓,000 x {granularity} x {percentage_in_decimal}입니다. 예를 들어 세분성이 1인 80%의 임계값의 경우 임계값은 ,000 x 1 x✓ = 800,000,000.0입니다.다음 값을
~/stacks/example1/template.yaml에 저장합니다.heat_template_version: 2016-10-14 description: Example auto scale group, policy and alarm resources: scaleup_group: type: OS::Heat::AutoScalingGroup properties: cooldown: 300 desired_capacity: 1 max_size: 3 min_size: 1 resource: type: OS::Nova::Server::Cirros properties: metadata: {"metering.server_group": {get_param: "OS::stack_id"}} scaleup_policy: type: OS::Heat::ScalingPolicy properties: adjustment_type: change_in_capacity auto_scaling_group_id: { get_resource: scaleup_group } cooldown: 300 scaling_adjustment: 1 scaledown_policy: type: OS::Heat::ScalingPolicy properties: adjustment_type: change_in_capacity auto_scaling_group_id: { get_resource: scaleup_group } cooldown: 300 scaling_adjustment: -1 cpu_alarm_high: type: OS::Aodh::GnocchiAggregationByResourcesAlarm properties: description: Scale up if CPU > 80% metric: cpu aggregation_method: rate:mean granularity: 1 evaluation_periods: 3 threshold: 800000000.0 resource_type: instance comparison_operator: gt alarm_actions: - str_replace: template: trust+url params: url: {get_attr: [scaleup_policy, signal_url]} query: str_replace: template: '{"=": {"server_group": "stack_id"}}' params: stack_id: {get_param: "OS::stack_id"} cpu_alarm_low: type: OS::Aodh::GnocchiAggregationByResourcesAlarm properties: metric: cpu aggregation_method: rate:mean granularity: 600 evaluation_periods: 3 threshold: 200000000.0 resource_type: instance comparison_operator: lt alarm_actions: - str_replace: template: trust+url params: url: {get_attr: [scaledown_policy, signal_url]} query: str_replace: template: '{"=": {"server_group": "stack_id"}}' params: stack_id: {get_param: "OS::stack_id"} outputs: scaleup_policy_signal_url: value: {get_attr: [scaleup_policy, signal_url]} scaledown_policy_signal_url: value: {get_attr: [scaledown_policy, signal_url]}환경을 빌드하고 인스턴스를 배포합니다.
$ openstack stack create -t template.yaml -e environment.yaml example +---------------------+--------------------------------------------+ | Field | Value | +---------------------+--------------------------------------------+ | id | 248a98bb-f56e-4934-a281-fffde62d78d8 | | stack_name | example | | description | Example auto scale group, policy and alarm | | creation_time | 2017-03-06T15:00:29Z | | updated_time | None | | stack_status | CREATE_IN_PROGRESS | | stack_status_reason | Stack CREATE started | +---------------------+--------------------------------------------+
오케스트레이션에서 스택을 생성하고
scaleup_group정의의min_size매개 변수에 정의된 대로 정의된 최소 cirros 인스턴스를 시작합니다. 인스턴스가 성공적으로 생성되었는지 확인합니다.$ openstack server list +--------------------------------------+-------------------------------------------------------+--------+------------+-------------+-------------------------------------+ | ID | Name | Status | Task State | Power State | Networks | +--------------------------------------+-------------------------------------------------------+--------+------------+-------------+-------------------------------------+ | e1524f65-5be6-49e4-8501-e5e5d812c612 | ex-3gax-5f3a4og5cwn2-png47w3u2vjd-server-vaajhuv4mj3j | ACTIVE | - | Running | internal1=10.10.10.9, 192.168.122.8 | +--------------------------------------+-------------------------------------------------------+--------+------------+-------------+-------------------------------------+
오케스트레이션에서는 cpu_alarm_
high 및 cpu_알람도 생성합니다. 트리거가 있는지 확인합니다.alarm_low에 정의된 대로 확장 또는 축소 이벤트를 트리거하는 두 개의 cpu$ openstack alarm list +--------------------------------------+--------------------------------------------+-------------------------------------+-------------------+----------+---------+ | alarm_id | type | name | state | severity | enabled | +--------------------------------------+--------------------------------------------+-------------------------------------+-------------------+----------+---------+ | 022f707d-46cc-4d39-a0b2-afd2fc7ab86a | gnocchi_aggregation_by_resources_threshold | example-cpu_alarm_high-odj77qpbld7j | insufficient data | low | True | | 46ed2c50-e05a-44d8-b6f6-f1ebd83af913 | gnocchi_aggregation_by_resources_threshold | example-cpu_alarm_low-m37jvnm56x2t | insufficient data | low | True | +--------------------------------------+--------------------------------------------+-------------------------------------+-------------------+----------+---------+
1.3. 인스턴스 자동 확장 테스트
오케스트레이션에서는 cpu_alarm_high 임계값 정의를 기반으로 인스턴스를 자동으로 확장할 수 있습니다. CPU 사용률이 임계값 에 정의된 값에 도달하면 또 다른 인스턴스가 부하의 균형을 맞추기 시작합니다. template.yaml 파일의 임계값 이 80%로 설정되어 있습니다.
절차
인스턴스에 로그온하고 여러
dd명령을 실행하여 부하를 생성합니다.$ ssh -i ~/mykey.pem cirros@192.168.122.8 $ sudo dd if=/dev/zero of=/dev/null & $ sudo dd if=/dev/zero of=/dev/null & $ sudo dd if=/dev/zero of=/dev/null &
dd명령을 실행한 후에는 cirros 인스턴스에서 100% CPU를 사용할 수 있습니다. 알람이 트리거되었는지 확인합니다.$ openstack alarm list +--------------------------------------+--------------------------------------------+-------------------------------------+-------+----------+---------+ | alarm_id | type | name | state | severity | enabled | +--------------------------------------+--------------------------------------------+-------------------------------------+-------+----------+---------+ | 022f707d-46cc-4d39-a0b2-afd2fc7ab86a | gnocchi_aggregation_by_resources_threshold | example-cpu_alarm_high-odj77qpbld7j | alarm | low | True | | 46ed2c50-e05a-44d8-b6f6-f1ebd83af913 | gnocchi_aggregation_by_resources_threshold | example-cpu_alarm_low-m37jvnm56x2t | ok | low | True | +--------------------------------------+--------------------------------------------+-------------------------------------+-------+----------+---------+
약 60초 후에 오케스트레이션에서 다른 인스턴스를 시작하여 그룹에 추가합니다. 이를 확인하려면 다음 명령을 입력합니다.
$ openstack server list +--------------------------------------+-------------------------------------------------------+--------+------------+-------------+---------------------------------------+ | ID | Name | Status | Task State | Power State | Networks | +--------------------------------------+-------------------------------------------------------+--------+------------+-------------+---------------------------------------+ | 477ee1af-096c-477c-9a3f-b95b0e2d4ab5 | ex-3gax-4urpikl5koff-yrxk3zxzfmpf-server-2hde4tp4trnk | ACTIVE | - | Running | internal1=10.10.10.13, 192.168.122.17 | | e1524f65-5be6-49e4-8501-e5e5d812c612 | ex-3gax-5f3a4og5cwn2-png47w3u2vjd-server-vaajhuv4mj3j | ACTIVE | - | Running | internal1=10.10.10.9, 192.168.122.8 | +--------------------------------------+-------------------------------------------------------+--------+------------+-------------+---------------------------------------+
또 다른 짧은 기간 후에 오케스트레이션이 3개의 인스턴스로 자동 확장되었는지 관찰합니다. 구성은 최대 3개의 인스턴스로 설정되므로 더 큰 크기(scale
up_group 정의:수 없습니다. 세 개의 인스턴스가 있는지 확인하려면 다음 명령을 입력합니다.max_size)를 확장할$ openstack server list +--------------------------------------+-------------------------------------------------------+--------+------------+-------------+---------------------------------------+ | ID | Name | Status | Task State | Power State | Networks | +--------------------------------------+-------------------------------------------------------+--------+------------+-------------+---------------------------------------+ | 477ee1af-096c-477c-9a3f-b95b0e2d4ab5 | ex-3gax-4urpikl5koff-yrxk3zxzfmpf-server-2hde4tp4trnk | ACTIVE | - | Running | internal1=10.10.10.13, 192.168.122.17 | | e1524f65-5be6-49e4-8501-e5e5d812c612 | ex-3gax-5f3a4og5cwn2-png47w3u2vjd-server-vaajhuv4mj3j | ACTIVE | - | Running | internal1=10.10.10.9, 192.168.122.8 | | 6c88179e-c368-453d-a01a-555eae8cd77a | ex-3gax-fvxz3tr63j4o-36fhftuja3bw-server-rhl4sqkjuy5p | ACTIVE | - | Running | internal1=10.10.10.5, 192.168.122.5 | +--------------------------------------+-------------------------------------------------------+--------+------------+-------------+---------------------------------------+
1.4. 인스턴스 자동 축소
Orchestration을 사용하여 cpu_alarm_low 임계값에 따라 인스턴스를 자동으로 축소할 수 있습니다. 이 예에서는 CPU 사용이 5% 미만인 경우 인스턴스가 축소됩니다.
절차
실행 중인
dd프로세스를 종료하고 Orchestration이 인스턴스를 다시 축소하기 시작했는지 관찰합니다.$ killall dd
dd프로세스를 중지하면cpu_alarm_low 이벤트알람이 트리거됩니다. 결과적으로 오케스트레이션에서 인스턴스를 자동으로 축소하고 제거하기 시작합니다. 해당 알람이 트리거되었는지 확인합니다.$ openstack alarm list +--------------------------------------+--------------------------------------------+-------------------------------------+-------+----------+---------+ | alarm_id | type | name | state | severity | enabled | +--------------------------------------+--------------------------------------------+-------------------------------------+-------+----------+---------+ | 022f707d-46cc-4d39-a0b2-afd2fc7ab86a | gnocchi_aggregation_by_resources_threshold | example-cpu_alarm_high-odj77qpbld7j | ok | low | True | | 46ed2c50-e05a-44d8-b6f6-f1ebd83af913 | gnocchi_aggregation_by_resources_threshold | example-cpu_alarm_low-m37jvnm56x2t | alarm | low | True | +--------------------------------------+--------------------------------------------+-------------------------------------+-------+----------+---------+
몇 분 후 오케스트레이션에서 인스턴스 수를
scaleup_group정의의min_size매개 변수에 정의된 최소 값으로 지속적으로 줄입니다. 이 시나리오에서는min_size매개 변수가1로 설정됩니다.
1.5. 자동 스케일링 문제 해결
환경이 제대로 작동하지 않는 경우 로그 파일과 기록 레코드에서 오류를 찾을 수 있습니다.
절차
상태 전환에 대한 정보를 검색하려면 스택 이벤트 레코드를 나열합니다.
$ openstack stack event list example 2017-03-06 11:12:43Z [example]: CREATE_IN_PROGRESS Stack CREATE started 2017-03-06 11:12:43Z [example.scaleup_group]: CREATE_IN_PROGRESS state changed 2017-03-06 11:13:04Z [example.scaleup_group]: CREATE_COMPLETE state changed 2017-03-06 11:13:04Z [example.scaledown_policy]: CREATE_IN_PROGRESS state changed 2017-03-06 11:13:05Z [example.scaleup_policy]: CREATE_IN_PROGRESS state changed 2017-03-06 11:13:05Z [example.scaledown_policy]: CREATE_COMPLETE state changed 2017-03-06 11:13:05Z [example.scaleup_policy]: CREATE_COMPLETE state changed 2017-03-06 11:13:05Z [example.cpu_alarm_low]: CREATE_IN_PROGRESS state changed 2017-03-06 11:13:05Z [example.cpu_alarm_high]: CREATE_IN_PROGRESS state changed 2017-03-06 11:13:06Z [example.cpu_alarm_low]: CREATE_COMPLETE state changed 2017-03-06 11:13:07Z [example.cpu_alarm_high]: CREATE_COMPLETE state changed 2017-03-06 11:13:07Z [example]: CREATE_COMPLETE Stack CREATE completed successfully 2017-03-06 11:19:34Z [example.scaleup_policy]: SIGNAL_COMPLETE alarm state changed from alarm to alarm (Remaining as alarm due to 1 samples outside threshold, most recent: 95.4080102993) 2017-03-06 11:25:43Z [example.scaleup_policy]: SIGNAL_COMPLETE alarm state changed from alarm to alarm (Remaining as alarm due to 1 samples outside threshold, most recent: 95.8869217299) 2017-03-06 11:33:25Z [example.scaledown_policy]: SIGNAL_COMPLETE alarm state changed from ok to alarm (Transition to alarm due to 1 samples outside threshold, most recent: 2.73931707966) 2017-03-06 11:39:15Z [example.scaledown_policy]: SIGNAL_COMPLETE alarm state changed from alarm to alarm (Remaining as alarm due to 1 samples outside threshold, most recent: 2.78110858552)
알람 기록 로그를 읽으려면 다음 명령을 입력합니다.
$ openstack alarm-history show 022f707d-46cc-4d39-a0b2-afd2fc7ab86a +----------------------------+------------------+-----------------------------------------------------------------------------------------------------+--------------------------------------+ | timestamp | type | detail | event_id | +----------------------------+------------------+-----------------------------------------------------------------------------------------------------+--------------------------------------+ | 2017-03-06T11:32:35.510000 | state transition | {"transition_reason": "Transition to ok due to 1 samples inside threshold, most recent: | 25e0e70b-3eda-466e-abac-42d9cf67e704 | | | | 2.73931707966", "state": "ok"} | | | 2017-03-06T11:17:35.403000 | state transition | {"transition_reason": "Transition to alarm due to 1 samples outside threshold, most recent: | 8322f62c-0d0a-4dc0-9279-435510f81039 | | | | 95.0964497325", "state": "alarm"} | | | 2017-03-06T11:15:35.723000 | state transition | {"transition_reason": "Transition to ok due to 1 samples inside threshold, most recent: | 1503bd81-7eba-474e-b74e-ded8a7b630a1 | | | | 3.59330523447", "state": "ok"} | | | 2017-03-06T11:13:06.413000 | creation | {"alarm_actions": ["trust+http://fca6e27e3d524ed68abdc0fd576aa848:delete@192.168.122.126:8004/v1/fd | 224f15c0-b6f1-4690-9a22-0c1d236e65f6 | | | | 1c345135be4ee587fef424c241719d/stacks/example/d9ef59ed-b8f8-4e90-bd9b- | | | | | ae87e73ef6e2/resources/scaleup_policy/signal"], "user_id": "a85f83b7f7784025b6acdc06ef0a8fd8", | | | | | "name": "example-cpu_alarm_high-odj77qpbld7j", "state": "insufficient data", "timestamp": | | | | | "2017-03-06T11:13:06.413455", "description": "Scale up if CPU > 80%", "enabled": true, | | | | | "state_timestamp": "2017-03-06T11:13:06.413455", "rule": {"evaluation_periods": 1, "metric": | | | | | "cpu_util", "aggregation_method": "mean", "granularity": 300, "threshold": 80.0, "query": "{\"=\": | | | | | {\"server_group\": \"d9ef59ed-b8f8-4e90-bd9b-ae87e73ef6e2\"}}", "comparison_operator": "gt", | | | | | "resource_type": "instance"}, "alarm_id": "022f707d-46cc-4d39-a0b2-afd2fc7ab86a", | | | | | "time_constraints": [], "insufficient_data_actions": null, "repeat_actions": true, "ok_actions": | | | | | null, "project_id": "fd1c345135be4ee587fef424c241719d", "type": | | | | | "gnocchi_aggregation_by_resources_threshold", "severity": "low"} | | +----------------------------+------------------+-----------------------------------------------------------------------------------------------------+-------------------------------------기존 스택에 대해 heat가 수집하는 스케일 아웃 또는 축소 작업의 레코드를 보려면
awk명령을 사용하여heat-engine.log를 구문 분석할 수 있습니다.$ awk '/Stack UPDATE started/,/Stack CREATE completed successfully/ {print $0}' /var/log/containers/heat/heat-engine.logaodh관련 정보를 보려면evaluator.log를 검사합니다 :$ grep -i alarm /var/log/containers/aodh/evaluator.log | grep -i transition