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
- Crie uma nova branch:
git checkout -b minha-feature-nova. - Siga os padrões de estilo do projeto: use
gofmtpara Go erustfmtpara Rust. - Escreva testes unitários para assegurar cobertura de código.
- 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/.