Интеграция ИИ для более интеллектуальной автоматизации инфраструктуры¶
Помимо написания скриптов и создания конвейеров обработки данных, возможности, основанные на искусственном интеллекте, все больше влияют на управление облачной инфраструктурой. Широкая область AIOps (ИИ для ИТ-операций) объединяет машинное обучение, большие данные и автоматизацию для оптимизации и даже автоматизации принятия решений.
Основные направления применения ИИ в OpenStack¶
- Обнаружение аномалий и прогнозные оповещения
- Оркестрация на основе ИИ
- Инициализация на основе намерений (генеративная IaC)
Обнаружение аномалий и прогнозные оповещения¶
Инструменты ИИ и машинного обучения могут получать метрики и журналы из OpenStack (через службы телеметрии, такие как Ceilometer, или внешние системы мониторинга), чтобы изучать нормальное поведение и выявлять проблемы на ранней стадии.
Примечание
Платформы AIOps полагаются на автоматическое обнаружение аномалий, прогнозную аналитику и интеллектуальные оповещения для выявления потенциальных проблем до того, как они повлияют на работу системы.
Примеры применения:
- Обнаружение необычного увеличения задержки на виртуальной машине Nova
- Превентивная миграция рабочей нагрузки при прогнозировании сбоя
- Выявление аномалий в потреблении ресурсов
- Раннее предупреждение о возможных отказах оборудования
Архитектура системы обнаружения аномалий¶
+----------------+ +----------------+ +----------------+
| OpenStack | | Сбор данных | | ML/AI модель |
| |---->| (Ceilometer, |---->| (обученная на |
| Nova/Neutron/ | | Prometheus) | | истории) |
| Cinder | +----------------+ +----------------+
+----------------+ |
|
v
+----------------+ +----------------+ +----------------+
| Действия |<----| Оповещения |<----| Обнаружение |
| (миграция, | | (Alertmanager)| | аномалий |
| масштабирова- | +----------------+ +----------------+
| ние) |
+----------------+
Пример кода для обнаружения аномалий с использованием Python и машинного обучения:
import numpy as np
from sklearn.ensemble import IsolationForest
from openstack import connection
# Подключение к OpenStack
conn = connection.Connection(
auth_url="https://openstack.example.com:5000/v3",
project_name="admin",
username="admin",
password="password",
user_domain_id="default",
project_domain_id="default"
)
# Сбор метрик с виртуальных машин
def collect_metrics():
metrics = []
servers = conn.compute.servers()
for server in servers:
# Получение метрик CPU, памяти, диска
cpu_usage = get_cpu_usage(server.id) # через Ceilometer или другой источник
memory_usage = get_memory_usage(server.id)
disk_io = get_disk_io(server.id)
metrics.append([cpu_usage, memory_usage, disk_io])
return np.array(metrics)
# Обучение модели Isolation Forest
def train_model(metrics):
model = IsolationForest(contamination=0.1, random_state=42)
model.fit(metrics)
return model
# Обнаружение аномалий
def detect_anomalies(model, new_metrics):
predictions = model.predict(new_metrics)
anomalies = np.where(predictions == -1)[0]
return anomalies
# Основной цикл
metrics = collect_metrics()
model = train_model(metrics)
# Периодическая проверка новых метрик
new_metrics = collect_metrics()
anomalies = detect_anomalies(model, new_metrics)
if len(anomalies) > 0:
print(f"Обнаружены аномалии на серверах: {anomalies}")
# Отправка оповещений и/или принятие мер
Оркестрация на основе ИИ¶
Исследования в области оркестрации облачных ресурсов с использованием ИИ показывают, что передовые алгоритмы (включая обучение с подкреплением и эволюционные алгоритмы) могут динамически оптимизировать распределение ресурсов и планирование в облаке.
Важно
Исследования подчеркивают потенциал машинного обучения и обучения с подкреплением для прогнозирования рабочей нагрузки, оптимизации распределения ресурсов и автономного принятия решений в облачных средах.
Преимущества оркестрации на основе ИИ:
- Динамическая оптимизация размещения виртуальных машин
- Балансировка нагрузки на основе прогнозирования
- Энергоэффективность (упаковка ВМ при низкой нагрузке)
- Максимизация пропускной способности под высокой нагрузкой
- Самонастраивающаяся инфраструктура
Пример использования обучения с подкреплением для планирования задач:
import gym
import numpy as np
from stable_baselines3 import PPO
# Пользовательская среда OpenAI Gym для планирования ресурсов OpenStack
class OpenStackSchedulerEnv(gym.Env):
def __init__(self):
super().__init__()
self.action_space = gym.spaces.Discrete(10) # Различные стратегии планирования
self.observation_space = gym.spaces.Box(low=0, high=100, shape=(20,), dtype=np.float32)
def step(self, action):
# Применение действия к планировщику
# Получение награды на основе эффективности (использование ресурсов, задержка и т.д.)
reward = self.calculate_reward(action)
done = False
return self.get_observation(), reward, done, {}
def reset(self):
# Сброс среды
return self.get_observation()
def calculate_reward(self, action):
# Расчет награды на основе метрик OpenStack
return np.random.random()
def get_observation(self):
# Сбор текущего состояния кластера
return np.random.random(20)
# Создание и обучение модели
env = OpenStackSchedulerEnv()
model = PPO("MlpPolicy", env, verbose=1)
model.learn(total_timesteps=10000)
# Использование обученной модели для планирования
obs = env.reset()
for i in range(100):
action, _states = model.predict(obs, deterministic=True)
obs, reward, done, info = env.step(action)
Инициализация на основе намерений (генеративная IaC)¶
Передовая тенденция — переход от написания кода IaC вручную к определению высокоуровневых намерений. Будущее IaC — за генеративной инфраструктурой, управляемой намерениями.
Примечание
Вместо написания каждой строки кода Terraform или Heat, пользователи выражают свои желания («намерения»), например: «развернуть трехзвенное веб-приложение с балансировщиком нагрузки, двумя веб-серверами и кластером баз данных». Затем инструменты на основе ИИ преобразуют эти намерения в конкретные шаблоны.
Пример преобразования намерения в код Terraform:
Намерение: "Развернуть трехзвенное веб-приложение в OpenStack
с балансировщиком нагрузки, двумя веб-серверами
и кластером баз данных PostgreSQL"
# Сгенерированный код Terraform:
# Балансировщик нагрузки
resource "openstack_lb_loadbalancer_v2" "web_lb" {
name = "web-loadbalancer"
vip_subnet_id = openstack_networking_subnet_v2.public.id
}
resource "openstack_lb_listener_v2" "web_listener" {
name = "web-listener"
protocol = "HTTP"
protocol_port = 80
loadbalancer_id = openstack_lb_loadbalancer_v2.web_lb.id
}
resource "openstack_lb_pool_v2" "web_pool" {
name = "web-pool"
protocol = "HTTP"
lb_method = "ROUND_ROBIN"
listener_id = openstack_lb_listener_v2.web_listener.id
}
# Веб-серверы (2 экземпляра)
resource "openstack_compute_instance_v2" "web_server" {
count = 2
name = "web-server-${count.index + 1}"
image_name = "ubuntu-22.04"
flavor_name = "m1.medium"
network {
uuid = openstack_networking_network_v2.private.id
}
user_data = <<-EOF
#!/bin/bash
apt-get update
apt-get install -y nginx
systemctl enable nginx
systemctl start nginx
EOF
}
# Кластер баз данных PostgreSQL
resource "openstack_compute_instance_v2" "postgresql" {
name = "postgresql-server"
image_name = "ubuntu-22.04"
flavor_name = "m1.large"
network {
uuid = openstack_networking_network_v2.private.id
}
user_data = <<-EOF
#!/bin/bash
apt-get update
apt-get install -y postgresql
systemctl enable postgresql
systemctl start postgresql
EOF
}
# Сеть
resource "openstack_networking_network_v2" "private" {
name = "private-network"
admin_state_up = "true"
}
resource "openstack_networking_subnet_v2" "private" {
name = "private-subnet"
network_id = openstack_networking_network_v2.private.id
cidr = "192.168.10.0/24"
ip_version = 4
}
resource "openstack_networking_router_v2" "router" {
name = "router"
external_network_id = data.openstack_networking_network_v2.external.id
}
resource "openstack_networking_router_interface_v2" "router_interface" {
router_id = openstack_networking_router_v2.router.id
subnet_id = openstack_networking_subnet_v2.private.id
}
data "openstack_networking_network_v2" "external" {
name = "public"
}
Инструменты и подходы AIOps для OpenStack¶
Пример интеграции с Prometheus и ML для обнаружения аномалий¶
# prometheus-rules.yaml
groups:
- name: ml-based-anomalies
interval: 30s
rules:
- record: prediction:cpu_usage:next_1h
expr: |
predict_linear(node_cpu_seconds_total{mode="user"}[1h], 3600)
- alert: HighCPUUsagePredicted
expr: |
prediction:cpu_usage:next_1h > 80
for: 10m
annotations:
summary: "Прогнозируется высокая загрузка CPU"
Пример использования ChatGPT для генерации IaC¶
Промпт: "Сгенерируй шаблон Heat для развертывания одной виртуальной машины
с Ubuntu 22.04, флейвор m1.medium, с подключением к сети private-net
и с security group, открывающей порты 22 и 80"
Результат:
heat_template_version: 2023-05-18
description: Simple template to deploy a single instance
parameters:
image:
type: string
description: Image ID or name
default: Ubuntu-22.04
flavor:
type: string
description: Flavor to use
default: m1.medium
network:
type: string
description: Network ID or name
default: private-net
key_name:
type: string
description: Key pair name
default: mykey
resources:
security_group:
type: OS::Neutron::SecurityGroup
properties:
name: web-server-sg
rules:
- protocol: tcp
port_range_min: 22
port_range_max: 22
remote_ip_prefix: 0.0.0.0/0
- protocol: tcp
port_range_min: 80
port_range_max: 80
remote_ip_prefix: 0.0.0.0/0
server:
type: OS::Nova::Server
properties:
name: web-server
image: { get_param: image }
flavor: { get_param: flavor }
key_name: { get_param: key_name }
networks:
- network: { get_param: network }
security_groups:
- { get_resource: security_group }
outputs:
instance_ip:
description: IP address of the deployed instance
value: { get_attr: [server, first_address] }
Будущее ИИ в управлении инфраструктурой OpenStack¶
- Самовосстанавливающиеся системы: Автоматическое обнаружение и устранение проблем без участия человека
- Оптимизация затрат: Прогнозирование спотовых цен и планирование окон технического обслуживания
- Проверка намерений: Автоматическая проверка соответствия инфраструктуры заявленным требованиям
- Генеративный дизайн: Создание оптимальных архитектур на основе требований к производительности и стоимости
- Естественно-языковой интерфейс: Управление инфраструктурой через естественный язык