Este gráfico de leme foi projetado para implantar funcionalidade que salva automaticamente core dumps da maioria dos provedores de serviços de kubernetes de nuvem pública e instâncias privadas de kubernetes em um serviço de armazenamento compatível com S3.
Por favor, leia o CONTRIBUTING.md, ele contém algumas notas importantes. Preste atenção específica às diretrizes de estilo de codificação e ao Certificado de Origem do Desenvolvedor
Nós, como membros, colaboradores e líderes, comprometemo-nos a tornar a participação na nossa comunidade uma experiência livre de assédio para todos, independentemente da idade, tamanho do corpo, deficiência visível ou invisível, etnia, características sexuais, identidade e expressão de género, nível de experiência, educação , status socioeconômico, nacionalidade, aparência pessoal, raça, religião ou identidade e orientação sexual.
Comprometemo-nos a agir e interagir de forma a contribuir para uma comunidade aberta, acolhedora, diversificada, inclusiva e saudável.
O código de conduta completo está disponível aqui
Consulte o gráfico README.md para obter detalhes completos.
Esta é uma matriz de alvos de teste confirmados. Por favor, ambientes de relações públicas que também funcionam
Provedor | Produto | Versão | Validado? | Trabalhando? |
AWS | EKS | 1.21 | Sim | Sim |
AWS | ROSA | 4.8 | Sim | Sim |
Construção personalizada | K8S | N / D | Sim | Sim |
Oceano Digital | K8S | 1.21.5-do.0 | Sim | Sim |
GKE-cos_containerd | 1.20.10-gke.1600 | Sim | Sim | |
GKE-Ubuntu | 1.20.10-gke.1600 | Sim | Sim | |
IBM | IKS | 1.19-1.21 | Sim | Sim |
IBM | ROKS | 4,6-4,8 | Sim | Sim |
Microsoft | AKS | 1.19 | Sim | Sim |
Microsoft | ARO | 4.8 | Sim | Sim |
Chapéu Vermelho | No local | 4.8 | Sim | Sim |
Core Dumps são uma parte crítica da observabilidade.
À medida que os sistemas se tornam mais distribuídos, os core dumps oferecem às equipes uma abordagem não invasiva para entender por que os programas estão funcionando mal em qualquer ambiente em que são implantados.
Core Dumps são úteis em um amplo número de cenários, mas são muito relevantes nos seguintes casos:
O processo termina sem um rastreamento de pilha útil
O processo fica sem memória
Um aplicativo não se comporta conforme esperado
Os problemas tradicionais com core dumps são:
Despesas gerais de gerenciamento de dumps
A Análise de Dump exigia ferramentas específicas que não estavam prontamente disponíveis na máquina dos desenvolvedores.
Gerenciando o acesso aos dumps, pois eles podem conter informações confidenciais.
Este gráfico tem como objetivo resolver os problemas relacionados aos core dumps, aproveitando plataformas comuns (K8s, ROKS e Object Storage) em um ambiente de nuvem para realizar o trabalho pesado.
O gráfico implanta dois processos:
O agente gerencia a atualização da configuração /proc/sys/kernel/*
, implanta o serviço do compositor e carrega o arquivo zip de core dumps criado pelo compositor para uma instância de armazenamento de objetos.
O compositor lida com o processamento de um core dump e cria documentos JSON de tempo de execução, container coredump e imagem do CRICTL e os insere em um único arquivo zip. O arquivo zip é armazenado no sistema de arquivos local do nó para upload do agente.
Ao instalar o gráfico do Helm do IBM Cloud Core Dump Handler, os seguintes recursos do Kubernetes são implementados em seu cluster Kubernetes:
Namespace : um namespace específico é criado para instalar os componentes - o padrão é ibm-observe
Handler Daemonset : O daemonset implanta um pod em cada nó de trabalho em seu cluster. O daemonset contém configuração para permitir que o processo elevado defina o padrão principal para colocar o dump principal no armazenamento de objetos, bem como coletar informações do pod, se disponíveis.
Política Privilegiada : O daemonset configura o nó host para que privilégios sejam necessários.
Conta de serviço : conta de serviço padrão para executar o daemonset
Reivindicações de volume : para copiar o compositor para o host e permitir o acesso aos core dumps gerados
Função de cluster : criada com um recurso de evento e verbo de criação e associada à conta de serviço.
Para instalar o gráfico Helm em seu cluster, você deve ter a função de plataforma Administrador .
Este gráfico implanta daemonset kubernetes privilegiado com as seguintes implicações:
a criação automática de contêiner privilegiado por nó do Kubernetes, capaz de ler arquivos principais, consultando o crictl em busca de informações do pod.
O daemonset usa o recurso hostpath interagindo com o sistema operacional Linux subjacente.
O binário do compositor é implementado e executado no servidor host
Os core dumps podem conter dados confidenciais de tempo de execução e o acesso ao bucket de armazenamento deve ser gerenciado adequadamente.
As chaves de armazenamento de objetos são armazenadas como segredos e usadas como variáveis de ambiente no daemonset
O IBM Cloud Core Dump Handler requer os seguintes recursos em cada nó do trabalhador para ser executado com sucesso:
$ helm delete core-dump-handler --namespace observe
host-name
seja excluído antes de continuar $ kubectl get pvc -n observe
$ helm install core-dump-handler . --namespace observe
helm delete core-dump-handler -n observe
Crie a imagem docker build -t YOUR_TAG_NAME .
Envie a imagem para seu registro de contêiner
Atualize o contêiner no arquivo values.yaml
para usá-lo.
image :
registry : YOUR_REGISTRY
repository : YOUR_REPOSITORY
tag : YOUR_TAG
ou execute o comando helm install com as configurações
--set image.registry=YOUR_REGISTRY
--set image.repository=YOUR_REPOSITORY
--set image.tag=YOUR_TAG
Os serviços são escritos em Rust usando Rustup.
Os testes de unidade local podem ser executados usando cargo test
na pasta base
Atualmente, apenas o IBM Cloud ROKS e IKS são suportados, mas temos prazer em realizar testes de integração para outros serviços, mas não podemos executá-los antes do lançamento.
Para executar a compilação de testes de integração, siga as instruções para uma compilação personalizada
Na raiz da pasta do projeto crie um arquivo chamado .env
com a seguinte configuração
S3_ACCESS_KEY=XXXX
S3_SECRET=XXXX
S3_BUCKET_NAME=XXXX
S3_REGION=XXXX
Mude o diretório para a pasta de integração e execute o teste
cd integration
./run-ibm.sh
As versões são construídas em um branch de pré-lançamento, por exemplo, os testes de integração pre-8.5.0
são executados manualmente e uma versão é gerada quando mesclada com o principal.
Atualmente não é possível automatizar isso porque a integração do kubernetes nas ações do github não é confiável o suficiente.
Se você deseja testar um pré-lançamento com seus próprios testes de integração, levante um problema e poderemos colaborar em sua execução de teste.
O primeiro lugar para procurar problemas é no console do agente. Uma instalação bem-sucedida deve ser assim
[2021-09-08T22:28:43Z INFO core_dump_agent] Setting host location to: /var/mnt/core-dump-handler
[2021-09-08T22:28:43Z INFO core_dump_agent] Current Directory for setup is /app
[2021-09-08T22:28:43Z INFO core_dump_agent] Copying the composer from ./vendor/default/cdc to /var/mnt/core-dump-handler/cdc
[2021-09-08T22:28:43Z INFO core_dump_agent] Starting sysctl for kernel.core_pattern /var/mnt/core-dump-handler/core_pattern.bak
[2021-09-08T22:28:43Z INFO core_dump_agent] Created Backup of /var/mnt/core-dump-handler/core_pattern.bak
[2021-09-08T22:28:43Z INFO core_dump_agent] Starting sysctl for kernel.core_pipe_limit /var/mnt/core-dump-handler/core_pipe_limit.bak
[2021-09-08T22:28:43Z INFO core_dump_agent] Created Backup of /var/mnt/core-dump-handler/core_pipe_limit.bak
[2021-09-08T22:28:43Z INFO core_dump_agent] Starting sysctl for fs.suid_dumpable /var/mnt/core-dump-handler/suid_dumpable.bak
[2021-09-08T22:28:43Z INFO core_dump_agent] Created Backup of /var/mnt/core-dump-handler/suid_dumpable.bak
[2021-09-08T22:28:43Z INFO core_dump_agent] Created sysctl of kernel.core_pattern=|/var/mnt/core-dump-handler/cdc -c=%c -e=%e -p=%p -s=%s -t=%t -d=/var/mnt/core-dump-handler/core -h=%h -E=%E
kernel.core_pattern = |/var/mnt/core-dump-handler/cdc -c=%c -e=%e -p=%p -s=%s -t=%t -d=/var/mnt/core-dump-handler/core -h=%h -E=%E
kernel.core_pipe_limit = 128
[2021-09-08T22:28:43Z INFO core_dump_agent] Created sysctl of kernel.core_pipe_limit=128
fs.suid_dumpable = 2
[2021-09-08T22:28:43Z INFO core_dump_agent] Created sysctl of fs.suid_dumpable=2
[2021-09-08T22:28:43Z INFO core_dump_agent] Creating /var/mnt/core-dump-handler/.env file with LOG_LEVEL=info
[2021-09-08T22:28:43Z INFO core_dump_agent] Executing Agent with location : /var/mnt/core-dump-handler/core
[2021-09-08T22:28:43Z INFO core_dump_agent] Dir Content []
Se o agente estiver sendo executado com êxito, poderá haver um problema com a configuração do compositor. Para verificar os logs do compositor, abra um shell no agente e cat o compositor.log para ver se há alguma mensagem de erro.
cat /var/mnt/core-dump-handler/composer.log
Se não houver erros, você deverá alterar o log padrão de error
para debug
em values.yaml e reimplantar o gráfico. Crie um core dump novamente e /var/mnt/core-dump-handler/composer.log
deve conter detalhes específicos sobre cada upload.