Pular para o conteúdo
Início » Algumas Configurações que Você Precisa Saber em K8s

Algumas Configurações que Você Precisa Saber em K8s

À medida que o Kubernetes continua sendo a pedra angular da orquestração de contêineres, dominar suas configurações e recursos torna-se imperativo para profissionais de DevOps. Em 2024, determinadas configurações do Kubernetes destacam-se por sua capacidade de aprimorar a automação, segurança e desempenho em ambientes nativos da nuvem. Este artigo explora Algumas configurações essenciais do Kubernetes, oferecendo uma análise aprofundada de cada uma, completa com casos de uso, benefícios e exemplos de código. Vou acresccentar um “Porque Usar”, “Quem Deve Usar” e “Quando usar” para complementar o artigo.

1. Solicitações e Limites de Recursos

Entender e configurar corretamente as solicitações e limites de recursos é fundamental no Kubernetes. Isso garante que suas aplicações tenham os recursos necessários para funcionar otimamente, evitando que uma única aplicação monopolize os recursos do cluster.

apiVersion: v1
kind: Pod
metadata:
  name: sample-app
spec:
  containers:
  - name: app-container
    image: nginx
    resources:
      requests:
        memory: "64Mi"
        cpu: "250m"
      limits:
        memory: "128Mi"
        cpu: "500m"

Por que: Esta configuração é crucial para manter a estabilidade e desempenho tanto das aplicações individuais quanto do cluster como um todo. Ela previne a contenda de recursos e garante que as aplicações não sejam terminadas inesperadamente devido a escassez de recursos.

Quem: Essencial para administradores e desenvolvedores do Kubernetes que visam otimizar o desempenho das aplicações e a utilização de recursos do cluster.

Quando Usar: Aplique esta configuração para cada carga de trabalho para garantir o desempenho previsível da aplicação e prevenir que uma única aplicação consuma recursos desproporcionais que poderiam impactar a estabilidade do cluster.

2. Probes de Vivacidade e Prontidão

As probes de vivacidade (liveness) e prontidão (readiness) são críticas para gerenciar o ciclo de vida de suas aplicações dentro do Kubernetes. Elas ajudam o Kubernetes a tomar decisões inteligentes sobre quando reiniciar um contêiner (vivacidade) e quando um contêiner está pronto para começar a aceitar tráfego (prontidão).

livenessProbe:
  httpGet:
    path: /healthz
    port: 8080
  initialDelaySeconds: 3
  periodSeconds: 3
readinessProbe:
  httpGet:
    path: /ready
    port: 8080
  initialDelaySeconds: 5
  periodSeconds: 5

Por que: Elas aumentam a resiliência e disponibilidade de suas aplicações, garantindo que o Kubernetes possa gerenciar automaticamente o estado dos contêineres com base na saúde real da aplicação, em vez de apenas no estado de execução do contêiner.

Quem: Desenvolvedores e operadores que implantam serviços críticos que requerem alta disponibilidade e auto-recuperação.

Quando Usar: Implemente probes de vivacidade para aplicações onde o tempo de atividade é crítico e probes de prontidão para aplicações que só devem receber tráfego quando estiverem totalmente inicializadas e prontas para atender solicitações.

3. ConfigMaps e Secrets

ConfigMaps e Secrets são indispensáveis para externalizar configurações e dados sensíveis do código da aplicação. ConfigMaps permitem armazenar dados não confidenciais em pares chave-valor, enquanto Secrets são destinados a informações sensíveis.

apiVersion: v1
kind: ConfigMap
metadata:
  name: app-config
data:
  config.json: |
    {
        "database": "sql",
        "timeout": "30s",
        "featureFlag": "true"
    }
---
apiVersion: v1
kind: Secret
metadata:
  name: app-secret
type: Opaque
data:
  password: cGFzc3dvcmQ=

Por que: Essas configurações desacoplam a configuração e os segredos da lógica da aplicação, simplificando a implantação e gerenciamento da aplicação em diferentes ambientes enquanto aumentam a segurança.

Quem: Vital para qualquer usuário do Kubernetes que gerencia aplicações que requerem dados de configuração ou precisam lidar de forma segura com credenciais e outras informações sensíveis.

Quando Usar: Use ConfigMaps para configuração de aplicação que precisam ser facilmente alteradas sem reconstruir a imagem do contêiner. Secrets são essenciais quando se lida com dados sensíveis como tokens, chaves API e senhas.

4. Políticas de Reinício

As políticas de reinício controlam o comportamento do Kubernetes em relação aos contêineres que falham. Definindo uma política de reinício, você pode especificar se e como os contêineres devem ser reiniciados após falhas.

spec:
  restartPolicy: Always

Por que: A política de reinício adequada pode ser crucial para garantir a resiliência e a disponibilidade contínua de suas aplicações.

Quem: Importante para administradores do Kubernetes e desenvolvedores que buscam otimizar a disponibilidade e a resiliência das suas aplicações.

Quando Usar: Selecione a política de reinício baseada na natureza da sua aplicação. Por exemplo, Always para serviços essenciais que devem estar sempre disponíveis, OnFailure para tarefas que devem ser reexecutadas em caso de falha, e Never para depuração ou tarefas que não devem ser automaticamente reiniciadas.

5. Volumes Persistentes e Claims de Volumes Persistentes

A gestão de dados é um aspecto crítico em qualquer sistema, e no Kubernetes, Volumes Persistentes (PVs) e Claims de Volumes Persistentes (PVCs) fornecem um método para gerenciar o armazenamento de dados de longa duração.

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: mypvc
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 10Gi

Por que: PVs e PVCs permitem que você gerencie o armazenamento de dados de forma flexível, eficiente e independente do ciclo de vida dos contêineres individuais, garantindo que os dados persistam além da vida útil dos contêineres.

Quem: Desenvolvedores e operadores que precisam de armazenamento persistente para suas aplicações, especialmente para bases de dados, armazenamento de arquivos, e outras aplicações orientadas a dados.

Quando Usar: Sempre que sua aplicação requer armazenamento de dados que deve persistir além do ciclo de vida dos contêineres, como dados de usuários, bancos de dados, ou arquivos de configuração que precisam ser mantidos entre reinícios de contêiner.

6. Autenticação e Autorização

No Kubernetes, a segurança é primordial, e as configurações de autenticação e autorização são essenciais para proteger seus recursos. Role-Based Access Control (RBAC) é um método comum para gerenciar o acesso aos recursos do Kubernetes, permitindo que você controle quem pode acessar o quê dentro de seu cluster.

apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  namespace: default
  name: pod-reader
rules:
- apiGroups: [""]
  resources: ["pods"]
  verbs: ["get", "watch", "list"]

Por que: Implementar controles de acesso robustos é crucial para a segurança do cluster, garantindo que apenas usuários e serviços autorizados possam realizar ações específicas.

Quem: Administradores de cluster e desenvolvedores que precisam implementar políticas de segurança para proteger os recursos e dados dentro do cluster.

Quando Usar: Utilize RBAC e outras técnicas de autenticação e autorização para proteger seu cluster desde o início, aplicando o princípio do menor privilégio para minimizar a superfície de ataque.

7. Redes e Políticas de Rede

A configuração de rede é outra área crítica no Kubernetes, envolvendo a comunicação entre contêineres, pods e serviços externos. Políticas de rede permitem definir como os pods se comunicam entre si e com o mundo externo, melhorando a segurança e o desempenho da rede.

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: default-deny
spec:
  podSelector: {}
  policyTypes:
  - Ingress
  - Egress

Por que: Uma rede configurada corretamente e políticas de rede robustas são fundamentais para garantir a segurança e eficiência da comunicação dentro do seu cluster Kubernetes.

Quem: Operadores de rede e administradores de sistemas responsáveis pela configuração e segurança da rede em ambientes Kubernetes.

Quando Usar: Implemente políticas de rede para controlar o acesso entre os pods e entre os pods e outros recursos de rede para reforçar a segurança e otimizar o tráfego de rede.

8. Implantações e Rollbacks

No Kubernetes, as implantações gerenciam o processo de lançamento e atualização das suas aplicações de forma declarativa. Isso inclui a capacidade de realizar rollbacks para uma versão anterior se algo der errado.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  selector:
    matchLabels:
      app: nginx
  replicas: 3
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.14.2
        ports:
        - containerPort: 80

Por que: A capacidade de realizar implantações e rollbacks de forma eficiente e segura é crucial para manter a estabilidade e disponibilidade de suas aplicações.

Quem: Desenvolvedores e operadores envolvidos na implantação e gerenciamento do ciclo de vida das aplicações no Kubernetes.

Quando Usar: Utilize implantações para gerenciar a liberação de novas versões das suas aplicações e rollbacks para reverter para uma versão anterior em caso de falhas ou problemas de desempenho.

9. Autoescalamento

O autoescalamento no Kubernetes permite que você ajuste automaticamente o número de pods em uma implantação com base em critérios específicos, como uso de CPU ou outras métricas personalizadas.

apiVersion: autoscaling/v1
kind: HorizontalPodAutoscaler
metadata:
  name: nginx-autoscaler
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: nginx-deployment
  minReplicas: 1
  maxReplicas: 10
  targetCPUUtilizationPercentage: 80

Por que: O autoescalamento garante que suas aplicações

mantenham um desempenho ótimo e eficiente em termos de custo, ajustando-se dinamicamente às variações na demanda.

Quem: Operadores de infraestrutura e desenvolvedores interessados em otimizar o desempenho e os custos operacionais das suas aplicações.

Quando Usar: Implemente o autoescalamento para suas aplicações que experimentam variações na carga de trabalho, garantindo que tenham recursos suficientes durante picos de demanda e reduzindo recursos durante períodos de baixa demanda.

10. Monitoramento e Log

O monitoramento e a geração de logs são fundamentais para manter a saúde e o desempenho das suas aplicações Kubernetes. Ferramentas como Prometheus para monitoramento e Fluentd para logs podem ser integradas ao seu cluster para coletar métricas e logs importantes.

Por que: Ter visibilidade sobre o desempenho e o estado da sua infraestrutura e aplicações é crucial para a detecção precoce de problemas e a tomada de decisões informadas.

Quem: Desenvolvedores e operadores que precisam de insights sobre o desempenho e a saúde das suas aplicações e infraestrutura.

Quando Usar: Implemente soluções de monitoramento e log desde o início do desenvolvimento do seu projeto para garantir que você possa rastrear e resolver problemas rapidamente, mantendo a alta disponibilidade e desempenho das suas aplicações.

Estas são apenas algumas das configurações essenciais do Kubernetes que podem ser usadas para otimizar a eficiência, segurança e resiliência das suas aplicações em contêiner. Compreender e aplicar corretamente essas configurações pode ajudar a garantir o sucesso das suas implantações no Kubernetes.

Confiram também a documentação oficial: https://kubernetes.io/docs/tasks/