Saya telah memulai pod dengan perintah
$ kubectl run busybox --image=busybox --restart=Never --tty -i --generator=run-pod/v1
Ada yang tidak beres, dan sekarang saya tidak bisa menghapusnya Pod
.
Saya mencoba menggunakan metode yang dijelaskan di bawah ini tetapi Pod
terus dibuat ulang.
$ kubectl delete pods busybox-na3tm
pod "busybox-na3tm" deleted
$ kubectl get pods
NAME READY STATUS RESTARTS AGE
busybox-vlzh3 0/1 ContainerCreating 0 14s
$ kubectl delete pod busybox-vlzh3 --grace-period=0
$ kubectl delete pods --all
pod "busybox-131cq" deleted
pod "busybox-136x9" deleted
pod "busybox-13f8a" deleted
pod "busybox-13svg" deleted
pod "busybox-1465m" deleted
pod "busybox-14uz1" deleted
pod "busybox-15raj" deleted
pod "busybox-160to" deleted
pod "busybox-16191" deleted
$ kubectl get pods --all-namespaces
NAMESPACE NAME READY STATUS RESTARTS AGE
default busybox-c9rnx 0/1 RunContainerError 0 23s
kubernetes
kubectl
yman
sumber
sumber
kubectl get all -o name
?kubectl get events
untuk melihat apa yang membuat objek-objek ini?kubctl get rc
untuk melihat apakah ReplicationController telah dibuat. Jika ya, hapus itu, lalu hapus podnya.kubectl get deployment
kubectl delete deployment <deployment_name>
. Untuk mendapatkan nama penyebaran, lakukankubectl get deployments
Jawaban:
Anda perlu menghapus penerapan, yang pada gilirannya akan menghapus pod dan kumpulan replika https://github.com/kubernetes/kubernetes/issues/24137
Untuk mencantumkan semua penerapan:
Kemudian untuk menghapus penerapan:
Di mana NAMESPACE adalah namespace itu, dan DEPLOYMENT adalah
name
tempat penerapannya.Dalam beberapa kasus, ini juga bisa berjalan karena pekerjaan atau daemonset. Periksa yang berikut dan jalankan perintah hapus yang sesuai.
sumber
kubectl create
perintah.kubectl get jobs
kubectl delete replicasets,subscriptions,deployments,jobs,services,pods --all -n <namespace>
Alih-alih mencoba mencari tahu apakah itu penyebaran, deamonset, statefulset ... atau apa (dalam kasus saya itu adalah pengontrol replikasi yang terus mencakup pod baru :) Untuk menentukan apa yang terus mencakup gambar saya dapatkan semua sumber daya dengan perintah ini:
kubectl get all
Tentu saja Anda juga bisa mendapatkan semua sumber daya dari semua ruang nama:
kubectl get all --all-namespaces
atau tentukan namespace yang ingin Anda periksa:
kubectl get all -n NAMESPACE_NAME
Setelah saya melihat bahwa pengontrol replikasi bertanggung jawab atas masalah saya, saya menghapusnya:
kubectl delete replicationcontroller/CONTROLLER_NAME
sumber
jika pod Anda memiliki nama seperti
name-xxx-yyy
, itu bisa dikontrol oleh replicasets.apps bernamaname-xxx
, Anda harus menghapus replicaset itu terlebih dahulu sebelum menghapus podkubectl delete replicasets.apps name-xxx
sumber
kubectl delete --all jobs -n <namespace>
kubectl get replicasets.apps -n <namespace>
(atau --semua-namespaces)Carilah set stateful juga
untuk menghapus semua set stateful dalam namespace
untuk menghapusnya satu per satu
sumber
Dalam beberapa kasus, pod masih tidak akan hilang bahkan saat penerapan dihapus. Dalam hal ini untuk menghapus paksa Anda dapat menjalankan perintah di bawah ini.
kubectl delete pods podname --grace-period=0 --force
sumber
Recreate
.Banyak jawaban di sini memberitahu untuk menghapus objek k8s tertentu, tetapi Anda dapat menghapus beberapa objek sekaligus, bukan satu per satu:
kubectl delete deployments,jobs,services,pods --all -n <namespace>
Dalam kasus saya, saya menjalankan cluster OpenShift dengan OLM - Operator Lifecycle Manager . OLM adalah orang yang mengontrol penerapan, jadi ketika saya menghapus penerapan, itu tidak cukup untuk menghentikan pod agar tidak dimulai ulang.
Hanya ketika saya menghapus OLM dan langganannya , penerapan, layanan, dan pod hilang.
Pertama daftarkan semua objek k8s di namespace Anda:
OLM tidak terdaftar dengan
get all
, jadi saya mencarinya secara khusus:Sekarang hapus semua objek, termasuk OLM, langganan, penerapan, set replika, dll:
Buat daftar objek lagi - semua hilang:
sumber
Ini akan memberikan informasi tentang semua pod, penerapan, layanan, dan pekerjaan di namespace.
pod dapat dibuat dengan penerapan atau pekerjaan
Jika Anda menghapus penerapan atau pekerjaan, maka restart pod dapat dihentikan.
sumber
Ketika pod dibuat ulang secara otomatis bahkan setelah pod tersebut dihapus secara manual, maka pod tersebut telah dibuat menggunakan Deployment. Saat Anda membuat penerapan, ReplicaSet dan Pods dibuat secara otomatis. Bergantung pada berapa banyak replika pod Anda yang Anda sebutkan di skrip penerapan, itu akan membuat jumlah pod tersebut pada awalnya. Saat Anda mencoba untuk menghapus pod mana pun secara manual, pod tersebut akan dibuat kembali secara otomatis.
Ya, terkadang Anda perlu menghapus pod dengan paksa. Tetapi dalam kasus ini perintah paksa tidak berfungsi.
sumber
Alih-alih menghapus NS, Anda dapat mencoba menghapus replicaSet
Kemudian hapus replicaSet
sumber
Setelah mengikuti tutorial interaktif, saya mendapatkan banyak pod, layanan, penerapan:
Untuk membersihkan semuanya,
delete --all
bekerja dengan baik:Itu meninggalkan saya dengan (menurut saya) cluster Kubernetes kosong:
sumber
Jika Anda memiliki pekerjaan yang terus berjalan, Anda perlu mencari pekerjaan itu dan menghapusnya:
kubectl get job --all-namespaces | grep <name>
dan
kubectl delete job <job-name>
sumber
Anda dapat
kubectl get replicasets
memeriksa penerapan lama berdasarkan usia atau waktuHapus penerapan lama berdasarkan waktu jika Anda ingin menghapus pod aplikasi yang sedang berjalan
sumber
Saya juga menghadapi masalah ini, saya telah menggunakan perintah di bawah ini untuk menghapus penerapan.
tetapi pod masih dibuat ulang, Jadi saya memeriksa Replica Set dengan menggunakan perintah di bawah ini
lalu edit replika set ke 1 hingga 0
sumber
Akar masalah dari pertanyaan yang diajukan adalah atribut spesifikasi penerapan / pekerjaan / replicasets
strategy->type
yang menentukan apa yang harus terjadi ketika pod akan dihancurkan (baik secara implisit maupun eksplisit). Dalam kasus saya, itu benarRecreate
.Sesuai jawaban @ nomad , menghapus deployment / job / replicasets adalah perbaikan sederhana untuk menghindari bereksperimen dengan combo yang mematikan sebelum mengacaukan cluster sebagai pengguna pemula.
Coba perintah berikut untuk memahami tindakan di balik layar sebelum beralih ke debugging:
sumber
Dalam kasus saya, saya menyebarkan melalui file YAML seperti
kubectl apply -f deployment.yaml
dan solusinya tampaknya menghapus melaluikubectl delete -f deployment.yaml
sumber
Saya mengalami masalah yang sama: setelah menghapus deployment (
kubectl delete deploy <name>
), pod tetap "Berjalan" dan otomatis dibuat ulang setelah penghapusan (kubectl delete po <name>
).Ternyata set replika terkait tidak dihapus secara otomatis karena beberapa alasan, dan setelah menghapus itu (
kubectl delete rs <name>
), Pod tersebut dapat dihapus.sumber
Dengan penerapan yang memiliki kumpulan berstatus (atau layanan, pekerjaan, dll.) Anda dapat menggunakan perintah ini:
Perintah ini menghentikan apa pun yang berjalan di yang ditentukan
<NAMESPACE>
Dan kuat
sumber