GH GambleHub

Kubernetes: clusters e Helm charts

Kubernetes: clusters e Helm charts

1) Arquitetura de cluster - visão superior

Controle Plane: 'kube-apiserver', 'etcd', 'kube-scheduler', 'kube-controler-gerente', '(em nuvens controladas, parte está escondida).
Worker: 'kubelet', CRI (containerd/CRI-O), plugin CNI, kube-proxy/ebpf-proxy.
A rede interna é Pod-to-Pod, Service-VIP/ClusterIP, DNS CoreDNS.
Armazenamento: drivers CSI, mantimentos dinâmicos PVC → PV (StorageClass).
Limites de falha: nó/AZ/região. Posicione as réplicas por zona (TopologySpreadConstraints/anti-affinity).

Papéis típicos

Comando de plataforma: cria/upgrade de clusters, CNI/CSI/Ingress, política e GitOps.
Comandos de alimentos: depload de elenco/lançamento, seguindo políticas de segurança e recursos.

2) Ciclo de vida do cluster

Criação: kOps, kubeadm, Rancher, EKS/AKS/GKE. Ative imediatamente a autenticação OIDC e a auditoria.
Upgrades: versão minor por vez (controle de plano → nódulos), maxUnavailable monitorado, testes de stage.
Add-ons (todos via Helm/GitOps): CNI (Calico/Cilium), controlador CSI, Inspress-Server (NGINX/Gateway API/Contour/Traefik), Metrics-Server, Cluster-Autoescaleiro, NE-Local DNS, logs/métricas/trens.
Backaps: etcd snapshot (se self-managed), Velero para namespace/PVC.

3) Redes, serviços e ingress

CNI: Calico (NetworkPolicy), Cilium (eBPF/servicemesh-фичи).
Serviço: «ClusterIP», «NodePort», «LoadBalancer» (L4 balanceamento da nuvem), «ExternalName».
Ingresss/Gateway API: Routagem L7, TLS, anamnese rate-limit/WAF no perímetro.
NetworkPolicy: por omissão deny-all + allow explícito namespace/label.
Headless-service ('clusterIP: None') para StatefulSet e discovery de serviços.

4) Armazéns (CSI) e estados

StorageClass: 'reclaimPolicy', 'volumeBindingMode' ('WaitForFirstConsumer' para melhor colocação).
StatefulSet: nomes/volumes estáveis ('volumeClaimTemplates'), 'podManagementPolicy: Paralel' para rotações rápidas.
ReadWriteMany: Use os arquivos distribuídos (EFS/Filestore) com cuidado - avalie a latência.
Fotos de 'VolumeSnapshotClass' + cron-bacapes.

5) Multiplicidade e política

Namespaces por produtos/ambientes.
RBAC: papéis mínimos, contas de serviço individuais, 'Role '/' RoleBinding' em vez de 'ClusterRole', sempre que possível.
PSA (Pod Security Aceitation): modos 'baseline '/' restricted' (substituição PSP).
ResourceQuota / LimitRange: потолки CPU/Memory/PVC/LoadBalancer.
OPA Gatekeeper/Kyverno: Política de tolerância (por exemplo, proibição de ': latest', exigência de 'resources', 'readOnlyRootFilesystem').
EuronPolicy/webhooks: verificação da assinatura de imagens (cosign/policy-controler).

6) Observabilidade e exploração

Métricas: Prometheus-pilha, kube-state-metrics, node-exportadores.
Logi: Fluent Bit/Vector → objeto/ES/OpenSearch, rotação em nódulos.
Trailers, OpenTelemetry Collector.
SLO-dashboards: modelo RED no ingress e serviços essenciais.
Scale automático: HPA (por métricas do aplicativo), VPA para background, Cluster-Autoscaler para nós.

7) Padrões de manifestos (espartilho)

Deployment (excesso):
yaml apiVersion: apps/v1 kind: Deployment metadata: { name: api, labels: { app: api } }
spec:
replicas: 3 strategy: { type: RollingUpdate, rollingUpdate: { maxUnavailable: 0, maxSurge: 1 } }
selector: { matchLabels: { app: api } }
template:
metadata:
labels: { app: api }
spec:
serviceAccountName: api-sa securityContext: { runAsNonRoot: true, fsGroup: 2000 }
containers:
- name: api image: registry. example. com/api:1. 2. 3 ports: [{ containerPort: 8080 }]
resources: { requests: { cpu: "200m", memory: "256Mi" }, limits: { cpu: "1", memory: "512Mi" } }
readinessProbe: { httpGet: { path: /healthz, port: 8080 }, periodSeconds: 5 }
livenessProbe: { httpGet: { path: /livez,  port: 8080 }, initialDelaySeconds: 20 }
StatefulSet (fatia):
yaml apiVersion: apps/v1 kind: StatefulSet metadata: { name: db }
spec:
serviceName: db replicas: 3 podManagementPolicy: Parallel selector: { matchLabels: { app: db } }
template:
metadata: { labels: { app: db } }
spec:
containers:
- name: db image: postgres:16-alpine volumeMounts: [{ name: data, mountPath: /var/lib/postgresql/data }]
volumeClaimTemplates:
- metadata: { name: data }
spec:
accessModes: ["ReadWriteOnce"]
resources: { requests: { storage: 100Gi } }
storageClassName: fast-ssd
PDB (PodDisruptionBudget):
yaml apiVersion: policy/v1 kind: PodDisruptionBudget metadata: { name: api-pdb }
spec:
minAvailable: 2 selector: { matchLabels: { app: api } }
Ingresss (Nginx, breve):
yaml apiVersion: networking. k8s. io/v1 kind: Ingress metadata:
name: api annotations:
nginx. ingress. kubernetes. io/proxy-read-timeout: "30"
spec:
tls: [{ hosts: ["api. example. com"], secretName: api-tls }]
rules:
- host: api. example. com http:
paths:
- path: /
pathType: Prefix backend: { service: { name: api, port: { number: 80 } } }

8) Helm v3 - base e estrutura

Lista = modelos + valores + metadados.


mychart/
Chart. yaml     # name, version (semver), type (application/library), dependencies values. yaml # default values. schema. json # (recommended) validation values templates/# .yaml. gotmpl (Deployment, Service, Ingress, …)
templates/tests/  # helm tests (smoke)
charts/# local dependencies (or OCI dependencies)
Chart. yaml (exemplo):
yaml apiVersion: v2 name: api description: API service type: application version: 1. 4. 0 # chart version (semver)
appVersion: "1. 2. 3" # dependencies application version:
- name: redis version: 17. x.x repository: "oci://registry. example. com/charts"

9) Modelos Helm - práticas

Use helpers em '_ helpers. tpl 'para nomes/marcas/anotações.
Por todo o lado, indique «resources», «securityContext», «readiness/liveness».
Gere labels com padrão padrão ('app. kubernetes. io/`).
Faça o fici opcional através de 'values' (ingress/hpa/pdb/servicemonitor).
Acenda 'values. schema. json '- parar de configs errados.
Para dados sensíveis - Segredos de operadores externos (External Secret, SOPS), em vez de armazenar em values.

Exemplo de '_ helpers. tpl '(fatia):
gotmpl
{{- define "api. fullname" -}}
{{- printf "%s-%s".Chart. Name. Release. Name      trunc 63      trimSuffix "-" -}}
{{- end -}}
Deployment. tpl (fatia):
gotmpl apiVersion: apps/v1 kind: Deployment metadata:
name: {{ include "api. fullname". }}
labels: {{- include "api. labels". nindent 4 }}
spec:
replicas: {{.Values. replicaCount }}
strategy:
rollingUpdate:
maxSurge: 1 maxUnavailable: 0 selector:
matchLabels: {{- include "api. selectorLabels". nindent 6 }}
template:
metadata:
labels: {{- include "api. selectorLabels". nindent 8 }}
spec:
serviceAccountName: {{ include "api. serviceAccountName". }}
securityContext: {{- toYaml. Values. podSecurityContext      nindent 8 }}
containers:
- name: {{.Chart. Name }}
image: "{{.Values. image. repository }}:{{.Values. image. tag }}"
imagePullPolicy: IfNotPresent ports: [{ containerPort: {{.Values. service. port }} }]
resources: {{- toYaml. Values. resources      nindent 10 }}
envFrom:
- secretRef: { name: {{.Values. secretsRef }} }

10) Dependências, repositórios e OCI

Helm v3 suporta maiúsculas OCI: 'oci ://registry/org/charts'.
Lote as versões das dependências ('^ 1. 2. 0`, `~1. 2 ') e execute' helm dependency build'.
Assine a lista (prov), armazene os artefatos no repositório CI.
Library charts: modelos compartilhados (ingress/servicemonitor) para reutilização.

11) Hooks, CRD e ordem de operações

Hooks: `pre-install`, `post-install`, `pre-upgrade`, `post-upgrade`, `test`. Adicione policies ('before-hook-creation', 'hook-suceeded').
CRD: Coloque em 'crds/' (estabelecidos antes dos templos), evite os updates CRD de volta - faça as migrações separadamente.
Migração BD/inicialização - job-hook com idempotency e temporizadores.

12) Testes de lista e CI

'helm lint' + validação do esquema.
Helm unittest (unit), chart-testing (ct) - montagem/instalação em kind/minikube em CI.
Testes Snapshot de modelos ('helm template' → comparado a uma referência).
Testes Smoke 'helm teste' (levantam 'Pod' com verificações).

13) GitOps (Argo CD/Flux)

A fonte da verdade é um repositório. O elenco é armazenado como HelmRelease/HelmChart (Flux) ou Aplicação (Argo).
Políticas de sinca: auto-sync com prune/self-heal, estatais e health-checks.
Promoção de versões: tag-bots/semver-range, flow PR.
Divida o repo em apps (listas) e eng (overrides/values).
Gestão de segredo: SOPS (age/KMS), Segredos Externos.

14) Segurança: mínimo necessário

PSA restricted: sem privilégios, sem hostPath, com capabilities limitadas, read-only rootfs.
ImagePolicy: apenas imagens assinadas/confiáveis.
«por omissão».
RBAC: conta de serviço per-app, 'Role '/' RoleBinding' em namespace.
Controle de admissão: Gatekeeper/Kyverno regras (resources/limits, labels, no latest).
Segredos: SOPS/Segredos Externos; não coloque segredos em values/plain git.

15) Anti-pattern

': latest' em listas e imagens; falta de 'values. schema. json`.
Uma lista enorme em vez de uma lista modular.
O CRD é atualizado por modelos em 'templates/' → o caos nos upgrades.
Nomes severamente amarrados/porta/namespace em modelos.
Falta de recursos/limites e amostras → à deriva de latência e instabilidade.
Nenhum PDB de downlight zero é possível em drain/upgrades.
Segredos em Git sem criptografia; manifestos sem política-checks.

16) Folha de cheque de implementação (0-45 dias)

0-10 dias

Criar um esqueleto básico com '_ helpers. tpl ', labels, propes, resources, PDB/Ingress opcional.
Включить PSA restricted, NetworkPolicy deny-all, ResourceQuota/LimitRange.
Personalizar GitOps (Argo/Flux), maiúsculas privadas, assinaturas de imagens/listas.

11 a 25 dias

Dividir lista em módulos/dependências, adicionar 'values. schema. json ', testes (' helm lint ', unit, ct).
Ligar observabilidade (ServiceMonitor/PodMonitor), agentes logos, OTEL.
Digite o processo de upgrade: estaging → canary → prod, migração hook com rollback.

26-45 dias

Automatizar atualizações de dependências (bots/semver-ranges + PR).
Adicionar Gatekeeper/Kyverno políticas e repostos policiais a CI.
Documentar runbook upgrade do cluster, procedimentos DR. (Velero/etcd snapshot).

17) Métricas de maturidade

100% das aplicações são depositadas através de Helm/GitOps, sem 'kubectl apply' manualmente.
Todas as listas têm 'values. schema. json ', testes, assinatura e versões de dependências fixadas.
O PSA restricted/NetworkPolicy está incluído em todos os namespace.
PDB e HPA estão presentes em todos os serviços críticos.
Segredos seguros (SOPS/External Secret), política «no latest», assinatura de imagens.
Os upgrades do cluster e do elenco são realizados sem downthame (canary/blue-green), e os testes de restore são regulares.

18) Conclusão

Forte Kubernetes fundações = arquitetura de cluster confiável + política rígida + lista Helm de qualidade industrial gerida por GitOps. Normalize os modelos, proteja o ambiente PSA/NetworkPolicy/RBAC, valorize os valores e automatize os testes, a assinatura e a promoção. Os upgrades e lançamentos tornam-se previsíveis e a plataforma é sustentável e fácil para os comandos de alimentos.

Contact

Entrar em contacto

Contacte-nos para qualquer questão ou necessidade de apoio.Estamos sempre prontos para ajudar!

Telegram
@Gamble_GC
Iniciar integração

O Email é obrigatório. Telegram ou WhatsApp — opcionais.

O seu nome opcional
Email opcional
Assunto opcional
Mensagem opcional
Telegram opcional
@
Se indicar Telegram — responderemos também por lá.
WhatsApp opcional
Formato: +indicativo e número (ex.: +351XXXXXXXXX).

Ao clicar, concorda com o tratamento dos seus dados.