Pré-preenchimento de discos permanentes do GCE durante a construção e / ou antes de executar a imagem do Docker no GKE

2

Eu gostaria de criar um contêiner do Docker e depois executá-lo no GKE depois de montar alguns diretórios dos PDs (discos permanentes) do GCE. Por exemplo, eu gostaria que os arquivos de configuração do aplicativo (leitura-gravação) em /etc/<application>/ vivessem mais que seus pods (que podem ser reiniciados a qualquer momento).

A compilação normal coloca os arquivos de configuração padrão em /etc/<application>/ e é imperativo que eles sejam "copiados" de alguma forma do disco efêmero da imagem para o PD, de modo que o aplicativo possa iniciar em seu ambiente esperado.

Existe uma prática recomendada para que isso aconteça? Por exemplo, eu teria que montar PDs também no meu Dockerfile ou posso de alguma forma solicitar que os PDs sejam "sincronizados" com arquivos de outro diretório / volume / disco quando eles são montados pela primeira vez por uma instância de VM?

    
por Drux 24.07.2016 / 20:04

2 respostas

1

Eu não ouvi sobre as práticas recomendadas, então é isso que eu adotei agora:

  1. docker build da imagem com Dockerfile que também tars /etc/<application>/ into <application>.tar depois de ter executado suas outras etapas de construção
  2. brevemente docker run da imagem e scp tar da imagem em execução
  3. crie brevemente uma instância de VM temporária e adicione / anexe o PD a ela; scp tar arquivos para a instância da VM; gcloud compute ssh no tit, monte o PD e descompacte os arquivos necessários abaixo do ponto de montagem
por 29.07.2016 / 10:17
2

A resposta óbvia é preencher cada disco permanente imediatamente após criá-lo.

Se as configurações do aplicativo mudarem de compilação para compilação, e elas devem corresponder à compilação em execução, haverá um problema não resolvido sobre o que fazer se várias versões do aplicativo compartilharem o mesmo PD e o conflito sobre o que deve ser armazenado.

Se você não precisa se preocupar com o compartilhamento PD em versões cruzadas, é possível inicializar o conteúdo do PD usando um trabalho em execução no pod do aplicativo. O Kubernetes tem um recurso chamado init containers projetado para tornar isso mais fácil; mas ainda é alfa no momento da escrita.

    
por 30.07.2016 / 17:48