Como corrigir um contêiner ou nó anormal devido a nenhum espaço em disco de thin pool?
Descrição do problema
Quando o espaço em disco de um thin pool em um nó está prestes a ser usado, as seguintes exceções ocorrem ocasionalmente:
Falha na criação de arquivos ou diretórios no contêiner, o sistema de arquivos no contêiner é somente leitura, o nó está contaminado com pressão de disco ou o nó não está disponível.
Você pode executar o comando docker info no nó para exibir o espaço usado e restante do thin pool para localizar a falha. A figura a seguir é um exemplo.
Possível causa
Quando o Docker device mapper é usado, embora você possa configurar o parâmetro basesize para limitar o tamanho do diretório /home de um único contêiner (para 10 GB por padrão), todos os contêineres no nó ainda compartilham o thin pool do nó para armazenamento. Eles não estão completamente isolados. Quando a soma do espaço do thin pool usado por determinados contêineres atinge o limite superior, outros contêineres não podem ser executados corretamente.
Além disso, depois que um arquivo é excluído no diretório /home do contêiner, o espaço do thin pool ocupado pelo arquivo não é liberado imediatamente. Portanto, mesmo que o basesize seja definido como 10 GB, o espaço de thin pool ocupado pelos arquivos continua aumentando até 10 GB quando os arquivos são criados no contêiner. O espaço liberado após a exclusão do arquivo será reutilizado somente depois de um tempo. Se o número de contêineres de serviço no nó multiplicado pelo tamanho de base for maior do que o tamanho do espaço do thin pool do nó, existe a possibilidade de que o espaço do thin pool tenha sido usado.
Soluções
Quando o espaço do thin pool de um nó é usado, alguns serviços podem ser migrados para outros nós para recuperar rapidamente os serviços. Mas é aconselhável usar as seguintes soluções para resolver a causa raiz:
Solução 1:
Planeje adequadamente a distribuição de serviço e o espaço em disco do plano de dados para evitar o cenário em que o número de contêineres de serviço multiplicado pelo tamanho de base é maior que o tamanho do thin pool do nó. Para expandir o espaço do thinpool, consulte Expansão da capacidade de disco do nó.
Solução 2:
Crie e exclua arquivos em contêineres de serviço no armazenamento local (como emptyDir e hostPath) ou no diretório de armazenamento em nuvem montado no contêiner. Esses arquivos não ocupam o espaço do thin pool.
Solução 3:
Se o SO usar OverlayFS, os serviços poderão ser implementados nesses nós para evitar o problema de que o espaço em disco ocupado por arquivos criados ou excluídos no contêiner não seja liberado imediatamente.