Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
O sandboxing pod no Azure Kubernetes Service (AKS) inclui considerações de gestão de recursos, memória, CPU e segurança.
Gestão de recursos no sandboxing de pods
Reveja estas considerações ao especificar recursos para uma implementação, especialmente para cargas de trabalho grandes ou sensíveis a recursos.
Componentes do kata
Uma implementação do Kata inclui componentes que são executados no nó do AKS e componentes que são executados dentro da máquina virtual (VM) do pod. Esta divisão entre host e guest determina como o uso de memória e CPU é contabilizado.
| Componente | Funciona em | Purpose | Impacto nos recursos |
|---|---|---|---|
| Kata shim | Nó AKS (anfitrião) | Gere o ciclo de vida da VM do pod. | Utiliza recursos do lado do anfitrião contabilizados pela RuntimeClass sobrecarga. |
| Hipervisor da Nuvem | Nó AKS (anfitrião) | Fornece o Virtual Machine Monitor (VMM) que cria e executa a VM pod. | Utiliza recursos do lado do anfitrião contabilizados pela RuntimeClass sobrecarga. |
virtiofsd |
Nó AKS (anfitrião) | Partilha ficheiros entre a máquina virtual do pod e o anfitrião do contentor. | Utiliza recursos do lado do anfitrião contabilizados pela RuntimeClass sobrecarga. |
| Agente Kata | Pod VM (convidado) | Gere os contentores dentro da VM pod. | Utiliza recursos do lado do convidado a partir da memória e da alocação de CPU da VM do pod. |
| kernel da Pod VM | Pod VM (convidado) | Fornece o kernel do sistema operativo convidado. | Utiliza recursos do lado do sistema convidado a partir da memória da VM do pod e da alocação de CPU. |
| Contentores de carga de trabalho | Pod VM (convidado) | Executa a carga de trabalho do utilizador. | Use os recursos restantes do lado dos convidados, sujeito aos limites de recursos do grupo. |
Gestão de memória no sandboxing Pod
Defina o limite de memória da VM do pod suficientemente elevado para suportar a sua carga de trabalho e os componentes convidados do Kata sem alocar memória não utilizada.
Tamanho da memória da VM pod
Cada VM de pod recebe memória para a carga de trabalho e para todos os componentes convidados do Kata. Incluir memória para além do consumo esperado de carga de trabalho para componentes convidados, como o agente Kata e o kernel da VM. Veja os valores de referência de utilização para valores típicos de memória.
O limite de memória do pod Kubernetes determina o tamanho da memória da VM do pod. Mude o limite de memória do pod para alterar o tamanho da memória da VM do pod.
Importante
Se não especificar um limite de memória pod, o AKS aplica o tamanho padrão de memória VM pod de 512Mi. Depois de o pod iniciar, o tamanho da memória da VM do pod é fixo.
RuntimeClass a sobrecarga de memória normalmente aumenta com a dimensão da memória da VM do pod.
RuntimeClass Sobrecarga de memória
As cargas de trabalho de pods em sandbox incluem um Kata RuntimeClass predefinido (kata-vm-isolation) que inclui valores predefinidos de sobrecarga de recursos. Para um controlo mais granular das quotas de recursos, configure um personalizado RuntimeClass com sobrecargas de recursos específicas. O limite de memória pod dimensiona a memória do lado dos convidados disponível para a VM pod.
RuntimeClass overhead reserva capacidade do nó para componentes Kata do lado do host e não precisa de ter em conta o consumo esperado de memória dos componentes convidados.
Podes criar um runtime especializado e especificar a sobrecarga de memória através do overhead campo no teu RuntimeClass manifesto.
Por exemplo, o seguinte manifesto cria um tempo de execução para cargas de trabalho que se espera terão menor consumo de recursos:
apiVersion: node.k8s.io/v1
kind: RuntimeClass
metadata:
name: small-kata-pods
handler: kata
overhead:
podFixed:
memory: "120Mi"
O valor de memory: "120Mi" adiciona 120 Mi de sobrecarga fixa do pod quando o Kubernetes programa o pod e dimensiona o respetivo cgroup. O valor handler: kata deve corresponder ao processador do runtime Kata configurado nos nós do AKS.
Antes de usares um personalizado RuntimeClass, executa kubectl get runtimeclass e verifica se o seu handler é suportado no teu cluster AKS.
Não é obrigatório especificar a sobrecarga, mas é recomendável fazê-lo se pretender um controlo mais preciso sobre os recursos reservados para as suas cargas de trabalho. Se usares o padrão kata-vm-isolationRuntimeClass e não especificares um limite de memória pod, o tamanho da VM pod é de 512Mi. O padrão RuntimeClass adiciona aproximadamente 88Mi de sobrecarga de memória para os componentes do host, o que resulta num limite de pod cgroup de 600Mi.
Cargas de trabalho do utilizador
A sua carga de trabalho do Kata pode usar o tamanho de memória configurado da VM do pod, menos a memória que os componentes da máquina virtual convidada, como o agente Kata e o kernel da máquina virtual convidada, consomem.
Para estimar a memória, estes componentes utilizam:
- Ligue-se à VM do pod (através de
kubectl execoukubectl debugpara abrir um terminal dentro do pod). - Execute o comando
free. - Inspecionar a coluna usada para estimar a memória que o kernel convidado e o agente Kata consomem.
Cgrupos de memória
Quando o Kubernetes agenda um pod Kata, o kubelet atribui o pod a uma memória cgroup. O cgroup aplica as solicitações e os limites de memória ao pod, permitindo definir os recursos disponíveis para o pod.
A memória cgroup tem dois campos importantes:
| Campo Cgroup | Description |
|---|---|
memory.current |
Reporta a memória atual usada pela VM pod, incluindo componentes convidados e componentes Kata host. |
memory.max |
Define o limite superior de memória para o pod cgroup. O kubelet calcula este valor como a soma do limite de memória pod e da sobrecarga de memória RuntimeClass. |
A qualquer momento, se o valor de memory.current exceder o de memory.max, o kernel pode desencadear um OOMKill no pod se for detetada pressão de memória.
Valores de utilização de referência
Use os seguintes valores como exemplos típicos de utilização de memória. Memórias pod VM com menos de 128 MiB não são suportadas.
Como ler esta tabela: memory.current inclui a alocação de memória da VM pod e o uso atual do componente host. O kubelet calcula memory.max a partir do limite de memória do pod mais a sobrecarga de RuntimeClass. A diferença entre estes valores indica a capacidade disponível para uso adicional dos componentes do host.
| Tamanho da memória da VM pod |
RuntimeClass Sobrecarga |
memória.atual | memory.max | Memória livre disponível para os componentes do host |
|---|---|---|---|---|
| 128Mi | 16 MiB | 133Mi | 144Mi | 11Mi |
| 256 Mi | 32Mi | 263Mi | 288 Mi | 25Mi |
| 1 GiB (Gibibyte) | 128Mi | 1034Mi | 1152Mi | 118Mi |
| 2Gi | 256 Mi | 2063Mi | 2304Mi | 241Mi |
| 4Gi | 374Mi | 4122Mi | 4470Mi | 348Mi |
| 8 GiB | 512 Mi | 8232Mi | 8704 MiB | 472 MiB |
| 32Gi | 640Mi | 32918Mi | 33408Mi | 490Mi |
| 64Gi | 768Mi | 65825Mi | 66304 MiB | 479Mi |
| 96Gi | 896Mi | 98738Mi | 99200Mi | 462 MiB |
| 128 GiB | 1 GiB (Gibibyte) | 131646Mi | 132096Mi | 450Mi |
Boas práticas de gestão de memória
- Especifique os tamanhos de memória das VMs de pods ao definir
limits.memorynos seus manifestos e defina quotas de recursos adequadas para todas as implementações.- Utilize um pedido de memória do pod não nulo para reservar capacidade no nó para a VM do pod antes de a VM arrancar. A solicitação deve ter em conta a VM do pod e os contentores que nela são executados.
- Use sobrecarga de memória não nula
RuntimeClasspara contabilizar a capacidade do nó que os componentes do host Kata consomem.
- Para cargas de trabalho intensivas em recursos, defina um limite de memória pod que forneça memória suficiente para a carga de trabalho e componentes convidados.
- Defina uma sobrecarga de memória
RuntimeClasssuficientemente elevada para os componentes do host do Kata, sem reservar uma capacidade do nó substancialmente superior à de que necessitam.
Gestão de CPU no sandboxing Pod
Atribua recursos de CPU às cargas de trabalho do Kata, definindo os limites de CPU do pod e a sobrecarga RuntimeClass. Sem um limite de CPU, os componentes do host Kata podem usar qualquer capacidade de CPU disponível no nó.
Reserva de CPU
Defina um ou ambos os seguintes campos para reservar a capacidade da CPU para as suas cargas de trabalho Kata:
- A
RuntimeClasssobrecarga da CPU - O limite de CPU do pod
Quando pelo menos um dos dois valores é especificado, o plano de controlo reserva o número especificado de CPUs no nó para a sua carga de trabalho. Outros pods no mesmo nó não conseguem aceder a esta capacidade reservada.
Limite de CPU do pod
Declara o limite de CPU do pod no manifesto da tua aplicação. O limite controla quantos CPUs os contentores na VM pod associada podem usar.
Importante
Os limites fracionados de CPU do pod são arredondados para o vCPU inteiro seguinte para a alocação da VM do pod. O CPU do pod cgroup continua a impor o limite fracionário à carga de trabalho. Tenha em conta este arredondamento ao planear os custos e a densidade dos nós.
Se não declarar um limite de CPU do pod, o AKS atribui um vCPU à VM do pod quando o nó tem capacidade suficiente. Os componentes do host Kata não têm limite de consumo de CPU.
RuntimeClass Sobrecarga da CPU
Especifique a sobrecarga RuntimeClass para reservar capacidade no nó para os componentes do host do Kata antes de implementar uma carga de trabalho.
Podes especificar a overhead da CPU através do overhead campo no teu RuntimeClass manifesto.
Por exemplo:
apiVersion: node.k8s.io/v1
kind: RuntimeClass
metadata:
name: custom-kata-runtime
handler: kata
overhead:
podFixed:
cpu: "250m"
O valor de cpu: "250m" acrescenta 0,25 vCPU de sobrecarga fixa do pod quando o Kubernetes programa o pod e dimensiona o respetivo cgroup. Ajuste este valor com base no consumo esperado de CPU dos componentes do host Kata.
Melhores práticas de gestão de CPU
- Se o seu nó normalmente tiver muita capacidade de CPU livre, estas reservas podem ser desnecessárias.
- Se os seus nós normalmente atingem o limite com o consumo de CPU, então uma reserva não nula garante que os seus pods podem ser executados de maneira mais confiável.
- Os pedidos de CPU de um pod ajudam o scheduler do Kubernetes a reservar capacidade suficiente nos nós para uma carga de trabalho. A capacidade reservada para uma carga de trabalho específica não está disponível para outras cargas no nó.
- Especifique pedidos de CPU que a sua infraestrutura possa acomodar. Se a sua capacidade disponível estiver próxima de zero, ou se o seu pedido for demasiado grande, as suas cargas de trabalho podem não começar.
- Alinha os teus pedidos de CPU com os teus limites de CPU. Os pedidos afetam o agendamento do Kubernetes, mas o shim Kata não os usa para dimensionar a VM do pod. O limite de CPU determina a alocação de vCPU da VM pod. Se não for declarado limite de CPU, a VM pod recebe um vCPU, e os componentes do host Kata não têm limite de consumo de CPU.
Exemplos de declarações
RuntimeClass Sobrecarga da CPU |
Solicitação ou limite de CPU do pod | Comportamento esperado |
|---|---|---|
| 1 | 1 | O plano de controlo reserva dois CPUs no nó. A VM pod recebe um vCPU, e os containers dentro do pod podem usar até um vCPU. Os componentes do anfitrião Kata e a VM do pod podem, em conjunto, usar até dois CPUs da capacidade reservada do nó. |
| 1 | 2.5 | O plano de gestão reserva 3,5 CPUs no nó. A VM pod recebe três vCPUs, mas os containers na VM pod podem usar até 2,5 vCPUs. Os componentes do host Kata e a VM do pod, em conjunto, podem utilizar até 3,5 CPUs da capacidade do nó reservada. |
| Nenhum | 1 | O plano de controlo reserva um CPU no nó. A VM pod recebe um vCPU, e os containers na VM pod podem usar até um vCPU. Os componentes do host Kata e a VM pod juntos podem usar até um CPU da capacidade reservada do nó. O pedido de CPU disponibiliza um CPU para a VM do pod. |
| 1 | Nenhum | O plano de controlo reserva um CPU no nó. A VM pod recebe um vCPU, e os containers na VM pod podem usar até um vCPU. Os componentes do host Kata e a VM do pod podem utilizar qualquer capacidade de CPU disponível no nó. A reserva de sobrecarga garante que pelo menos um processador fique disponível. |
Considerações de segurança para o isolamento em sandbox do Pod
O sandboxing pod isola as cargas de trabalho de outras cargas e do anfitrião, mas deve ainda assim considerar os seguintes riscos de segurança.
Pods privilegiados
Algumas cargas de trabalho exigem pods privilegiados. Podes criar pods privilegiados, mas os dispositivos anfitriões não estão ligados aos pods.
Usar containers privilegiados dá acesso root na VM convidada, mas os containers permanecem isolados do host.
Usa pods privilegiados apenas quando necessário, mesmo com sandboxing de pods. Permitir que apenas utilizadores de confiança gerenciem pods privilegiados.
Volumes de armazenamento do caminho do host
Montar volumes hostPath em pods Kata expõe diretamente ao contentor parte do sistema de ficheiros do anfitrião e pode enfraquecer o isolamento do pod em sandbox. Aplique as diretrizes de segurança upstream hostPath às cargas de trabalho em sandbox do Pod.
Os ficheiros abaixo /dev são uma exceção porque são montados no contentor a partir do sistema convidado em vez do sistema anfitrião. Este comportamento mantém o isolamento dos pods quando uma carga de trabalho requer este caminho.
Advertência
Evite volumes de armazenamento hostPath , a não ser que a sua carga de trabalho os exija.
Bloquear volumes hostPath com a Azure Policy
O Azure Policy proporciona imposição centralizada e consistente e salvaguardas para os componentes do seu cluster.
O AKS fornece definições de políticas incorporadas que aplicam as melhores práticas. Atribua a política os pods do cluster do Kubernetes só devem utilizar tipos de volume permitidos com o efeito Deny e exclua hostPath dos tipos de volume permitidos para bloquear pods que tentem montar volumes hostPath.
Próximos passos
Aprenda a implementar sandboxing Pod no AKS.