civil-and-structural-engineering
Usando o Docker com Openshift para Orquestração de Containers Corporativos
Table of Contents
A Containerização reformou fundamentalmente a forma como as empresas constroem, enviam e executam aplicações. A Docker estabeleceu o padrão para o software de embalagem em recipientes leves e portáteis, enquanto a OpenShift, a plataforma Kubernetes da empresa Red Hat, fornece a orquestração, segurança e ferramentas de desenvolvimento necessárias para executar esses recipientes em escala. Juntas, a Docker e a OpenShift formam uma base robusta para a orquestração de containers empresariais, permitindo que as equipes automatizem a implantação, gerenciem ambientes híbridos e acelerem a entrega de software. Este artigo fornece um guia completo para usar a Docker com o OpenShift, cobrindo a integração, etapas de implantação, benefícios e melhores práticas para ambientes de produção.
Compreender o Docker e Containerização
O Docker é mais do que uma ferramenta – é uma plataforma para desenvolvimento, transporte e execução de aplicativos dentro de contêineres. Os containers agrupam uma aplicação com suas dependências (bibliotecas, arquivos de configuração, binários) em uma única unidade padronizada. Isso garante que a aplicação se comporta de forma consistente em ambientes de desenvolvimento, encenação e produção, eliminando o problema clássico de "ele funciona na minha máquina".
No núcleo do Docker está o Docker Engine, um tempo de execução que gerencia os recipientes em um sistema operacional host. O Docker usa uma arquitetura cliente- servidor onde o cliente Docker se comunica com o servidor Docker para compilar, executar e gerenciar os recipientes. As imagens, definidas por Dockerfiles, servem como modelos somente de leitura que são criados em camadas para eficiência. Quando um recipiente é iniciado, uma camada com escrita é adicionada em cima da imagem. Este layering permite a implantação rápida, o controle de versão e as rollbacks fáceis.
Para as empresas, a Docker oferece várias capacidades críticas:
- Isolação: Cada recipiente é executado em seu próprio espaço de usuário isolado, melhorando a segurança e o controle de recursos.
- Portabilidade: Os containers são executados em qualquer sistema operacional que suporte o Docker, incluindo Linux, Windows e macOS, e em qualquer ambiente (no local, nuvem, híbrido).
- Eficiência: Os containers compartilham o kernel do sistema operacional host, resultando em sobrecarga significativamente menor em comparação com máquinas virtuais.
- Iteração rápida: Os desenvolvedores podem construir, testar e implantar aplicativos containerizados rapidamente, suportando fluxos de trabalho de integração contínua e entrega contínua (CI/CD).
Só o Docker, no entanto, não é suficiente para gerenciar centenas ou milhares de contêineres em um conjunto de máquinas. É aí que a orquestração entra, e o OpenShift oferece uma solução de nível empresarial construída em Kubernetes.
OpenShift: Enterprise Kubernetes Platform
OpenShift é a distribuição de Kubernetes por Red Hat, aprimorada com recursos adicionais que atendem às necessidades de operações de TI, desenvolvedores e equipes de segurança. Enquanto Kubernetes fornece a camada de orquestração fundamental – agendamento de containers, dimensionamento de implementações, gerenciamento de rede e armazenamento – OpenShift envolve-o com ferramentas amigáveis ao desenvolvedor, console web, recursos de CI/CD embutidos e padrões de segurança endurecidos.
Os componentes principais do OpenShift incluem:
- Fonte-para-Imagem (S2I): Uma ferramenta que constrói automaticamente imagens de containers a partir de código fonte sem exigir um Dockerfile, embora suporte totalmente Dockerfiles personalizados também.
- Registro integrado: O OpenShift inclui um registro interno de imagem de container para armazenar e gerenciar imagens, reduzindo a dependência em registros externos.
- Routing e networking:] O OpenShift gerencia o tráfego de entrada com um roteador HAProxy integrado e fornece DNS e descoberta de serviço internos.
- Restrições de contexto de segurança (SCCs): Estes substituem as Políticas de Segurança do Pod Kubernetes, oferecendo controle granular sobre o que os containers podem fazer (por exemplo, executar como root, acessar recursos host).
- Console do desenvolvedor: Uma interface web que simplifica a implantação, monitoramento e gerenciamento de aplicativos.
- OperadorHub:] Um catálogo de operadores para automatizar o gerenciamento complexo do ciclo de vida de aplicações.
O OpenShift é projetado para empresas que exigem multi-proteção, conformidade e alta disponibilidade. Ele se integra com LDAP, Active Directory e outros provedores de identidade. Ele também fornece monitoramento e registro integrados através de Prometheus, Grafana e Elasticsearch/Fluentd/Kibana pilhas.
Integrando o Docker com o OpenShift
Usar o Docker com o OpenShift é simples porque o OpenShift é construído sobre o Kubernetes e compreende nativamente as imagens dos contentores. A integração acontece em vários níveis: a construção de imagens, o armazenamento de imagens e a implantação de cargas de trabalho.
Construindo Imagens
Os desenvolvedores têm duas maneiras primárias de criar imagens de container para o OpenShift:
- O arquivo de Docker compila: Escreva um arquivo de Docker, então use o sistema de compilação OpenShift ou o CLI de Docker para construir uma imagem.O OpenShift pode executar o Docker compila dentro do cluster usando uma configuração de compilação que referencia um arquivo Docker. Este método dá controle total sobre as camadas de imagem.
- Fonte-para-Imagem (S2I): S2I é uma estrutura que pega o código-fonte da aplicação e o injeta numa imagem base que contém o tempo de execução. Por exemplo, uma aplicação Node.js pode ser construída apontando o OpenShift para um repositório Git; o OpenShift irá puxar a imagem apropriada do construtor S2I, compilar o código e criar automaticamente uma imagem do recipiente. Não é necessário um Dockerfile, embora o resultado final seja uma imagem Docker padrão.
Ambas as abordagens produzem imagens armazenadas em um registro interno ou externo de containers. O registro embutido do OpenShift é baseado no protocolo Docker Registry v2, portanto é totalmente compatível com os clientes do Docker.
Armazenar imagens
Após a construção, as imagens são empurradas para um registro acessível pelo cluster OpenShift. O registro interno é a opção mais simples para implantações bem integradas. Alternativamente, as equipes podem usar registros externos, como Docker Hub, Quay.io, Amazon ECR, ou Google Container Registry. O OpenShift pode extrair imagens de qualquer registro que suporte o protocolo de imagem padrão do container. Para ambientes sensíveis, o registro interno pode ser configurado com armazenamento persistente, TLS e autenticação.
Ativar as Cargas de Trabalho
Uma vez que uma imagem esteja disponível, implantá- la no OpenShift é uma questão de criar um recurso Kubernetes, como um processo de implantação, implantaçãoConfig (específico do OpenShift) ou Pod. O console Web do OpenShift ou CLI () simplifica este processo. Os desenvolvedores podem usar o assistente "Imagem deplojada" para selecionar uma imagem do registro, especificar variáveis de ambiente, limites de recursos e expor a aplicação através de uma rota.
Passo a passo: Implantando um recipiente de docker no OpenShift
Vamos percorrer um ciclo de implantação completo, desde a escrita de um arquivo Docker até expor a aplicação externamente.
Passo 1: Criar uma Imagem de Docker
Escreva um ficheiro Docker para a sua aplicação. Exemplo para uma aplicação Web simples em Python:
FROM python:3.9-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY app.py .
EXPOSE 8080
CMD ["python", "app.py"]
Compilar a imagem localmente usando
Passo 2: Empurre para um registro
Etiquete e empurre a imagem para o registro interno do OpenShift. Primeiro, faça login no registro do seu cliente Docker:
docker login -u $(oc whoami) -p $(oc whoami -t) default-route-openshift-image-registry.<cluster-domain>
Em seguida, marque e empurre:
docker tag my-python-app:1.0 default-route-openshift-image-registry.<cluster-domain>/<project-name>/my-python-app:1.0
docker push default-route-openshift-image-registry.<cluster-domain>/<project-name>/my-python-app:1.0
Passo 3: Implantar no OpenShift
Usando o CLI:
oc new-app my-python-app:1.0 --name=my-app --as-deployment-config
Ou crie uma implantação manualmente via YAML:
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-app
spec:
replicas: 3
selector:
matchLabels:
app: my-app
template:
metadata:
labels:
app: my-app
spec:
containers:
- image: default-route-openshift-image-registry.<cluster-domain>/<project>/my-python-app:1.0
name: my-app
ports:
- containerPort: 8080
Aplicar com .
Passo 4: Expor a Aplicação
Crie um Serviço e uma Rota para tornar o aplicativo acessível externamente:
oc expose deployment my-app --port=8080
oc expose service my-app
A rota fornece uma URL pública. O roteador do OpenShift lida com o término do TLS e balanceamento de carga.
Passo 5: Gerenciar o Escalonamento
Escalar o número de réplicas dinamicamente:
oc scale deployment my-app --replicas=5
Ou configure a escala automática usando o HorizontalPodAutoscaler.
Benefícios de usar o Docker com o OpenShift
Portabilidade e Coerência
As imagens de acoplagem são artefatos imutáveis que encapsulam o ambiente de execução. Quando implantados no OpenShift, essas imagens executam de forma idêntica, seja no laptop de um desenvolvedor, um cluster de testes ou um centro de dados de produção. Esta consistência elimina o desvio do ambiente e simplifica a solução de problemas.
Gestão Automática do Ciclo de Vida
O OpenShift automatiza muitas tarefas operacionais que são onerosas com o Docker bruto. As atualizações de rolamento, as implementações de canários, as verificações de saúde e a auto-cura são incorporadas. Por exemplo, se um container quebra, o OpenShift reinicia- o automaticamente. Se um nó falhar, o agendador redistribui os recipientes para nós saudáveis.
Segurança empresarial
A segurança é primordial em ambientes corporativos. O OpenShift obriga que os recipientes sejam executados sob restrições de contexto de segurança restritas por padrão. Isto significa que os recipientes não podem ser executados como root, usar espaços de nomes de host ou montar diretórios de host sensíveis, a menos que explicitamente permitidos. O OpenShift também se integra com ferramentas de digitalização de vulnerabilidade para verificar imagens para CVEs conhecidos antes da implantação. O controle de acesso baseado em funções (RBAC) garante que desenvolvedores, operadores e auditores tenham apenas as permissões necessárias.
Escalabilidade
O OpenShift aproveita a auto-escalagem e a auto-escalagem do cluster da cápsula horizontal do Kubernetes. Você pode definir os limiares de memória ou CPU que desencadeiam a redução automática ou a entrada em escala. Combinado com os recipientes leves do Docker, a escala acontece em segundos, em vez de minutos, como acontece com as VMs.
Produtividade do Desenvolvedor
O recurso Fonte-imagem do OpenShift acelera o desenvolvimento, permitindo que os desenvolvedores enviem o código diretamente para o cluster sem escrever arquivos Docker. O sistema integrado de compilação pode ativar as construções e implementações de imagens automatizadas de commits Git, permitindo um ciclo de feedback apertado. Além disso, o console desenvolvedor fornece visualizações topológicas, registros e terminais incorporados.
Melhores práticas para a implantação empresarial
Versionamento e marcação de imagens
Use sempre tags específicas e versionadas para as suas imagens do Docker. Evite a tag na produção porque quebra a reprodutibilidade. Use o hashes de versão semântica ou commit. Os recursos de fluxo de imagem do OpenShift podem rastrear alterações de tag e ativar implementações automatizadas.
Políticas de segurança
Defina Restrições de Contexto de Segurança (SCCs) que correspondam à sua postura de segurança. Comece com o SCC restrito e apenas aumente os privilégios quando necessário. Integre- se com scanners de imagens de containers como Clair ou Red Hat Advanced Cluster Security para analisar imagens antes da implantação. Também, habilite as políticas de rede para o tráfego de microssegmento entre pods.
Integração CI/CD
Automatize builds, tests e implantations usando OpenShift Pipelines (built on Tekton) ou Jenkins. Um pipeline típico: (1) desenvolvedor empurra código para Git, (2) OpenShift ativa uma compilação S2I ou Docker, (3) a nova imagem é automaticamente empurrada para o registro interno, (4) uma implantação é atualizada e (5) verificações de saúde validam a implantação. Volte automaticamente se a nova versão falhar em verificações de saúde.
Exemplo de um recurso de pipeline Tekton que compila a partir de um arquivo Docker:
apiVersion: tekton.dev/v1beta1
kind: Task
metadata:
name: build-docker-image
spec:
workspaces:
- name: source
steps:
- name: build
image: gcr.io/kaniko-project/executor:latest
args:
- --context=$(workspaces.source.path)
- --destination=image-registry.openshift-image-registry.svc:5000/<project>/my-app:$(params.tag)
Monitoramento e registro
Activar a pilha de monitorização integrada do OpenShift (Prometheus e Grafana) para recolher métricas sobre CPU, memória, I/O de disco e utilização da rede. Configure alertas para o consumo anormal de recursos. Para os registos, implante o operador OpenShift Elasticsearch ou envie os registos para um SIEM externo. Corre os registos com métricas para uma análise mais rápida das causas raiz.
Gestão de Recursos
Define as solicitações de recursos e os limites para cada recipiente. O OpenShift usa- as para agendar as cápsulas de forma inteligente e evitar a fome de recursos. Sem limites, um único recipiente pode consumir todos os recursos de nó, afetando outras cargas de trabalho. Exemplo de trechos de YAML:
resources:
requests:
memory: "256Mi"
cpu: "250m"
limits:
memory: "512Mi"
cpu: "500m"
Rede e armazenamento persistente
Para aplicações que necessitem de armazenamento de estado, use o OpenShift's PersistentVolumeClaims (PVCs) suportado por uma classe de armazenamento (por exemplo, NFS, Ceph, AWS EBS). Configure as Classes de Armazenamento apropriadamente. Para redes, use as Rotas de OpenShift para tráfego de HTTP/S externo e Serviços para balanceamento de carga interna. Use políticas de rede para restringir a comunicação pod-to-pod com base em espaços de nomes e rótulos.
Backup e Recuperação de Desastres
Faça backup regular das configurações do OpenShift (snapshots do etcd), dados do PVC e conteúdo do registro de imagem. Implemente uma abordagem de Infraestrutura como código usando ferramentas GitOps como ArgoCD para recuperar ambientes rapidamente. Teste procedimentos de recuperação de desastres periodicamente.
Casos de uso do mundo real
Microservices Descomposição
As empresas modernizam aplicações monolíticas muitas vezes as quebram em microservices. Os recipientes Docker hospedam cada serviço de forma independente, e o OpenShift orquestra todo o sistema, gerenciando a descoberta de serviços, balanceamento de carga e comunicação inter-serviço.
Implantações de nuvem híbrida
O OpenShift é executado em grandes provedores de nuvem (AWS, Azure, GCP) e no local. As imagens do Docker podem ser implantadas em qualquer lugar que o OpenShift execute, permitindo uma experiência consistente em ambientes híbridos. Isto é fundamental para organizações com requisitos de soberania de dados ou estratégias de multinuvem.
CI/CD para aprendizagem de máquina
As equipes de ciência de dados podem contêinerizar modelos ML usando o Docker e implantá- los no OpenShift como funções sem servidor (via OpenShift Serverless/Knative). Isto permite inferência do modelo em escala com escala automática de escala para zero quando não estiver em uso.
Conclusão
Docker e OpenShift juntos fornecem uma poderosa plataforma de orquestração de contêineres pronta para produção que atende às demandas da TI corporativa. A Docker oferece imagens leves e portáteis que são fáceis de construir e version, enquanto a OpenShift adiciona a orquestração, segurança e experiência de desenvolvimento necessária para executar essas imagens em escala com confiança. Ao seguir as etapas de integração e as melhores práticas descritas neste artigo, as organizações podem acelerar a entrega de software, melhorar a utilização de recursos e manter uma postura de segurança forte. Se migrar cargas de trabalho existentes ou construir aplicativos nativos de nuvem em campo verde, a Docker no OpenShift é uma combinação comprovada para orquestração de contêineres empresariais.
Para mais informações, consulte a documentação oficial: Docs Docker, OpenShift Docs, e Página de Produto OpenShift Chapéu Vermelho].