É possível reiniciar um único contêiner
Não completamente kubectl
, embora dependendo da configuração do seu cluster você possa "trapacear" e docker kill the-sha-goes-here
, o que fará com que o kubelet reinicie o contêiner "com falha" (supondo, é claro, que a política de reinicialização do pod diga que é o que ele deve fazer)
como faço para reiniciar o pod
Isso depende de como o pod foi criado, mas com base no nome do pod que você forneceu, ele parece estar sob a supervisão de um ReplicaSet, então você pode apenas kubectl delete pod test-1495806908-xn5jn
e o kubernetes criará um novo em seu lugar (o novo pod terá um nome diferente, por isso não espere kubectl get pods
voltar test-1495806908-xn5jn
nunca mais)
docker kill the-sha-goes-here
então por que não fazerdocker container restart the-sha-goes-here
? por que confiarkubelet
para reiniciá-lo? De qualquer forma, o verdadeiro problema é onde executo odocker
comando até mesmo para matar o container. Ativadocould-shell
,docker
não mostra os containers dos clusters k8s!Há casos em que você deseja reiniciar um contêiner específico em vez de excluir o pod e permitir que o Kubernetes o recrie.
Fazendo um
kubectl exec POD_NAME -c CONTAINER_NAME /sbin/killall5
trabalho para mim.(Eu mudei o comando de
reboot
para com/sbin/killall5
base nas recomendações abaixo.)fonte
reboot
; Em/sbin/killall5
vez disso, tive mais sorte na execução ; isso mata todos os processos e o contêiner sairá.kubectl exec POD_NAME -c CONTAINER_NAME /sbin/reboot
funcionou como um encantoTanto o pod quanto o contêiner são efêmeros. Tente usar o seguinte comando para interromper o contêiner específico e o cluster k8s reiniciará um novo contêiner.
Isso enviará um
SIGTERM
sinal para o processo 1, que é o principal processo em execução no contêiner. Todos os outros processos serão filhos do processo 1 e serão encerrados após a saída do processo 1. Veja a página de manual do kill para outros sinais que você pode enviar.fonte
O principal motivo para ter o kubernetes é que ele gerencia os contêineres para você, de forma que você não precise se preocupar tanto com o ciclo de vida dos contêineres no pod.
Já que você tem uma
deployment
configuração que usareplica set
. Você pode excluir o pod usandokubectl delete pod test-1495806908-xn5jn
e o kubernetes gerenciará a criação de um novo pod com os 2 contêineres sem qualquer tempo de inatividade. Tentar reiniciar manualmente contêineres únicos em pods anula todos os benefícios do kubernetes.fonte
Todas as respostas acima mencionaram a exclusão do pod ... mas se você tiver muitos pods do mesmo serviço, seria entediante excluir cada um deles ...
Portanto, proponho a seguinte solução, reinicie :
1) Defina a escala para zero:
O comando acima encerrará todos os seus pods com o nome
<<name>>
2) Para iniciar o pod novamente, defina as réplicas para mais de 0
O comando acima iniciará seus pods novamente com 2 réplicas.
fonte
kubectl patch deployment <deployment name> -p "{\"spec\": {\"template\": {\"metadata\": { \"labels\": { \"redeploy\": \"$(date +%s)\"}}}}}"
lugar. Isso atualizará a implantação e, portanto, iniciará a recriação de todos os pods gerenciados por ele de acordo com a estratégia de atualização contínua.Usamos uma linha de comando bastante conveniente para forçar a reimplantação de imagens novas no pod de integração.
Percebemos que todos os nossos contêineres alpinos executam seu comando de "sustentação" no PID 5. Portanto, enviar um
SIGTERM
sinal leva o contêiner para baixo.imagePullPolicy
sendo definido comoAlways
, o kubelet extrai novamente a imagem mais recente ao trazer o contêiner de volta.fonte
kill -15 5
você está executando o comando kill para enviar o sinal "-15" para o processo com o PID 5. É assim que você informa um processo que gostaria que ele terminasse (SIGTERM ) e leva um tempo para limpar quaisquer recursos abertos (arquivos temporários, transações de rollback de banco de dados, conexões fechadas, qualquer que seja). Comparado com -9 (SIGKILL), mata o processo imediatamente, não permitindo que ele limpe quaisquer recursos abertos.Eliminar o processo especificado no Dockerfile
CMD
/ENTRYPOINT
funciona para mim. (O contêiner é reiniciado automaticamente)A reinicialização não era permitida em meu contêiner, então tive que usar esta solução alternativa.
fonte
Houve um problema no
coredns
pod, excluí esse pod porSeu pod será reiniciado automaticamente.
fonte
Presumindo que o contêiner seja executado como root, o que não é recomendado.
No meu caso, quando alterei a configuração do aplicativo, tive que reinicializar o contêiner que foi usado em um padrão de arquivo secundário, eu mataria o PID para o aplicativo de inicialização de primavera que pertence ao usuário do docker.
fonte
kubectl exec -it ${POD_NAME?} -c ${CONTAINER_NAME?} bash ...
, será muito mais fácil para as pessoas copiar / colar.