Guia Prático para Desenvolvimento e Contribuição no Linkerd em Ambientes Kubernetes

Guia Prático para Desenvolvimento e Contribuição no Linkerd em Ambientes Kubernetes

Linkerd é uma malha de serviços leve e segura, projetada para ambientes Kubernetes, que oferece recursos essenciais como observabilidade, gerenciamento de tráfego e segurança. Este guia fornece instruções passo a passo para configurar um ambiente de desenvolvimento, explorar módulos principais e realizar contribuições eficazes ao projeto.

Configuração do Ambiente de Desenvolvimento

Pré-requisitos

Antes de iniciar, instale as ferramentas necessárias no seu sistema:

  • Git para controle de versão.
  • Go (versão 1.20 ou superior), a linguagem primária de desenvolvimento.
  • Rust (versão 1.60 ou superior), usado no desenvolvimento do controlador de políticas.
  • Docker para construção de contêineres.
  • Um cluster Kubernetes (por exemplo, Minikube ou Kind) para testes.

Obtendo o Código-Fonte

Copie o repositório do projeto utilizando o comando Git abaixo:

git clone https://exemplo.com/linkerd/linkerd2.git
cd linkerd2

Substitua a URL acima pelo endereço real do repositório, se aplicável.

Construindo o Projeto

O projeto utiliza a ferraemnta just para automação de tarefas. Inicie baixando as dependências e compilando a ferramenta CLI:

# Baixar dependências Go
go mod tidy

# Compilar o CLI linkerd
go build -o bin/linkerd ./cmd/cli

Exploração dos Módulos Principais

Componente de Controle (controlador/)

O controlador é o núcleo do Linkerd, responsável por descoberta de serviços, gerenciamento de tráfego e aplicação de políticas. Submódulos importanets incluem:

  • destination: Lida com a descoberta de serviços, localizado em controller/cmd/destination/.
  • identity: Gerencia certificados para comunicação segura, implementado em controller/identity/.
  • proxy-injector: Injeta automaticamente sidecar proxies em pods, com código em controller/proxy-injector/.

Plano de Dados (proxy/)

O proxy do Linkerd é escrito em Rust e processa a comunicação entre serviços. O código principal reside no diretório proxy/, incluindo funcionalidades de encaminhamento de tráfego, criptografia TLS e coleta de métricas.

Ferramenta de Linha de Comando (CLI)

A CLI permite interagir com o Linkerd para tarefas como instalação, configuração e diagnóstico. O código-fonte está em cmd/cli/, com comandos como linkerd check e linkerd inject.

Processo de Contribuição para Iniciantes

Encontrando Tarefas Adequadas

Consulte os Issues no GitHub do projeto para tarefas marcadas com "good first issue". Leia também o arquivo CONTRIBUTING.md para diretrizes de contribuição.

Modificando e Testando o Código

  1. Crie uma nova branch: git checkout -b minha-feature-nova.
  2. Siga os padrões de estilo do projeto: use gofmt para Go e rustfmt para Rust.
  3. Escreva testes unitários para assegurar cobertura de código.
  4. Execute os testes de integração: go test ./test/integration/....

Enviando uma Solicitação de Pull (PR)

Antes de submeter o PR, certifique-se de que todos os testes passam e assinee o Developer Certificate of Origin (DCO). Forneça uma descrição clara das alterações no PR.

Técnicas de Desenvolvimento Avançadas

Depuração Local do Controlador

Execute localmente um componente do controlador, como o destination, usando:

go run controller/cmd/destination/main.go --kube-config ~/.kube/config

Testando o Controlador de Políticas

O controlador de políticas, desenvolvido em Rust, está localizado em policy-controller/. Construa e execute testes com:

cd policy-controller
cargo test --release

Envolvimento na Comunidade

Participe do Slack do Linkerd para discussões técnicas. Consulte o arquivo GOVERNANCE.md para horários de reuniões comunitárias e use o GitHub Discussions para perguntas e compartilhamento de ideias.

Recursos Essenciais

Documentação Oficial

Explore os guias de desenvolvimento, descrições de testes e processos de lançamento disponíveis na documentação do projeto.

Estrutura do Código-Fonte

Familiarize-se com diretórios-chave:

  • APIs: Definições de API em controller/gen/apis/.
  • Bibliotecas Principais: Código compartilhado em pkg/.
  • Monitoramento: Dashboards do Grafana em grafana/.

Tags: Linkerd kubernetes go Rust Docker

Publicado em 8-11 03:57