Vamos falar sobre Kubernetes da perspectiva de um engenheiro de software

Como engenheiros de software, devemos estar familiarizados com o K8s e, embora seja um pouco como o DevOps, ele nos dá uma melhor compreensão do que está acontecendo nos bastidores, tornando-nos mais relevantes e responsáveis ​​pelo trabalho de implantação. Este artigo discutirá o Kubernetes (K8s) da perspectiva de um engenheiro de software. Apresentaremos sua motivação, princípios e componentes principais para ajudar os desenvolvedores a melhorar seu conhecimento profissional do Kubernetes e adotar essa tecnologia de ponta com mais confiança!
 

fundo

Antes de falar sobre Kubernetes, vamos primeiro entender o que é um contêiner .
 

O conceito de containers fica claro quando consideramos um cenário como este: depois que um desenvolvedor termina de escrever o código que atende a uma necessidade específica, o próximo passo é empacotá-lo e instalá-lo perfeitamente em outro host, garantindo que nós, clientes, possamos facilmente instalar e aproveite seus benefícios. Como empacotar e instalar em outro host? Normalmente, temos muitas dependências, como código binário, bibliotecas dependentes e diferentes sistemas operacionais, e precisamos empacotar todas elas em um pacote, o chamado "contêiner".
 

Em outras palavras, podemos colocar nosso código em um contêiner junto com todas as suas dependências e então executá-lo facilmente em uma máquina remota, ou em termos de engenharia, “implantar nosso serviço” .
 

Desafios de implantação

Agora que sabemos que nossos serviços são enviados em contêineres, surgem as seguintes questões principais:

  • Como sabemos que nosso serviço de contêiner não travará? Queremos ter certeza de que, se um contêiner falhar, outro contêiner será iniciado.

  • Como garantir que este contêiner tenha recursos suficientes para funcionar? Talvez exija mais recursos do que realmente precisa.

  • Como gerenciamos a implantação de versões, o que significa que quando atualizamos nosso código, isso pode ser feito sem tempo de inatividade? Queremos garantir alta disponibilidade do serviço.

  • Como fazemos com que nossos contêineres se comuniquem?

  • Como aumentamos ou diminuímos conforme nossas solicitações aumentam ou diminuem?
     

A AppsFlyer encontrou esses problemas antes de adotar o K8s e, como uma empresa com uma equipe de plataforma forte, nós os resolvemos por meio de implementação interna. Por exemplo, para gerenciar o ciclo de vida do serviço, criamos um processo chamado "Medic" para garantir que nosso serviço esteja sempre funcionando normalmente, enviando continuamente solicitações GET para a API de verificação de saúde.
 

Outro exemplo é que a maioria dos nossos serviços são implantados em uma instância ec2 por meio de um contêiner docker e uma ferramenta interna (“Santa”) para implantação e gerenciamento de serviços. Isso não é compartilhado com nenhum outro serviço, o que seria um desperdício de recursos, tempo e, mais importante, dinheiro.
 

Solução K8s

Como você pode entender acima, o Kubernetes foi implementado para resolver os desafios que mencionei.
 

A definição de Kubernetes é: "É um sistema de código aberto para automatizar a implantação, escalonamento e gerenciamento de aplicativos em contêineres." Em outras palavras, o Kubernetes nos fornece um sistema de orquestração de contêineres para gerenciar adequadamente nossos clusters, permitindo-nos implantar, gerenciar recursos e aplicações de escala. K8s embala nossos contêineres e dirige o navio para nós.
 

Aqui estão alguns dos benefícios que obtivemos ao usar K8s e resolver os desafios acima:

  • Autocorreção de contêineres em caso de falhas – o Kubernetes fornece um mecanismo de verificação de integridade. Isso significa que não precisamos mais implementar a API de inspeção para testar nossos serviços.

  • A distribuição e agendamento automáticos de contêineres de aplicativos nos proporcionam uma utilização eficiente dos recursos do nó . Utilize os recursos de maneira inteligente e eficiente, compartilhando instâncias de nós com vários aplicativos.

  • Implementação e reversão automáticas sem tempo de inatividade .

  • A descoberta de serviços e o balanceamento de carga ajudam os contêineres a se comunicarem entre si .

  • A escalabilidade horizontal melhora o desempenho do aplicativo, garantindo que os desenvolvedores possam usá-lo simultaneamente sob carga baixa ou alta .
     

Em resumo, o Kubernetes é a melhor solução para gerenciar aplicações conteinerizadas em escala. Com seus componentes poderosos e recursos de automação, o Kubernetes simplifica a implantação, o dimensionamento e o gerenciamento dos ciclos de vida dos aplicativos. O Kubernetes economiza tempo e esforço em comparação ao uso do Docker diretamente em uma instância do EC2 e fornece funcionalidades básicas para gerenciar aplicativos em produção.
 

Mais importante ainda, o Kubernetes economiza dinheiro para as empresas . Ao automatizar a gestão da infraestrutura, o Kubernetes reduz a necessidade de intervenção manual e ferramentas internas, o que, como mencionado acima, pode levar a poupanças significativas de custos operacionais. Além disso, o Kubernetes pode ajudar a otimizar a utilização de recursos , possibilitando a execução de mais aplicações no mesmo hardware, economizando custos.
 

Os componentes básicos do K8s que todo desenvolvedor deve conhecer


 

Os componentes principais do Kubernetes se enquadram em duas categorias amplas: componentes e nós do plano de controle . Vamos dar uma olhada nesses componentes de alto nível:
 

Servidor API

O servidor API é o componente principal do plano de controle e é responsável por expor a API Kubernetes e processar solicitações de API. É a principal forma pela qual outros componentes do cluster, como a ferramenta de linha de comando kubectl ou o painel Kubernetes, interagem com o cluster.
 

Agendador

O agendador é responsável por agendar pods para nós no cluster com base nos recursos disponíveis e nos limites e regras especificados. Ele garante que os pods sejam colocados nos nós de uma forma que maximize a utilização de recursos e reduza a contenção de recursos.
 

gerente de controle

O gerenciador de controle é um processo executado no plano de controle e é responsável por gerenciar o estado do cluster e garantir que ele esteja em conformidade com o estado desejado. Ele consiste em vários controladores diferentes, cada um responsável por um aspecto específico do gerenciamento do cluster, como o controlador de implementação, que gerencia a implementação de aplicativos no cluster.
 

Gerenciador de controle de nuvem

Cloud Control Manager é um componente especial usado ao executar Kubernetes em uma plataforma de nuvem. Ele é responsável por integrar o plano de controle do Kubernetes com a API do provedor de nuvem, permitindo que o cluster utilize recursos e funcionalidades específicas da nuvem.
 

etcd

etcd é um armazenamento de chave-valor distribuído usado para armazenar os dados de configuração de um cluster Kubernetes, incluindo o estado atual e o estado desejado do cluster. Ele é usado para armazenar dados que precisam ser persistidos em todos os nós do cluster, como informações sobre pods, serviços e outros objetos no cluster.
 

Kubelet

Kubelet é um daemon executado em cada nó do cluster e é responsável por gerenciar os pods nesse nó. Kubelet é responsável por tarefas como iniciar e parar pods, monitorar a integridade dos pods e reiniciar pods quando necessário. Ele se comunica com o plano de controle do Kubernetes para receber instruções sobre quais pods executar e como gerenciá-los, e com tempos de execução de contêineres, como o Docker, para realmente executar os contêineres.
 

Foi uma procuração

Kube-proxy é um daemon executado em cada nó do cluster e é responsável por implementar a infraestrutura de rede virtual do cluster. O proxy Kube usa técnicas de programação de rede para encaminhar o tráfego de rede para o pod ou serviço apropriado com base nas regras definidas na configuração de rede do cluster. Algumas das principais tarefas executadas pelo proxy Kube incluem balanceamento de carga, descoberta de serviço e aplicação de políticas de rede.
 

Resumir

Como desenvolvedores, é crucial compreender completamente as tecnologias que encontramos, sejam elas diretamente relacionadas às nossas responsabilidades diretas ou gerenciadas por equipes DevOps separadas. Este artigo servirá como um ponto de partida perfeito para promover uma compreensão mais profunda do mundo K8.
 

K8s tem uma curva de aprendizado acentuada e é muito desajeitado para desenvolvedores. Walrus, uma plataforma de gerenciamento de aplicativos de nova geração construída com base no conceito de engenharia de plataforma, separará as preocupações de P&D e operação e manutenção.Ao fornecer recursos flexíveis e poderosos de gerenciamento de implantação de aplicativos e ambientes e proteger a abstração de nível superior da infraestrutura, o pessoal de P&D pode trabalhar sem entender a infraestrutura subjacente . Construir, implantar e executar aplicativos de autoatendimento sem detalhes técnicos, reduzindo a carga cognitiva dos desenvolvedores . Use o Walrus para estender os recursos nativos da nuvem e as práticas recomendadas para ambientes não-contêinerizados, oferecer suporte à orquestração e implantação unificadas de qualquer formato de aplicativo, reduzir a complexidade do uso da infraestrutura e fornecer às equipes de P&D e operação e manutenção aplicativos consistentes e fáceis de usar experiência em gerenciamento e implantação para construir um processo de entrega de software contínuo e colaborativo. Copie o link do projeto abaixo em seu navegador e experimente o Walrus agora.
 

Endereço de código aberto: github.com/seal-io/walrus
 

Link de referência :
https://medium.com/appsflyerengineering/hi-developer-meet-kubernetes-8652bdc210d9

Acho que você gosta

Origin blog.csdn.net/SEAL_Security/article/details/132754441
Recomendado
Clasificación