모든 kubernetes 네임 스페이스에서 모든 포드를 삭제하는 명령


154

문서를 살펴보면 'a'포드를 삭제하는 API 호출이 있지만 모든 네임 스페이스에서 모든 포드를 종료하는 방법이 있습니까?

답변:


282

요청한 내용을 정확하게 수행하라는 명령은 없습니다.

다음은 일부 일치하는 항목입니다.

이 명령을 사용하여 단일 네임 스페이스에서 모든 포드를 삭제할 수 있습니다.

kubectl delete --all pods --namespace=foo

네임 스페이스에서 모든 배포를 삭제할 수도 있습니다. 그러면 네임 스페이스에 해당하는 배포에 연결된 모든 포드가 삭제됩니다.

kubectl delete --all deployments --namespace=foo

이 명령을 사용하여 모든 네임 스페이스와 모든 네임 스페이스의 모든 객체 (노드 및 일부 이벤트와 같은 네임 스페이스가없는 객체는 아님)를 삭제할 수 있습니다.

kubectl delete --all namespaces

그러나 후자의 명령은 kube-system 네임 스페이스의 항목을 삭제하여 클러스터를 사용할 수 없게하므로 원하는 작업이 아닐 수 있습니다.

이 명령은 kube-system을 제외한 모든 네임 스페이스를 삭제합니다.

for each in $(kubectl get ns -o jsonpath="{.items[*].metadata.name}" | grep -v kube-system);
do
  kubectl delete ns $each
done

1
이 네임 스페이스가 삭제되지 않을 수 있습니다 : 네임 스페이스 "기본"금지 : K8S의 최신 버전으로, 명령 "--all 네임 스페이스를 삭제 kubectl는"더 이상 시스템의 물건을 삭제하지 않습니다 ... 그것은 예를 들어 말한다
카이 문헌 [Wahner

배포 또는 포드 만 삭제합니까?
Sinaesthetic

1
kubectl delete pods --all --all-namespaces때로는 작동하는 것 같습니다 (일부 환경에서는 작동하지 않고 다른 환경에서는 작동하지 않는 이유) 내 요새 호스트에서는 잘 작동하지만 랩톱에서는 작동하지 않습니다. 데비안을 실행하고 동일한 버전의 kubectl (클러스터 버전 1.13)을 실행
Patrick W

@ KaiWähner 실수하지 않으면 k8s 시스템 관련 항목이 kube-system네임 스페이스에 있습니다. 메시지 예제에서 default네임 스페이스를 볼 수 있습니다 . 가요 kube-system당신이 첨부 명령으로 삭제?
조지 Tseres

79
kubectl delete daemonsets,replicasets,services,deployments,pods,rc --all

성가신 복제 컨트롤러도 제거하십시오.


4
이것은 잘못이다. 현재 네임 스페이스에서만 삭제됩니다.
PleaseHelp

-n 플래그를 추가하십시오. 그러나 한 번에 하나의 포드에 대해 한 번에 한꺼번에 모두 적용되는 것은 아닙니다.
grbonk

1
당신은 누락 ing도 삭제 ingresses에
Druska

2
"statefulset"을 추가 할 수도 있습니다 (해당되는 경우). 그렇지 않으면 위의 명령을 실행 한 후에도 새 포드를 계속 포크합니다!
buch11

15

당신 sed은 이것을해야합니다 :

kubectl get pods --no-headers=true --all-namespaces |sed -r 's/(\S+)\s+(\S+).*/kubectl --namespace \1 delete pod \2/e'

설명합니다 :

  1. kubectl get pods --all-namespaces모든 네임 스페이스의 모든 포드 목록을 가져 오려면 command 를 사용하십시오 .
  2. --no-headers=true헤더를 숨기려면 옵션을 사용 하십시오.
  3. 사용 s의 명령을 sed나타내는 처음 두 단어 페치 namespace하고 pod's name각각 그 조합 delete들을 사용하여 명령.
  4. 마지막 delete명령은 다음과 같습니다 kubectl --namespace kube-system delete pod heapster-eq3yw.
  5. 명령 e수정자를 사용하여 s위에서 조립 한 명령을 실행하면 실제 delete작업 이 수행됩니다 .

kube-system네임 스페이스에서 포드를 삭제하지 않으려면 명령 전에 네임 스페이스 grep -v kube-system를 제외 하도록 추가해야합니다 .kube-systemsed


네임 스페이스 --all-namespaces에서 포드를 삭제하지 않으려면 드롭 할 수도 있습니다.kube-system
ianstarz

포드를 몇 개만 삭제하는 명령은 무엇입니까? 예 : 나는 20 포드를 스핀했고 이제는 1 만 유지하고 싶습니다.
Jason

10

당신은 단순히 실행할 수 있습니다

kubectl delete all --all --all-namespaces
  • 첫 번째 all는 공통 리소스 종류 (포드, 복제 세트, 배포 등)를 의미합니다.

    • kubectl get all == kubectl get pods,rs,deployments, ...
  • 두 번째 --all는 선택한 종류의 모든 자원을 선택하는 수단입니다.


참고 all포함되지 않습니다 :

  • 네임 스페이스가 아닌 리소스 (예 : clusterrolebindings, clusterroles 등)
  • 구성 맵
  • 역할 바인딩
  • 역할
  • 비밀
  • ...

완벽하게 정리하려면

  • 다른 도구 (예 : Helm, Kustomize 등)를 사용할 수 있습니다.
  • 네임 스페이스를 사용할 수 있습니다.
  • 리소스를 만들 때 레이블을 사용할 수 있습니다.

2

다음은 grep으로 확장하여 이름별로 필터링 할 수있는 하나의 라이너입니다.

kubectl get pods -o jsonpath="{.items[*].metadata.name}" | \
tr " " "\n" | \
xargs -i -P 0 kubectl delete pods {}


0

이미 생성 된 포드가있는 경우 먼저 모든 배포를 삭제하는 것이 좋습니다

kubectl delete -n *NAMESPACE deployment *DEPLOYMENT

NAMSPACE와 DEPLOYMENT를 해당하는 것으로 바꾸면 다음 명령으로 모든 배포 정보를 얻을 수 있습니다.

kubectl get deployments --all-namespaces

0

Kubectl bulk (krew on bulew-action) 플러그인이 유용 할 수 있습니다. 선택한 리소스에 대한 대량 작업을 제공합니다. 포드를 삭제하는 명령입니다.

 ' kubectl bulk pods -n namespace delete '

이것으로 세부 사항을 확인할 수 있습니다


0

네임 스페이스에서 모두를 삭제하는 파이썬 코드를 만듭니다.

delall.py

import json,sys,os;

obj=json.load(sys.stdin);
for item in obj["items"]:
        os.system("kubectl delete " + item["kind"] + "/" +item["metadata"]["name"] + " -n yournamespace")

그리고

kubectl get all -n kong -o json | python delall.py

0

K8s는 네임 스페이스의 기본에 대해 완벽하게 작동합니다. 지정된 네임 스페이스와 관련된 모든 리소스를 해제하려는 경우

아래에 언급 된 것을 사용할 수 있습니다 :

kubectl 삭제 네임 스페이스 k8sdemo-app

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.