Şimdi bir Kubernetes kümesinde shell (/bin/bash) ile basit bir konteyner çalıştırmaya çalışıyorum.
Bir Docker konteynerinde pseudo-tty
ve detach seçeneğini (docker run
komutundaki -td
seçeneği) kullanarak bir konteyneri çalışır durumda tutmanın bir yolu olduğunu düşündüm.
Örneğin,
$ sudo docker run -td ubuntu:latest
Kubernetes'te böyle bir seçenek var mı?
Bir konteyneri aşağıdaki gibi bir kubectl run-container
komutu kullanarak çalıştırmayı denedim:
kubectl run-container test_container ubuntu:latest --replicas=1
Ancak konteyner birkaç saniye için çıkar (tıpkı yukarıda bahsettiğim seçenekler olmadan docker run
komutuyla başlatmak gibi). Ve ReplicationController onu tekrar tekrar başlatıyor.
Kubernetes üzerinde çalışan bir konteyneri docker run
komutundaki -td
seçenekleri gibi tutmanın bir yolu var mı?
Bu CMD'yi Dockerfile
içinde kullanabilirsiniz:
CMD exec /bin/bash -c "trap : TERM INT; sleep infinity & wait"
Bu, konteynerinizi durması söylenene kadar canlı tutacaktır. Trap ve wait kullanmak konteynerinizin durdurma isteğine hemen tepki vermesini sağlayacaktır. Trap/wait olmadan durdurma birkaç saniye sürecektir.
busybox tabanlı görüntüler için (alpine tabanlı görüntülerde kullanılır) sleep sonsuzluk argümanını bilmez. Bu geçici çözüm, yukarıdaki örnekte olduğu gibi bir docker stop
a aynı anında yanıtı verir:
CMD exec /bin/sh -c "trap : TERM INT; (while true; do sleep 1000; done) & wait"
Bir konteyner, ana süreci çıktığında çıkar. Şöyle bir şey yapmak:
docker run -itd debian
konteyneri açık tutmak açıkçası sadece hızlı testler ve örnekler için kullanılması gereken bir hacktir. Sadece birkaç dakika test etmek için bir kap istiyorsanız, yapardım:
docker run -d debian sleep 300
Bu da unuttuğunuzda konteynerin otomatik olarak çıkma avantajına sahiptir. Alternatif olarak, bunun gibi bir şeyi sonsuza kadar çalıştırmak için bir while
döngüsüne koyabilir veya sadece top
gibi bir uygulama çalıştırabilirsiniz. Tüm bunları Kubernetes'te yapmak kolay olmalıdır.
Asıl soru, bunu neden yapmak isteyeceğinizdir? Konteyneriniz, süreci konteynerin arka planda çalışmasını sağlayacak bir hizmet sağlamalıdır.