Use o ack-koordinator para configurar rapidamente um ambiente de colocalização e executar workloads nesse modo. Este tópico explica como ativar políticas de colocalização e implantar workloads LS e BE no mesmo nó.
Pré-requisitos
Verifique se você tem:
O ack-koordinator versão 0.8.0 ou posterior instalado (anteriormente ack-slo-manager)
(Recomendado) Instâncias bare metal do ECS executando Alibaba Cloud Linux
Conceitos principais
O ack-koordinator usa prioridade de recursos e classe de QoS para controlar como workloads online e offline compartilham um nó.
Prioridades de recursos
A prioridade de recursos define quanto da capacidade do nó um workload pode usar.
|
Prioridade |
Cálculo de recursos |
Nome do recurso |
|
Product |
Equivale aos recursos físicos do nó |
CPU e memória reportadas pelo nó |
|
Batch |
Calculado dinamicamente: recursos físicos totais − recursos Product em uso. Consulte Sobrecarga dinâmica de recursos. |
|
Recursos Product alocados, mas não utilizados, são automaticamente rebaixados para Batch para recuperação.
Classes de QoS
A classe de QoS determina a prioridade de agendamento e o isolamento quando os recursos estão restritos.
|
Classe de QoS |
Workloads típicos |
Comportamento |
|
LS (Latency Sensitive) |
Serviços web, microsserviços, computação de fluxo sensível a latência |
Prioridade no agendamento de CPU, cache L3 e largura de banda de memória; a memória é recuperada primeiro dos workloads BE |
|
BE (Best Effort) |
Jobs Spark em lote, jobs MapReduce, treinamento de IA, transcodificação de vídeo |
Prioridade de CPU inferior à dos workloads LS; cache L3 e largura de banda de memória limitados; a memória é recuperada antes dos workloads LS |
Funcionamento da recuperação de recursos
Node capacity
├── Product limit ← Resources requested by LS pods
│ └── Actual usage ← Varies over time (often well below limit)
│ └── Reclaimable = limit − usage ← Available for BE pods
└── BE pods run on reclaimable resources
Os workloads BE consomem recursos que estariam ociosos, sem afetar o desempenho dos serviços online.
Combinações válidas
Embora a prioridade de recursos e a classe de QoS sejam independentes, apenas duas combinações são usadas na prática:
Product + LS: Aplicações online sensíveis a latência (aplicações web, computação de fluxo)
Batch + BE: Aplicações offline de menor prioridade (jobs Spark, jobs MapReduce, treinamento de IA)
Ative as políticas de colocalização
O ack-koordinator lê as políticas de colocalização do ConfigMap ack-slo-config no namespace kube-system.
-
Crie o arquivo
configmap.yamlcom o seguinte conteúdo:# Example of the ack-slo-config ConfigMap. apiVersion: v1 kind: ConfigMap metadata: name: ack-slo-config namespace: kube-system data: colocation-config: |- { "enable": true } resource-qos-config: |- { "clusterStrategy": { "lsClass": { "cpuQOS": { "enable": true }, "memoryQOS": { "enable": true }, "resctrlQOS": { "enable": true } }, "beClass": { "cpuQOS": { "enable": true }, "memoryQOS": { "enable": true }, "resctrlQOS": { "enable": true } } } } resource-threshold-config: |- { "clusterStrategy": { "enable": true } }Este ConfigMap inclui três políticas:
Chave da política
Função
colocation-configAtiva o monitoramento de carga do nó em tempo real e identifica recursos passíveis de sobrecarga. Consulte Sobrecarga dinâmica de recursos.
resource-qos-configHabilita o gerenciamento granular de recursos para workloads LS e BE, incluindo CPU QoS, Memory QoS e Isolamento de cache L3 e MBA.
resource-threshold-configLimita dinamicamente os recursos BE com base nas marcas d'água de utilização do nó. Consulte Limite elástico de recursos.
-
Aplique o ConfigMap:
kubectl apply -f configmap.yaml
Implante os workloads
Implante um workload LS (online) e um BE (offline) no mesmo nó usando o rótulo de pod koordinator.sh/qosClass.
Implante o workload LS (NGINX)
-
Crie o arquivo
nginx-ls-pod.yaml. O rótulokoordinator.sh/qosClass: LSclassifica este pod como sensível a latência:--- # Nginx application configuration apiVersion: v1 data: config: |- user nginx; worker_processes 80; # The number of Nginx worker processes, which affects concurrency. events { worker_connections 1024; # Default value is 1024. } http { server { listen 8000; gzip off; gzip_min_length 32; gzip_http_version 1.0; gzip_comp_level 3; gzip_types *; } } #daemon off; kind: ConfigMap metadata: name: nginx-conf --- # Manifest for the nginx-ls-pod. apiVersion: v1 kind: Pod metadata: labels: koordinator.sh/qosClass: LS app: nginx name: nginx spec: containers: - image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6 imagePullPolicy: IfNotPresent name: nginx ports: - containerPort: 8000 hostPort: 8000 # The host port that will receive requests for load testing. protocol: TCP resources: limits: cpu: '8' memory: 1Gi requests: cpu: '8' memory: 1Gi volumeMounts: - mountPath: /apps/nginx/conf name: config hostNetwork: true restartPolicy: Never volumes: - configMap: items: - key: config path: nginx.conf name: nginx-conf name: config -
Aplique o manifesto:
kubectl apply -f nginx-ls-pod.yaml
Implante o workload BE (FFmpeg)
-
Crie o arquivo
ffmpeg-be-pod.yaml. O rótulokoordinator.sh/qosClass: BEclassifica este pod como best-effort. Os limites de recursos usamkubernetes.io/batch-cpuekubernetes.io/batch-memoryem vez de CPU e memória padrão:apiVersion: v1 kind: Pod metadata: labels: koordinator.sh/qosClass: BE name: be-ffmpeg spec: containers: - command: - start-ffmpeg.sh - '30' - '2' - /apps/ffmpeg/input/HD2-h264.ts - /apps/ffmpeg/ image: 'registry.cn-zhangjiakou.aliyuncs.com/acs/ffmpeg-4-4-1-for-slo-test:v0.1' imagePullPolicy: Always name: ffmpeg resources: limits: # Unit: millicores. kubernetes.io/batch-cpu: "70k" kubernetes.io/batch-memory: "22Gi" requests: # Unit: millicores. kubernetes.io/batch-cpu: "70k" kubernetes.io/batch-memory: "22Gi" -
Aplique o manifesto:
kubectl apply -f ffmpeg-be-pod.yaml
Próximas etapas
Depois que ambos os pods estiverem em execução, explore os recursos de colocalização do ACK:
Veja na prática
Colocalize serviços online e aplicações de transcodificação de vídeo — um exemplo de ponta a ponta usando esta configuração
Gerenciamento de recursos
Controle de CPU