Intermitência de CPU
Se um limite de CPU for definido para um contêiner no pod, o uso da CPU do contêiner não poderá exceder o limite. A limitação frequente do tráfego de CPU afeta o desempenho do serviço e aumenta a latência da resposta de cauda longa, especialmente para serviços sensíveis à latência.
A intermitência da CPU é um mecanismo de limitação de tráfego elástico que permite exceder temporariamente o limite da CPU para reduzir o tempo de resposta de cauda longa dos serviços. Quando a cota de CPU para um serviço em cada período de agendamento de CPU permanece, o sistema acumula a cota de CPU. Se o limite de CPU precisar ser excedido em períodos de agendamento subsequentes, a cota de CPU acumulada poderá ser usada.
- Se a intermitência de CPU não estiver ativada, a cota de CPU de um contêiner não poderá exceder o limite e os recursos de intermitência acumulados não poderão ser usados.
Figura 1 Intermitência da CPU não ativada
- Depois que a intermitência de CPU é ativada, a cota de CPU de um contêiner pode exceder o limite para usar os recursos de intermitência acumulados.
Figura 2 Intermitência da CPU ativada
Restrições
- Versão do cluster: cluster do CCE Turbo v1.23.5-r0 ou posterior
- Versão de SO: Huawei Cloud EulerOS 2.0
- O complemento volcano de 1.9.0 ou posterior deve ser instalado no cluster e a função de implementação híbrida deve estar habilitada (isto é, colocation_enable nas configurações avançadas deve ser definido como true).
Procedimento
- Efetue logon no console do CCE e clique no nome do cluster para acessar o console do cluster.
- No painel de navegação à esquerda, escolha Nodes. Clique na guia Node Pools. Ao criar ou atualizar um pool de nós, ative a implementação híbrida de serviços on-line e offline em Advanced Settings.
- volcano.sh/oversubscription=true
- volcano.sh/colocation=true
Figura 3 Configurações de rótulo do nó - No painel de navegação à esquerda, escolha Add-ons. Clique em Install sob volcano. Na área Advanced Settings, defina colocation_enable como true para permitir a implementação híbrida de serviços on-line e off-line. Para obter detalhes sobre a instalação, consulte Volcano scheduler.
Se o complemento vulcão tiver sido instalado, clique em Edit para exibir ou modificar o parâmetro colocation_enable.
Figura 4 Ativar a implementação híbrida de serviços on-line e off-line - Ativar intermitência da CPU.
Depois de confirmar que o complemento volcano está funcionando, execute o seguinte comando para editar o parâmetro configmap de volcano-agent-configuration no namespace de kube-system. Se a opção enable estiver definida como true, a intermitência da CPU será ativada. Se enable for definido como false, a intermitência da CPU será desativada.
kubectl edit configmap -nkube-system volcano-agent-configuration
Exemplo:
cpuBurstConfig: enable: true
Depois que a intermitência da CPU é desativada, essa função ainda é ativada nos pods existentes onde a intermitência da CPU foi ativada. A desativação da intermitência da CPU só tem efeito em novos pods.
- Implemente uma carga de trabalho em um pool de nós onde a implementação híbrida foi ativada. Tome Nginx como exemplo. Defina requests para 2 e limits para 4 e crie um Serviço que possa ser acessado no cluster para a carga de trabalho.
apiVersion: apps/v1 kind: Deployment metadata: name: nginx namespace: default spec: replicas: 1 selector: matchLabels: app: nginx template: metadata: labels: app: nginx annotations: volcano.sh/enable-quota-burst: "true" volcano.sh/quota-burst-time: "200000" spec: containers: - name: container-1 image: nginx:latest resources: limits: cpu: "4" requests: cpu: "2" imagePullSecrets: - name: default-secret --- apiVersion: v1 kind: Service metadata: name: nginx namespace: default labels: app: nginx spec: selector: app: nginx ports: - name: cce-service-0 targetPort: 80 nodePort: 0 port: 80 protocol: TCP type: ClusterIP
Anotação
Obrigatório
Descrição
volcano.sh/enable-quota-burst
Sim
A intermitência da CPU está ativada para a carga de trabalho.
volcano.sh/quota-burst-time
Não
Para garantir a estabilidade do agendamento da CPU e reduzir a contenção quando vários contêineres enfrentam intermitências de CPU ao mesmo tempo, o valor padrão de CPU Burst é o mesmo que o valor de CPU Quota. Ou seja, um contêiner pode usar no máximo duas vezes o valor do CPU Limit. Por padrão, CPU Burst é definido para todos os contêineres de serviço em um pod.
Neste exemplo, o CPU Limit do contêiner é 4, ou seja, o valor padrão é 400,000 (1 núcleo = 100.000), indicando que um máximo de quatro núcleos adicionais podem ser usados após o valor de CPU Limit ser atingido.
- Verificar intermitência da CPU.
Você pode usar a ferramenta wrk para aumentar a carga da carga de trabalho e observar a latência do serviço, a limitação de tráfego e o limite de CPU excedendo quando a Intermitência de CPU é ativada e desativada, respectivamente.
- Execute o seguinte comando para aumentar a carga do pod. <service_ip> indica o endereço IP de serviço associado ao pod.
# Download and install the wrk tool on the node. # The Gzip compression module is enabled in the Apache configuration to simulate the computing logic for the server to process requests. # Run the following command to increase the load. Note that you need to change the IP address of the target application. wrk -H "Accept-Encoding: deflate, gzip" -t 4 -c 28 -d 120 --latency --timeout 2s http://<service_ip>
- Obtenha o ID do pod.
kubectl get pod -n <namespace> <pod_name> -o jsonpath='{.metadata.uid}'
- Você pode executar os seguintes comandos no nó para exibir o status de limitação de tráfego e o limite de CPU excedendo o status. No comando, <pod_id> indica o ID do pod.
cat /sys/fs/cgroup/cpu/kubepods/burstable/pod<pod_id>/cpu.stat
Informação semelhante à seguinte é exibida.nr_periods 0 # Number of scheduling periods nr_throttled 0 # Traffic limiting times throttled_time 0 # Traffic limiting duration (ns) nr_bursts 0 # CPU Limit exceeding times burst_time 0 # Total Limit exceeding duration
Tabela 1 Resumo do resultado neste exemplo Intermitência de CPU
Latência P99
nr_throttled
Tempos de limitação de tráfego
throttled_time
Duração do limite de tráfego
nr_bursts
Limite de tempos excedentes
bursts_time
Limite total que excede a duração
Não ativada
2,96 ms
986
14,3s
0
0
Ativada
456 μs
0
0
469
3,7s
- Execute o seguinte comando para aumentar a carga do pod. <service_ip> indica o endereço IP de serviço associado ao pod.