Kapsüller, Sonlandırma durumunda takılı kaldı


244

ReplicationController12 bölmeli bir silmeyi denedim ve bölmelerin bazılarının takılıp kaldığını görebiliyordum Terminating.

Kubernetes kümem, bir kontrol düzlemi düğümü ve Ubuntu sanal makinelerinde yüklü üç çalışan düğümden oluşur.

Bu sorunun nedeni ne olabilir?

NAME        READY     STATUS        RESTARTS   AGE
pod-186o2   1/1       Terminating   0          2h
pod-4b6qc   1/1       Terminating   0          2h
pod-8xl86   1/1       Terminating   0          1h
pod-d6htc   1/1       Terminating   0          1h
pod-vlzov   1/1       Terminating   0          1h

Zamanlayıcı ve denetleyici yöneticisi çalışıyor mu?
Antoine Cotten

Yanıtlar:


471

POD'u zorla silmek için aşağıdaki komutu kullanabilirsiniz.

kubectl delete pod <PODNAME> --grace-period=0 --force --namespace <NAMESPACE>

3
bu benim için bir çözüm oldu 1.2.4. Kapsüller bütün gece sona
ermişti

6
Benim durumumda, bir seçenek daha eklemeliyim: --forcekapsülleri temin etmek için.
BMW

17
Bunu kümemde yaptım ve bölme kaldırılmış gibiydi, ancak düğümü kontrol ettiğimde kap hala çalışıyordu. Docker'ı düğümün kendisinde yeniden başlattım. github.com/kubernetes/kubernetes/issues/25456 Bu komutla sistemik bir sorunu gizlemediğinizden emin olun.
mqsoh

4
@mqsoh: Silme zorlaması yalnızca api-server deposundan (etcd) kaldırılır, silinen gerçek kaynak süresiz olarak çalışmaya devam edebilir.
bit

8
"uyarı: Anında silme, çalışan kaynağın sonlandırıldığını doğrulamayı beklemez. Kaynak kümede süresiz olarak çalışmaya devam edebilir" Hangi kaynaklar?
Akshay

57

Bölmeyi silmeye zorlayın:

kubectl delete pod --grace-period=0 --force --namespace <NAMESPACE> <PODNAME>

--forceBayrak zorunludur.


41
Ama benim için asıl soru, "neden ilk etapta buna başvurmamız gerekiyor?" Normal çalışma koşullarında baklaların bu sıkışmış duruma girmesine ne tür şeyler neden olur?
neverfox

2
Sana bir örnek verebilirim, zarif bir şekilde kapatılan bir java kabımız vardı, ancak kendini çöpe topladı, böylece sinyallere tepki vermedi.
Aurelia

1
Ad alanını sağlamak iyidir, aksi takdirde çok adlı bir ortamda bölgeniz bulunmaz, varsayılan olarak kube-systemad alanına bakar.
Daniel Andrei Mincă

Aynı anda bir isim alanındaki tüm bölmeleri silmeye zorlamak içinktl get pods -o custom-columns=:metadata.name | xargs kubectl delete pod --force --grace-period=0
deepdive

21

Sonlandırıcı bloğunu kaynaktan (bölme, dağıtım, ds vb ...) silin:

"finalizers": [
  "foregroundDeletion"
]

1
Kalıcı hacim bundan sonra silindi. Gerçekten ne yapar?
raiyan

Sonlandırma durumuna yapışmış kapsülüm anında kaldırıldı.
Kuberchaun

Yapılmadığı zaman sıkışmış kapsülü benim için sabitleyen tek şey buydu delete -grace-period=0 --force. Yine de, tam olarak ne yaptığı hakkında biraz detaylandırmayı takdir ediyorum.
valorl

Bu sayfada ön plan Silme açıklanmaktadır. Nesnenin silinme sürecinde olduğunu gösteren bir meta veri değeri. kubernetes.io/docs/concepts/workloads/controllers/…
Sean Keane

14

Pratik cevap - Sonlandırıcı bir kapsülü her zaman çalıştırarak silebilirsiniz:

kubectl delete pod NAME --grace-period=0

Tarihsel cevap - Sürüm 1.1'de, düğümleri kümeden temiz olmayan bir şekilde çıkarılırsa bazen baklaların Sonlandırma durumunda mahsur kaldığı bir sorun vardı.


1
Sorun sanırım. Düğümlerden çıkarmadan bir minion vm'yi kapattım. Bu kabul edilebilir bir davranış mı? Yoksa bu bölmeleri kubernet'lerden kaldırmak için bir düzeltme var mı?
Dimuthu

Evet, sürüm 1.2 gelene kadar geçici çözüm bölmeleri silmektir.
Alex Robinson

36
Her zaman sonlandırıcı bir kapsülü silmeye zorlayabilirsinizkubectl delete pod NAME --grace-period=0
Clayton

3
Doktor, kubectl delete ...bir SIG_TERMistek çalıştırıldığında kapsayıcıya gönderileceğini söylüyor . Peki ya yetkisiz kullanım süresinden sonra konteyner hala çalışıyorsa? TerminatingBazıları gittikçe yazılmış, bazıları nodej'lerde sıkışmış bir sürü bakla aldım. ReplicationController kaldırıldı ve konteyner hala çalışıyor
Quyen Nguyen Tuan

4
kubectl delete pod PODNAME --grace-period=0Clayton'un önerdiği gibi benim için çalıştı.
Yogesh Jilhawar

13

Bu komutu daha basit buldum:

for p in $(kubectl get pods | grep Terminating | awk '{print $1}'); do kubectl delete pod $p --grace-period=0 --force;done

Varsayılan ad alanındaki Sonlandırma durumundaki tüm bölmeleri siler.


1
Bunu kube-systemkullanmak gibi başka bir ad alanında çalıştırmak istiyorsanız :for p in $(kubectl get pods -n kube-system| grep Terminating | awk '{print $1}'); do kubectl delete pod $p --grace-period=0 --force -n kube-system;done
acrogenesis

8

Benim durumumda --forceseçenek oldukça işe yaramadı. Hala kapsülü görebiliyordum! Sonlandırma / Bilinmeyen modunda takılı kaldı. Yani koştuktan sonra

kubectl delete pods <pod> -n redis --grace-period=0 --force

Koştum

kubectl patch pod <pod> -p '{"metadata":{"finalizers":null}}'

2
Bunu yapmadan önce, kesinleştiricilerin ne olduğunu anlamak için kubernetes.io/docs/concepts/workloads/controllers/… ' ı okumaya değer . Ayrıca, sıkışmış olan sonlandırıcıya bakmak neden takıldığına ve atlamanın güvenli olup olmadığına dair ipuçları verebilir ...
Beni Cherniavsky-Paskin

5

Çalışmıyorsa --grace-period=0şunları yapabilirsiniz:

kubectl delete pods <pod> --grace-period=0 --force

Bunun işe yaradığı görülen bazı durumlar vardır, ancak aslında silmez. Bu kubelet pod durumunu kaybeder nereye konularla ilgisi var olabilir ve yaprakların o kadar devlet alamayan .. (örn github.com/kubernetes/kubernetes/issues/51835 ). Henüz temizlemenin bir yolunu bulamadım.
cgseller

3

Son zamanlarda kale cephesi ad alanını kaldırırken tökezledim - Sonlandırma durumunda takılı kaldı.

Yardımcı olan tek şey, burada önerildiği gibi doğrudan k8s api'yi curl ile çağırarak kubernetes sonlandırıcıyı kaldırmaktı .

  • kubectl get namespace rook-ceph -o json > tmp.json
  • kubernetes sonlandırıcısını sil tmp.json(boş dizi bırak "finalizers": [])
  • çalıştırmak kubectl proxyyetkilendirme amaçları için diğer bir terminal ve geri bağlantı için aşağıdaki kıvırmak istek çalıştırmak
  • curl -k -H "Content-Type: application/json" -X PUT --data-binary @tmp.json 127.0.0.1:8001/k8s/clusters/c-mzplp/api/v1/namespaces/rook-ceph/finalize
  • ad alanı kayboldu

Ayrıntılı kale cephesi burada .


3

Asıl soru " Bu sorunun nedeni ne olabilir? " Sorusudur ve cevap https://github.com/kubernetes/kubernetes/issues/51835 & https://github.com/kubernetes/kubernetes/issues adresinde tartışılmaktadır. / 65569 ve bkz. Https://www.bountysource.com/issues/33241128-unable-to-remove-a-stopped-container-device-or-resource-busy

Bunun nedeni, diğer bazı ad alanlarına sızan binicinin sızmasıdır.

Araştırmak için bölme ana bilgisayarında oturum açabilirsiniz.

minikube ssh
docker container ps | grep <id>
docker container stop <id> 

Bunun en az yükselen cevap olduğuna inanamıyorum ve tek bir yorumu yoktu. Diğer tüm yanıtlar, sorunu çözmenin veya sorunu çözmenin yollarını ele alırken, OP açıkça durumun neden gerçekleştiğini sordu.
MisterStrickland

0

Son zamanlarda kümemdeki kaynakları serbest bırakmak için tökezledim. hepsini silme komutu.

kubectl get pods --all-namespaces | grep Terminating | while read line; do 
pod_name=$(echo $line | awk '{print $2}' ) name_space=$(echo $line | awk 
'{print $1}' ); kubectl delete pods $pod_name -n $name_space --grace-period=0 --force; 
done

Umarım bunu okuyan birine yardım eder

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.