Pular para o conteúdo principal

Questão de Sistemas Operacionais — Contêineres (Docker, Kubernetes, etc.) — VUNESP 2023

Sistemas OperacionaisContêineres (Docker, Kubernetes, etc.)
Código
vu197351
Banca
VUNESP
Órgão
TJ RS
Ano
2023
Cargo
ATI ( )

Um arquivo YAML de configuração de um serviço Kubernetes possui o seguinte conteúdo:

 

apiVersion: v1
kind: Service
metadata:
  name: my-service
spec:
  selector:
    app.kubernetes.io/name: MyApp
  ports:
    - protocol: TCP
      port: 80
      targetPort: 9376

 

Os pods que devem ser incluídos no serviço são

  1. Aaqueles que escutam (listen) em alguma porta do protocolo TCP, em qualquer porta.
  2. Baqueles que escutam (listen) na porta 80 do protocolo TCP.
  3. Caqueles que possuem a label spec.
  4. Daqueles que possuem a label my-service.
  5. Eaqueles que possuem a label app.kubernetes.io/ name: MyApp.
Revelar gabarito e comentário

GabaritoE — aqueles que possuem a label app.kubernetes.io/ name: MyApp.

Comentário gerado por IA. É um apoio ao estudo, ancorado em fontes, mas pode conter imprecisões — confira sempre na fonte oficial (lei, súmula, edital e gabarito da banca). Encontrou um erro? Use “Reportar”.

Kubernetes: Seleção de Pods por Service (Label Selector)

Gabarito: letra E. O Service do Kubernetes seleciona os Pods que possuem a label app.kubernetes.io/name: MyApp, conforme o campo selector do manifesto YAML. O selector define o critério de associação entre o Service e os Pods, e é exatamente essa label que o Pod deve ter para ser incluído no serviço.

O Kubernetes é um orquestrador de contêineres que gerencia a implantação, o escalonamento e a operação de aplicações. No centro desse gerenciamento está o conceito de label (etiqueta): pares chave-valor que identificam e agrupam recursos, como Pods. O Service é um objeto que expõe um conjunto de Pods como um serviço de rede, e a forma de escolher quais Pods ele vai encaminhar tráfego é justamente o selector (seletor), que filtra os Pods por labels.

No manifesto fornecido, o campo selector contém app.kubernetes.io/name: MyApp. Isso significa que o Service vai incluir todos os Pods que possuam essa label com esse valor exato. A porta 80 e a targetPort: 9376 definem o mapeamento de portas (a porta do Service e a porta do contêiner), mas não são critérios de seleção. O protocolo TCP também não é critério de seleção — ele apenas especifica o protocolo de rede usado pelo Service.

A pegadinha da questão está em confundir os campos do manifesto: o selector é o que decide quais Pods entram no serviço, enquanto port, targetPort e protocol são configurações de rede. O candidato que não domina a estrutura do YAML pode achar que a porta 80 ou o protocolo TCP são critérios de seleção, mas não são. A seleção é exclusivamente por labels.

Na prática, para que um Pod seja incluído no Service, ele deve ter, em seu próprio manifesto, a label app.kubernetes.io/name: MyApp. Por exemplo, um Pod com labels: app.kubernetes.io/name: MyApp será selecionado; um Pod sem essa label, ou com valor diferente, ficará de fora, mesmo que escute na porta 9376.

Guarde a distinção: selector = critério de seleção por labels; portas e protocolo = configuração de rede do Service. É nessa fronteira que as alternativas se dividem.

Service Kubernetes
  • 1selector
    • label app.kubernetes.io/name: MyApp
    • define quais Pods entram
  • 2portas e protocolo
    • port: 80
    • targetPort: 9376
    • protocol: TCP
    • não são critérios de seleção
LEVEL · soulevel.com.br

Alternativa A — ❌ Incorreta

Afirma que qualquer Pod que escute em qualquer porta TCP seria incluído. Isso ignora completamente o selector. O Service só seleciona Pods que tenham a label app.kubernetes.io/name: MyApp, independentemente da porta em que escutam. A porta é uma configuração de rede, não um critério de seleção.

Alternativa B — ❌ Incorreta

Afirma que os Pods que escutam na porta 80 seriam incluídos. A porta 80 é a port do Service (a porta pela qual o serviço é acessado), não um critério de seleção. O targetPort: 9376 é a porta do contêiner, mas também não é usado no selector. A seleção é por label, não por porta.

Alternativa C — ❌ Incorreta

Afirma que os Pods com a label spec seriam incluídos. spec é uma seção do manifesto YAML (a especificação do recurso), não uma label. Não existe label spec no contexto; o selector aponta para app.kubernetes.io/name: MyApp. Confunde a estrutura do YAML com labels de Pod.

Alternativa D — ❌ Incorreta

Afirma que os Pods com a label my-service seriam incluídos. my-service é o name do Service (no campo metadata), não uma label de seleção. O selector não referencia o nome do Service; ele referencia a label app.kubernetes.io/name: MyApp. Troca o nome do recurso pela label de seleção.

Alternativa E — ✅ Correta ⟵ GABARITO

O selector do Service é app.kubernetes.io/name: MyApp. Portanto, os Pods que possuem essa label com esse valor são exatamente os que serão incluídos no serviço. É o mecanismo padrão do Kubernetes: o Service usa o selector para encontrar os Pods que devem receber tráfego.

NÃO CAIA NESSA!

A banca explora a confusão entre os campos do manifesto. O candidato pode achar que a porta 80 ou o protocolo TCP são critérios de seleção, mas o selector é o único campo que define quais Pods entram no serviço. Lembre-se: selector = labels; portas = rede.

Gabarito: letra E

Link permanente: /questoes/vu197351