Kubernetes: `kubectl get`μ—λŠ” κ³ κΈ‰ ν¬λ“œ μƒνƒœλ₯Ό ν•„ν„°λ§ν•˜λŠ” 방법이 μžˆμ–΄μ•Ό ν•©λ‹ˆλ‹€.

에 λ§Œλ“  2017λ…„ 07μ›” 21일  Β·  54μ½”λ©˜νŠΈ  Β·  좜처: kubernetes/kubernetes

무슨 일이 μžˆμ—ˆλŠ”μ§€ :

ν˜„μž¬ μ€€λΉ„λ˜μ§€ μ•Šμ€ ν¬λ“œλ₯Ό ν™•μΈν•˜λŠ” κ°„λ‹¨ν•œ λͺ…령을 κ°–κ³  μ‹ΆμŠ΅λ‹ˆλ‹€.

μ˜ˆμƒν–ˆλ˜ 일 :

λͺ‡ 가지 μ˜΅μ…˜μ„ λ³Ό 수 μžˆμŠ΅λ‹ˆλ‹€.

  • λ‚΄κ°€ λͺ¨λ₯΄λŠ” λ§ˆλ²•μ˜ κΉƒλ°œμ΄ μžˆλ‹€
  • kubectl get ν”Œλž˜κ·Έλ₯Ό μ‚¬μš©ν•˜μ—¬ go/jsonpathλ₯Ό μ‚¬μš©ν•˜μ—¬ 좜λ ₯ 필터링
  • ν¬λ“œ 단계 Running&Ready 와 Running ꡬ별
  • μ€€λΉ„ μƒνƒœ 필터링 ν”Œλž˜κ·Έ

ν˜„μž¬ 그것을 μ–»λŠ” 방법 :

kubectl get pods --all-namespaces -o json  | jq -r '.items[] | select(.status.phase != "Running" or ([ .status.conditions[] | select(.type == "Ready" and .state == false) ] | length ) == 1 ) | .metadata.namespace + "/" + .metadata.name'
kinfeature sicli

κ°€μž₯ μœ μš©ν•œ λŒ“κΈ€

50140은 μ§€κΈˆ μ΄λŸ¬ν•œ ν¬λ“œλ₯Ό ν•„ν„°λ§ν•˜κΈ° μœ„ν•΄ μƒˆ ν”Œλž˜κ·Έ --field-selector λ₯Ό μ œκ³΅ν•©λ‹ˆλ‹€.

$ kubectl get pods --field-selector=status.phase!=Running

/λ‹«κΈ°

λͺ¨λ“  54 λŒ“κΈ€

/μ’…λ₯˜ κΈ°λŠ₯

/μ‹œκ·Έλ„ 클립

여기도 λ§ˆμ°¬κ°€μ§€μž…λ‹ˆλ‹€. μ‹€ν–‰λ˜μ§€ μ•ŠλŠ” μ»¨ν…Œμ΄λ„ˆλ§Œ λ‚˜μ—΄ν•˜κΈ° μœ„ν•΄ λ³΅μž‘ν•œ ꡬ문을 μ‚¬μš©ν•˜λŠ” 것은 λ†€λΌμš΄ μΌμž…λ‹ˆλ‹€...

μ΄μƒμ μœΌλ‘œλŠ” λ‹€μŒκ³Ό 같이 말할 수 μžˆμŠ΅λ‹ˆλ‹€.

kubectl get pods --namespace foo -l status=pending

μž‘λ™ν•˜λ €λ©΄ .status == "False" 을 μ•½κ°„ μˆ˜μ •ν•΄μ•Ό ν–ˆμŠ΅λ‹ˆλ‹€.

kubectl get pods -a --all-namespaces -o json  | jq -r '.items[] | select(.status.phase != "Running" or ([ .status.conditions[] | select(.type == "Ready" and .status == "False") ] | length ) == 1 ) | .metadata.namespace + "/" + .metadata.name'

50140은 μ§€κΈˆ μ΄λŸ¬ν•œ ν¬λ“œλ₯Ό ν•„ν„°λ§ν•˜κΈ° μœ„ν•΄ μƒˆ ν”Œλž˜κ·Έ --field-selector λ₯Ό μ œκ³΅ν•©λ‹ˆλ‹€.

$ kubectl get pods --field-selector=status.phase!=Running

/λ‹«κΈ°

@dixudx

kubectl version
Client Version: version.Info{Major:"1", Minor:"8", GitVersion:"v1.8.4", GitCommit:"9befc2b8928a9426501d3bf62f72849d5cbcd5a3", GitTreeState:"clean", BuildDate:"2017-11-20T19:11:02Z", GoVersion:"go1.9.2", Compiler:"gc", Platform:"darwin/amd64"}
Server Version: version.Info{Major:"1", Minor:"8", GitVersion:"v1.8.0", GitCommit:"0b9efaeb34a2fc51ff8e4d34ad9bc6375459c4a4", GitTreeState:"clean", BuildDate:"2017-11-29T22:43:34Z", GoVersion:"go1.9.1", Compiler:"gc", Platform:"linux/amd64"}
kubectl get po --field-selector=status.phase==Running -l app=k8s-watcher
Error: unknown flag: --field-selector

@asarkar --field-selector λŠ” 곧 λ‚˜μ˜¬ v1.9λ₯Ό λŒ€μƒμœΌλ‘œ ν•©λ‹ˆλ‹€.

@dixudx ν•„λ“œ 선택기에 λŒ€ν•œ PR에 κ°μ‚¬λ“œλ¦½λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ 이것은 λ‚΄κ°€ 염두에 λ‘μ—ˆλ˜ 것이 μ•„λ‹ˆλΌκ³  μƒκ°ν•©λ‹ˆλ‹€. μ€€λΉ„ μƒνƒœ 확인을 ν†΅κ³Όν•˜μ§€ λͺ»ν•œ ν•˜λ‚˜ μ΄μƒμ˜ μ»¨ν…Œμ΄λ„ˆκ°€ μžˆλŠ” ν¬λ“œλ₯Ό νŒŒμ•…ν•  수 있기λ₯Ό μ›ν–ˆμŠ΅λ‹ˆλ‹€.

μ€€λΉ„λ˜μ§€ μ•Šμ€ ν¬λ“œ(kubectl v1.9.1)κ°€ μžˆλ‹€κ³  κ°€μ •ν•˜λ©΄ READY 0/1 :

$ kubectl get pods                                       
NAME          READY     STATUS    RESTARTS   AGE
pod-unready   0/1       Running   0          50s

이 ν¬λ“œλŠ” 아직 λ‹¨κ³„μ μœΌλ‘œ μ‹€ν–‰ μ€‘μ΄λ―€λ‘œ μ œμ•ˆλœ ν•„ν„°λ₯Ό μ‚¬μš©ν•˜μ—¬ κ°€μ Έμ˜¬ 수 μ—†μŠ΅λ‹ˆλ‹€.

$ kubectl get pods --field-selector=status.phase!=Running
No resources found.

/λ‹€μ‹œ μ—΄λ‹€

같은 λ¬Έμ œκ°€ λ°œμƒν–ˆμŠ΅λ‹ˆλ‹€.
λ‹€μŒκ³Ό 같은 것이 있으면 기쁠 κ²ƒμž…λ‹ˆλ‹€.
kubectl ν¬λ“œ κ°€μ Έμ˜€κΈ° --field-selector=status.ready!=True

흠, μ€‘μ²©λœ λ°°μ—΄ ν•­λͺ©μ„ κ°€μ Έμ˜€λŠ” 데 μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆκΉŒ? ν•˜κ³  싢은 λŒ€λ‘œ

kubectl get pods --field-selector=status.containerStatuses.restartCount!=0

ν•˜μ§€λ§Œ status.containerStatuses..restartCount μ‹œλ„ν•œ 였λ₯˜λ₯Ό λ°˜ν™˜ν•˜μ§€λ§Œ μž‘λ™ν•˜μ§€ μ•Šκ³  λ™μΌν•œ 였λ₯˜λ₯Ό λ°˜ν™˜ν•©λ‹ˆλ‹€ Error from server (BadRequest): Unable to find "pods" that match label selector "", field selector "status.containerStatuses..restartCount==0": field label not supported: status.containerStatuses..restartCount

@artemyarulin μ‹œλ„ status.containerStatuses[*].restartCount==0

κ°μ‚¬ν•©λ‹ˆλ‹€. 방금 kubectl v1.9.3/cluster v1.9.2둜 μ‹œλ„ν–ˆλŠ”λ° Error from server (BadRequest): Unable to find "pods" that match label selector "", field selector "status.containerStatuses[*].restartCount!=0": field label not supported: status.containerStatuses[*].restartCount 같은 였λ₯˜λ₯Ό λ°˜ν™˜ν•©λ‹ˆλ‹€. λ‚΄κ°€ λ­”κ°€ 잘λͺ»ν•˜κ³  μžˆμŠ΅λ‹ˆκΉŒ? 그것은 당신을 μœ„ν•΄ μž‘λ™ν•©λ‹ˆκΉŒ?

μŠ¬ν”„κ²Œλ„ v1.9.4μ—μ„œλ„ λ™μΌν•œ 일이 λ°œμƒν•©λ‹ˆλ‹€.

λ‚΄κ°€ μ—¬κΈ°μ„œν•˜λ €λŠ” 것은 주어진 λΆ€λͺ¨ uidλ₯Ό 가진 λͺ¨λ“  ν¬λ“œλ₯Ό μ–»λŠ” κ²ƒμž…λ‹ˆλ‹€ ...

$ kubectl get pod --field-selector='metadata.ownerReferences[*].uid=d83a23e1-37ba-11e8-bccf-0a5d7950f698'
Error from server (BadRequest): Unable to find "pods" that match label selector "", field selector "ownerReferences[*].uid=d83a23e1-37ba-11e8-bccf-0a5d7950f698": field label not supported: ownerReferences[*].uid

이 κΈ°λŠ₯을 μ• νƒ€κ²Œ 기닀리고 μžˆμŠ΅λ‹ˆλ‹€ β€’α΄—β€’

--field-selector='metadata.ownerReferences[ ].uid=d83a23e1-37ba-11e8-bccf-0a5d7950f698'ν•„λ“œ λ ˆμ΄λΈ”μ΄ μ§€μ›λ˜μ§€ μ•ŠμŒ: ownerReferences[ ].uid

이 ν•„ν„° λ¬Έμžμ—΄μ€ μ§€μ›λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

ν¬λ“œμ˜ 경우 "metadata.name", "metadata.namespace", "spec.nodeName", "spec.restartPolicy", "spec.schedulerName", status.phase", "status.podIP", "status.nominatedNodeName"만 , "sepc.nodeName"이 μ§€μ›λ©λ‹ˆλ‹€.

@migueleliasweb κ·€ν•˜μ˜ κ²½μš°μ— ν¬λ“œλ₯Ό μ •λ¦¬ν•˜λ €λ©΄ jq λ₯Ό μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

$ kubectl get pod -o json | jq '.items | map(select(.metadata.ownerReferences[] | .uid=="d83a23e1-37ba-11e8-bccf-0a5d7950f698"))'

λ˜ν•œ kubectl의 JSONPath 지원 을 μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

@dixudx κ°μ‚¬ν•©λ‹ˆλ‹€. ν•˜μ§€λ§Œ 쑰금 더 잘 μ΄ν•΄ν•˜κ² μŠ΅λ‹ˆλ‹€. 수천 개의 ν¬λ“œκ°€ μžˆλŠ” ν΄λŸ¬μŠ€ν„°μ—μ„œ 이 쿼리λ₯Ό μ‹€ν–‰ν•˜λŠ” 경우:

  • APIServerλŠ” ETCDμ—μ„œ λͺ¨λ‘ κ°€μ Έμ˜€κ³  λ©”λͺ¨λ¦¬ λ‚΄ 필터링을 μ μš©ν•©λ‹ˆκΉŒ?
  • μ•„λ‹ˆλ©΄ λ‚΄ kubectl이 λͺ¨λ“  ν¬λ“œλ₯Ό μˆ˜μ‹ ν•˜κ³  ν•„ν„°λ₯Ό 둜컬둜 μ μš©ν•©λ‹ˆκΉŒ?
  • μ•„λ‹ˆλ©΄ ETCD λ‚΄λΆ€μ—μ„œ 필터링이 λ°œμƒν•©λ‹ˆκΉŒ? λ”°λΌμ„œ ν•„ν„°λ§λœ 결과만 λ°˜ν™˜λ©λ‹ˆκΉŒ?

APIServerλŠ” ETCDμ—μ„œ λͺ¨λ‘ κ°€μ Έμ˜€κ³  λ©”λͺ¨λ¦¬ λ‚΄ 필터링을 μ μš©ν•©λ‹ˆκΉŒ?
μ•„λ‹ˆλ©΄ λ‚΄ kubectl이 λͺ¨λ“  ν¬λ“œλ₯Ό μˆ˜μ‹ ν•˜κ³  ν•„ν„°λ₯Ό λ‘œμ»¬μ— μ μš©ν•©λ‹ˆκΉŒ?
μ•„λ‹ˆλ©΄ ETCD λ‚΄λΆ€μ—μ„œ 필터링이 λ°œμƒν•©λ‹ˆκΉŒ? λ”°λΌμ„œ ν•„ν„°λ§λœ 결과만 λ°˜ν™˜λ©λ‹ˆκΉŒ?

@migueleliasweb kubectl 을 μ‚¬μš©ν•  λ•Œ --field-selector κ°€ λ°œν–‰λ˜λ©΄ 필터링은 apiserver의 μΊμ‹œμ— μžˆμŠ΅λ‹ˆλ‹€. APIServerλŠ” 필터링 없이 λͺ¨λ“  객체(주어진 μœ ν˜•μ˜)λ₯Ό κ°μ‹œν•˜λ©΄μ„œ etcd에 λŒ€ν•΄ 단일 κ°μ‹œλ₯Ό μ—½λ‹ˆλ‹€. etcdμ—μ„œ μ „λ‹¬λœ λ³€κ²½ 사항은 apiserver의 μΊμ‹œμ— μ €μž₯λ©λ‹ˆλ‹€.

--sort-by 의 경우 필터링은 kubectl ν΄λΌμ΄μ–ΈνŠΈ μΈ‘μ—μ„œ μ΄λ£¨μ–΄μ§‘λ‹ˆλ‹€.

이것은 kubectl get 와 ν•¨κ»˜ 잘 μž‘λ™ν•˜μ§€λ§Œ delete 및 describe 에도 μ μš©ν•  수 μžˆλ‹€λ©΄ 쒋을 κ²ƒμž…λ‹ˆλ‹€.

90일 λ™μ•ˆ μ‚¬μš©ν•˜μ§€ μ•ŠμœΌλ©΄ λ¬Έμ œκ°€ λΆ€μ‹€ν•΄μ§‘λ‹ˆλ‹€.
/remove-lifecycle stale λ₯Ό μ‚¬μš©ν•˜μ—¬ 문제λ₯Ό μ΅œμ‹ μœΌλ‘œ ν‘œμ‹œν•©λ‹ˆλ‹€.
λΆ€μ‹€ λ¬Έμ œλŠ” μΆ”κ°€λ‘œ 30일 λ™μ•ˆ μ‚¬μš©ν•˜μ§€ μ•ŠμœΌλ©΄ 썩고 κ²°κ΅­ λ‹«νž™λ‹ˆλ‹€.

이 문제λ₯Ό μ§€κΈˆ μ’…λ£Œν•˜λŠ” 것이 μ•ˆμ „ν•˜λ‹€λ©΄ /close 둜 μ’…λ£Œν•˜μ‹­μ‹œμ˜€.

sig-testing, kubernetes/test-infra 및/λ˜λŠ” fejta 에 ν”Όλ“œλ°±μ„ λ³΄λ‚΄μ‹­μ‹œμ˜€.
/수λͺ… μ£ΌκΈ° λΆ€μ‹€

/remove-lifecycle λΆ€μ‹€

kubectl get po --all-namespaces | grep -vE '1/1|2/2|3/3' λ₯Ό μ‚¬μš©ν•˜μ—¬ μ€€λΉ„λ˜μ§€ μ•Šμ€ λͺ¨λ“  ν¬λ“œλ₯Ό λ‚˜μ—΄ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.

IMHO 이것은 λ‹¨μˆœν•œ κΈ°λŠ₯ 이상이며 거의 ν•„μˆ˜μž…λ‹ˆλ‹€. --field-selector=status.phase!=Running 에 λ‚˜μ—΄λ˜μ§€ μ•Šμ€ CrashBackoffLoop에 μžˆλŠ” ν¬λ“œλ₯Ό κ°€μ§ˆ 수 μžˆλ‹€λŠ” 사싀은 전체 field-selector λ₯Ό 맀우 μ“Έλͺ¨ μ—†κ²Œ λ§Œλ“­λ‹ˆλ‹€. json ꡬ문 뢄석에 μ˜μ‘΄ν•˜μ§€ μ•Šκ³  λ¬Έμ œκ°€ μžˆλŠ” ν¬λ“œ λͺ©λ‘μ„ μ‰½κ²Œ 얻을 수 μžˆλŠ” 방법이 μžˆμ–΄μ•Ό ν•©λ‹ˆλ‹€.

PowerShell을 μ‚¬μš©ν•˜λ©΄ λ‹€μŒκ³Ό 같이 ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

λͺ¨λ“  μƒνƒœλ₯Ό λ°˜ν™˜ν•˜λ €λ©΄

Get-PodStatus | ft -autosize

image

ν•„ν„°λ§ν•˜λ €λ©΄

Get-PodStatus | where { ($_.status -eq "Running") -and ($_.state -eq "ready") } | ft -AutoSize

참고둜:

kubectl get pods --field-selector=status.phase!=Succeeded

버전 217λΆ€ν„° 기본적으둜 ν¬ν•¨λœ κ²ƒμœΌλ‘œ λ³΄μ΄λŠ” μ™„λ£Œλœ μž‘μ—…μ„ ν•„ν„°λ§ν•˜λŠ” 데 μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

μ•„λ‹ˆλ‹€:

kubectl get pods --field-selector=status.phase!=Completed STATUSκ°€ 'Completed'둜 ν‘œμ‹œλœλ‹€λŠ” 점을 κ³ λ €ν•  λ•Œ 더 ν•©λ¦¬μ μž…λ‹ˆλ‹€.

이것이 status.phaseμ—μ„œ μž‘λ™ν•΄μ•Ό ν•©λ‹ˆκΉŒ? λ…Έλ“œλ₯Ό μ’…λ£Œν–ˆκ³  λͺ¨λ“  ν¬λ“œκ°€ μ•Œ 수 μ—†μŒ λ˜λŠ” NodeLost둜 ν‘œμ‹œλ˜μ§€λ§Œ ν•„λ“œ 선택기에 μ˜ν•΄ ν•„ν„°λ§λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

$ kubectl get pods --field-selector=status.phase=Running --all-namespaces
NAMESPACE     NAME                                          READY   STATUS     RESTARTS   AGE
kube-system   coredns-78fcdf6894-9gc7n                      1/1     Running    0          1h
kube-system   coredns-78fcdf6894-lt58z                      1/1     Running    0          1h
kube-system   etcd-i-0564e0652e0560ac4                      1/1     Unknown    0          1h
kube-system   etcd-i-0af8bbf22a66edc1d                      1/1     Running    0          1h
kube-system   etcd-i-0e780f1e91f5a7116                      1/1     Running    0          1h
kube-system   kube-apiserver-i-0564e0652e0560ac4            1/1     Unknown    0          1h
kube-system   kube-apiserver-i-0af8bbf22a66edc1d            1/1     Running    1          1h
kube-system   kube-apiserver-i-0e780f1e91f5a7116            1/1     Running    1          1h
kube-system   kube-controller-manager-i-0564e0652e0560ac4   1/1     Unknown    1          1h
kube-system   kube-controller-manager-i-0af8bbf22a66edc1d   1/1     Running    0          1h
kube-system   kube-controller-manager-i-0e780f1e91f5a7116   1/1     Running    0          1h
kube-system   kube-router-9kkxh                             1/1     NodeLost   0          1h
kube-system   kube-router-dj9sp                             1/1     Running    0          1h
kube-system   kube-router-n4zzw                             1/1     Running    0          1h
kube-system   kube-scheduler-i-0564e0652e0560ac4            1/1     Unknown    0          1h
kube-system   kube-scheduler-i-0af8bbf22a66edc1d            1/1     Running    0          1h
kube-system   kube-scheduler-i-0e780f1e91f5a7116            1/1     Running    0          1h
kube-system   tiller-deploy-7678f78996-6t84j                1/1     Running    0          1h

μ‹€ν–‰ 쀑이 μ•„λ‹Œ ν¬λ“œκ°€ 이 쿼리와 ν•¨κ»˜ λ‚˜μ—΄λ  κ²ƒμœΌλ‘œ κΈ°λŒ€ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€...

이 ν•„λ“œ 선택기가 λ‹€λ₯Έ 개체 μœ ν˜•μ—μ„œλ„ μž‘λ™ν•΄μ•Ό ν•©λ‹ˆκΉŒ? pvcμ—μ„œλŠ” μ•ˆλ˜λŠ” 것 κ°™μŠ΅λ‹ˆλ‹€.

$ kubectl get pvc --field-selector=status.phase!=Bound
Error from server (BadRequest): Unable to find {"" "v1" "persistentvolumeclaims"} that match label selector "", field selector "status.phase!=Bound": "status.phase" is not a known field selector: only "metadata.name", "metadata.namespace"

이 ν•„λ“œ 선택기 ꡬ문은 μ—¬μ „νžˆ β€‹β€‹ν˜Όλž€μŠ€λŸ½μŠ΅λ‹ˆλ‹€. μ–΄λ–€ 이유둜 "제거됨" μƒνƒœλ₯Ό κΈμ •μ μœΌλ‘œ 필터링할 수 μ—†μŠ΅λ‹ˆλ‹€(μ‹€ν–‰ 쀑이 μ•„λ‹Œ κ²½μš°μ—λ§Œ ν‘œμ‹œλ  수 있음). λ‚΄κ°€ μ—¬κΈ°μ„œ 뭘 잘λͺ»ν–ˆμ–΄?

https://kubernetes.io/docs/concepts/overview/working-with-objects/field-selectors/ λ₯Ό μ½μ—ˆμ§€λ§Œ μ—¬μ „νžˆ μž‘λ™ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

$ kubectl get po --field-selector status.phase!=Running
NAME                        READY     STATUS      RESTARTS   AGE
admin-55d76dc598-sr78x      0/2       Evicted     0          22d
admin-57f6fcc898-df82r      0/2       Evicted     0          17d
admin-57f6fcc898-dt5kb      0/2       Evicted     0          18d
admin-57f6fcc898-jqp9j      0/2       Evicted     0          17d
admin-57f6fcc898-plxhr      0/2       Evicted     0          17d
admin-57f6fcc898-x5kdz      0/2       Evicted     0          17d
admin-57f6fcc898-zgsr7      0/2       Evicted     0          18d
admin-6489584498-t5fzf      0/2       Evicted     0          28d
admin-6b7f5dbb5d-8h9kt      0/2       Evicted     0          9d
admin-6b7f5dbb5d-k57sk      0/2       Evicted     0          9d
admin-6b7f5dbb5d-q7h7q      0/2       Evicted     0          7d
admin-6b7f5dbb5d-sr8j6      0/2       Evicted     0          9d
admin-7454f9b9f7-wrgdk      0/2       Evicted     0          38d
admin-76749dd59d-tj48m      0/2       Evicted     0          22d
admin-78648ccb66-qxgjp      0/2       Evicted     0          17d
admin-795c79f58f-dtcnb      0/2       Evicted     0          25d
admin-7d58ff6cfd-5pt9p      0/2       Evicted     0          4d
admin-7d58ff6cfd-99pzq      0/2       Evicted     0          3d
admin-7d58ff6cfd-9cbjd      0/2       Evicted     0          3d
admin-b5d6d84d6-5q67l       0/2       Evicted     0          12d
admin-b5d6d84d6-fh2ck       0/2       Evicted     0          13d
admin-b5d6d84d6-r4d8b       0/2       Evicted     0          14d
admin-c56558f95-bxxq5       0/2       Evicted     0          7d
api-5445fd6b8b-4jts8        0/2       Evicted     0          3d
api-5445fd6b8b-5b2jp        0/2       Evicted     0          2d
api-5445fd6b8b-7km72        0/2       Evicted     0          4d
api-5445fd6b8b-8tsgf        0/2       Evicted     0          4d
api-5445fd6b8b-ppnxp        0/2       Evicted     0          2d
api-5445fd6b8b-qqnxr        0/2       Evicted     0          2d
api-5445fd6b8b-z77wp        0/2       Evicted     0          2d
api-5445fd6b8b-zjcmg        0/2       Evicted     0          2d
api-5b6647d48b-frbhj        0/2       Evicted     0          9d
api-9459cb775-5cz7f         0/2       Evicted     0          1d

$ kubectl get po --field-selector status.phase=Evicted
No resources found.
$ kubectl get po --field-selector status.phase==Evicted
No resources found.
$ kubectl get po --field-selector status.phase=="Evicted"
No resources found.
$ kubectl get po --field-selector status.phase="Evicted"
No resources found.

$ kubectl version
Client Version: version.Info{Major:"1", Minor:"10", GitVersion:"v1.10.7", GitCommit:"0c38c362511b20a098d7cd855f1314dad92c2780", GitTreeState:"clean", BuildDate:"2018-08-20T10:09:03Z", GoVersion:"go1.9.3", Compiler:"gc", Platform:"darwin/amd64"}
Server Version: version.Info{Major:"1", Minor:"10+", GitVersion:"v1.10.6-gke.11", GitCommit:"42df8ec7aef509caba40b6178616dcffca9d7355", GitTreeState:"clean", BuildDate:"2018-11-08T20:06:00Z", GoVersion:"go1.9.3b4", Compiler:"gc", Platform:"linux/amd64"}

μ€€λΉ„ μƒνƒœ 확인을 ν†΅κ³Όν•œ(λ˜λŠ” ν†΅κ³Όν•˜μ§€ λͺ»ν•œ) Running Podλ₯Ό λ‚˜μ—΄ν•˜λŠ” 방법이 μžˆμ–΄μ•Ό ν•©λ‹ˆλ‹€.

λ˜ν•œ Ready μ—΄μ˜ 값이 μ˜λ―Έν•˜λŠ” λ°”λŠ” 어디에 λ¬Έμ„œν™”λ˜μ–΄ μžˆμŠ΅λ‹ˆκΉŒ? (0/1, 1/1)

@ye Evictedκ°€ status.phase 값이 μ•„λ‹ˆκΈ° λ•Œλ¬Έμ— μž‘λ™ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/

ν‡΄κ±°λŠ” μƒνƒœμ— 속함' 이유: https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.13/#podstatus -v1-core

λΆˆν–‰νžˆλ„ ν˜„μž¬ ν•„λ“œ μ„ νƒκΈ°λ‘œ 쿼리할 수 μ—†μŠ΅λ‹ˆλ‹€.

pod-lifecycle λ¬Έμ„œμ— λ”°λ₯Έ status.phaseμ΄λ―€λ‘œ CrashLoopBackOff κ°€ ν¬ν•¨λ˜μ–΄μ„œλŠ” μ•ˆ λ©λ‹ˆκΉŒ?

17:18:13 $ kubectl get pods --field-selector=status.phase!=Running
No resources found.
17:19:32 $ kubectl get pods|grep CrashLoopBackOff
kubernetes-dashboard-head-57b9585588-lvr5t               0/1     CrashLoopBackOff   2292       8d
17:22:45 $ kubectl version
Client Version: version.Info{Major:"1", Minor:"13", GitVersion:"v1.13.3", GitCommit:"721bfa751924da8d1680787490c54b9179b1fed0", GitTreeState:"clean", BuildDate:"2019-02-01T20:08:12Z", GoVersion:"go1.11.5", Compiler:"gc", Platform:"darwin/amd64"}
Server Version: version.Info{Major:"1", Minor:"13", GitVersion:"v1.13.2", GitCommit:"cff46ab41ff0bb44d8584413b598ad8360ec1def", GitTreeState:"clean", BuildDate:"2019-01-10T23:28:14Z", GoVersion:"go1.11.4", Compiler:"gc", Platform:"linux/amd64"}

90일 λ™μ•ˆ μ‚¬μš©ν•˜μ§€ μ•ŠμœΌλ©΄ λ¬Έμ œκ°€ λΆ€μ‹€ν•΄μ§‘λ‹ˆλ‹€.
/remove-lifecycle stale λ₯Ό μ‚¬μš©ν•˜μ—¬ 문제λ₯Ό μ΅œμ‹ μœΌλ‘œ ν‘œμ‹œν•©λ‹ˆλ‹€.
λΆ€μ‹€ λ¬Έμ œλŠ” μΆ”κ°€λ‘œ 30일 λ™μ•ˆ μ‚¬μš©ν•˜μ§€ μ•ŠμœΌλ©΄ 썩고 κ²°κ΅­ λ‹«νž™λ‹ˆλ‹€.

이 문제λ₯Ό μ§€κΈˆ μ’…λ£Œν•˜λŠ” 것이 μ•ˆμ „ν•˜λ‹€λ©΄ /close 둜 μ’…λ£Œν•˜μ‹­μ‹œμ˜€.

sig-testing, kubernetes/test-infra 및/λ˜λŠ” fejta 에 ν”Όλ“œλ°±μ„ λ³΄λ‚΄μ‹­μ‹œμ˜€.
/수λͺ… μ£ΌκΈ° λΆ€μ‹€

/remove-lifecycle λΆ€μ‹€

μŠ€ν‹Έκ³Ό 이슈, 2λ…„ ν›„

λ‚˜λŠ” 이것이 ν•΄κ²°μ±… 없이 μ˜€λž«λ™μ•ˆ 주변에 μžˆμ—ˆλ‹€λŠ” 것을 믿을 수 μ—†μŠ΅λ‹ˆλ‹€.

λ‚˜λŠ” kubectl get pods --all-namespaces | grep -Ev '([0-9]+)/\1' λ₯Ό μ‚¬μš©ν•˜κ³  μžˆλ‹€

이것은 jsonpath 좜λ ₯을 μ‚¬μš©ν•˜μ—¬ kubectl μ—μ„œ 이미 μˆ˜ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

예: Running μƒνƒœμ˜ 각 ν¬λ“œμ˜ namespace 및 name λ₯Ό μΈμ‡„ν•©λ‹ˆλ‹€.

kubectl get pods --all-namespaces -o jsonpath="{range .items[?(@.status.phase == 'Running')]}{.metadata.namespace}{' '}{.metadata.name}{'\n'}{end}"

@albertvaka CrashLoopBackOff κ°€ μžˆλŠ” ν¬λ“œκ°€ 있으면 ν‘œμ‹œλ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

$ kubectl get pods --all-namespaces -o jsonpath="{range .items[?(@.status.phase != 'Running')]}{.metadata.namespace}{' '}{.metadata.name}{'\n'}{end}"
default pod-with-sidecar
my-system glusterfs-brick-0
my-system sticky-scheduler-6f8d74-6mh4q
$ kubectl get pods --all-namespaces | grep -Ev '([0-9]+)/\1'
NAMESPACE       NAME                                        READY     STATUS             RESTARTS   AGE
default         pod-with-sidecar                            1/2       ImagePullBackOff   0          3m
default         pod-with-sidecar2                           1/2       CrashLoopBackOff   4          3m
my-system       glusterfs-brick-0                           0/2       Pending            0          4m
my-system       sticky-scheduler-6f8d74-6mh4q               0/1       ImagePullBackOff   0          9m

λ˜ν•œ kubectl get pods 와 μœ μ‚¬ν•œ 좜λ ₯ ν˜•μ‹μ΄ ν•„μš”ν•©λ‹ˆλ‹€.

μ΄λ ‡κ²Œν•΄λ„ λ„μ›€μ΄λ˜μ§€ μ•Šμ•˜μŠ΅λ‹ˆλ‹€

$ kubectl get pods --field-selector=status.phase!=Running,status.phase!=Succeeded --all-namespaces
NAMESPACE       NAME                                READY     STATUS              RESTARTS   AGE
default         pod-with-sidecar                    0/2       ContainerCreating   0          37s
my-system       glusterfs-brick-0                   0/2       Pending             0          3m
my-system       sticky-scheduler-6f8d74-6mh4q       0/1       ImagePullBackOff    0          7m

@albertvaka CrashLoopBackOff κ°€ μžˆλŠ” ν¬λ“œκ°€ 있으면 ν‘œμ‹œλ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

그게 μš”μ μž…λ‹ˆλ‹€.

λ˜ν•œ kubectl get pods 와 μœ μ‚¬ν•œ 좜λ ₯ ν˜•μ‹μ΄ ν•„μš”ν•©λ‹ˆλ‹€.

jsonpathλ₯Ό μ‚¬μš©ν•˜μ—¬ ν‘œμ‹œν•˜λ €λŠ” 열을 μ‚¬μš©μž μ •μ˜ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

@albertvaka μ—¬κΈ°μ—μ„œ μš”μ μ€ ν•„ν„°μ—μ„œ μ œμ™Έλ˜λŠ” λ‘”ν•œ json 경둜 ꡬ문(CrashLoopBackOff둜 인해 μ–΄μ¨Œλ“  μž‘λ™ν•˜μ§€ μ•Šμ„ 것이라고 생각함)을 μž‘μ„±ν•˜μ§€ μ•Šκ³  μ€€λΉ„λ˜μ§€ μ•Šμ€ λͺ¨λ“  ν¬λ“œλ₯Ό 얻을 수 μžˆλŠ” κ°„λ‹¨ν•œ 방법이 μžˆμ–΄μ•Ό ν•œλ‹€λŠ” κ²ƒμž…λ‹ˆλ‹€. . CrashLoopBackOff μƒνƒœμ˜ ν¬λ“œκ°€ kubectl get pods --field-selector=status.phase!=μ‹€ν–‰κ³Ό 같은 μΏΌλ¦¬μ—μ„œ μ œμ™Έλœλ‹€λŠ” 사싀은 κ½€ κΈ°μ΄ν•©λ‹ˆλ‹€. μ™œ μš°λ¦¬λŠ” kubectl get pods --not-ready λ˜λŠ” κ°„λ‹¨ν•œ 것과 같은 κ°„λ‹¨ν•œ 것을 κ°€μ§ˆ 수 μ—†μŠ΅λ‹ˆλ‹€.

μ—¬μ „νžˆ λ¬Έμ œμž…λ‹ˆλ‹€. "μ‹€ν–‰ 쀑인" ν¬λ“œλ₯Ό 보기 μœ„ν•΄ 이 μž‘μ—…μ„ μˆ˜ν–‰ν•˜λŠ” 데 λ™μ˜ν•©λ‹ˆλ‹€.
kubectl get -n kube-system pods -lname=tiller --field-selector=status.phase=Running NAME READY STATUS RESTARTS AGE tiller-deploy-55c564dc54-2lfpt 0/1 Running 0 71m
λ˜ν•œ μ€€λΉ„λ˜μ§€ μ•Šμ€ μ»¨ν…Œμ΄λ„ˆλ₯Ό λ°˜ν™˜ν•˜κΈ° μœ„ν•΄ λ‹€μŒκ³Ό 같은 μž‘μ—…μ„ μˆ˜ν–‰ν•  수 μžˆμ–΄μ•Ό ν•©λ‹ˆλ‹€.
kubectl get -n kube-system pods -lname=tiller --field-selector=status.containerStatuses[*].ready!=true

90일 λ™μ•ˆ μ‚¬μš©ν•˜μ§€ μ•ŠμœΌλ©΄ λ¬Έμ œκ°€ λΆ€μ‹€ν•΄μ§‘λ‹ˆλ‹€.
/remove-lifecycle stale λ₯Ό μ‚¬μš©ν•˜μ—¬ 문제λ₯Ό μ΅œμ‹ μœΌλ‘œ ν‘œμ‹œν•©λ‹ˆλ‹€.
λΆ€μ‹€ λ¬Έμ œλŠ” μΆ”κ°€λ‘œ 30일 λ™μ•ˆ μ‚¬μš©ν•˜μ§€ μ•ŠμœΌλ©΄ 썩고 κ²°κ΅­ λ‹«νž™λ‹ˆλ‹€.

이 문제λ₯Ό μ§€κΈˆ μ’…λ£Œν•˜λŠ” 것이 μ•ˆμ „ν•˜λ‹€λ©΄ /close 둜 μ’…λ£Œν•˜μ‹­μ‹œμ˜€.

sig-testing, kubernetes/test-infra 및/λ˜λŠ” fejta 에 ν”Όλ“œλ°±μ„ λ³΄λ‚΄μ‹­μ‹œμ˜€.
/수λͺ… μ£ΌκΈ° λΆ€μ‹€

/remove-lifecycle λΆ€μ‹€

kubectl get po --all-namespaces|grep -v Running 이것은 μ‹€ν–‰λ˜μ§€ μ•ŠλŠ” ν¬λ“œλ₯Ό ν•„ν„°λ§ν•˜λŠ” 데 도움이 될 수 μžˆμŠ΅λ‹ˆλ‹€.

μ€€λΉ„ μƒνƒœ(μ™„μ „νžˆ 쀀비됨)둜 ν¬λ“œλ₯Ό 필터링할 수 있기λ₯Ό μ›ν–ˆμœΌλ©° κ°€λŠ₯ν•œ λ‹΅λ³€κ³Ό ν•¨κ»˜ 여기에 StackOverflow 질문 을 κ²Œμ‹œν–ˆμŠ΅λ‹ˆλ‹€(μ €μ—κ²Œ νš¨κ³Όμ μž„).

90일 λ™μ•ˆ μ‚¬μš©ν•˜μ§€ μ•ŠμœΌλ©΄ λ¬Έμ œκ°€ λΆ€μ‹€ν•΄μ§‘λ‹ˆλ‹€.
/remove-lifecycle stale λ₯Ό μ‚¬μš©ν•˜μ—¬ 문제λ₯Ό μ΅œμ‹ μœΌλ‘œ ν‘œμ‹œν•©λ‹ˆλ‹€.
λΆ€μ‹€ λ¬Έμ œλŠ” μΆ”κ°€λ‘œ 30일 λ™μ•ˆ μ‚¬μš©ν•˜μ§€ μ•ŠμœΌλ©΄ 썩고 κ²°κ΅­ λ‹«νž™λ‹ˆλ‹€.

이 문제λ₯Ό μ§€κΈˆ μ’…λ£Œν•˜λŠ” 것이 μ•ˆμ „ν•˜λ‹€λ©΄ /close 둜 μ’…λ£Œν•˜μ‹­μ‹œμ˜€.

sig-testing, kubernetes/test-infra 및/λ˜λŠ” fejta 에 ν”Όλ“œλ°±μ„ λ³΄λ‚΄μ‹­μ‹œμ˜€.
/수λͺ… μ£ΌκΈ° λΆ€μ‹€

/remove-lifecycle λΆ€μ‹€

여기에 λ‚΄ λͺ©μ†Œλ¦¬λ₯Ό μΆ”κ°€ν•˜λ©΄ kubectl get pods --ready λ˜λŠ” 이와 μœ μ‚¬ν•œ μž‘μ—…μ„ μˆ˜ν–‰ν•  수 μžˆλ‹€λŠ” 점에 λ™μ˜ν•©λ‹ˆλ‹€. λͺ¨λ“  ν¬λ“œκ°€ 쀀비될 λ•ŒκΉŒμ§€ λŒ€κΈ°ν•˜κ³ (그렇지 μ•ŠμœΌλ©΄ μ‹œκ°„ 초과 ν›„ μ‹€νŒ¨) grep ...에 μ˜μ‘΄ν•΄μ•Ό ν•˜λŠ” νŒŒμ΄ν”„λΌμΈμ— 단계λ₯Ό μΆ”κ°€ν•˜κ³  μ‹Άμ—ˆμŠ΅λ‹ˆλ‹€ kubectl λŠ” 항상 λ³€κ²½λ©λ‹ˆλ‹€. ν¬λ“œμ˜ μƒνƒœλ₯Ό 더 μ§μ ‘μ μœΌλ‘œ μΏΌλ¦¬ν•˜λŠ” 것이 훨씬 λ‚«μŠ΅λ‹ˆλ‹€.

@luvkrai κ°€ λ§ν–ˆλ“―μ΄ CrashLoopBackOff μƒνƒœμ˜ μ»¨ν…Œμ΄λ„ˆλ₯Ό 찾으렀면 grep을 μ‚¬μš©ν•΄μ•Ό ν•©λ‹ˆλ‹€. μ§€κΈˆ ν•„ν„°λ§ν•˜λŠ” 방법은 λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€. λ‹€λ₯Έ λ…Έλ“œλ³΄λ‹€ 더 λ§Žμ€ 문제λ₯Ό μΌμœΌν‚€λŠ” λ…Έλ“œκ°€ μžˆλŠ”μ§€ ν‘œμ‹œν•˜κΈ° μœ„ν•΄ nodeNameλ³„λ‘œ μ •λ ¬ν•©λ‹ˆλ‹€. μ–΄λ–»κ²Œ 보면 ꡉμž₯히 μ–΄λ €μš΄ 문제인 것 κ°™μŠ΅λ‹ˆλ‹€. ν₯λ―Έλ‘­κ²Œλ„ "STATUS" μ—΄μ—μ„œ μ΄λŸ¬ν•œ λͺ¨λ“  좜λ ₯을 μΌκ΄€λ˜κ²Œ 얻을 수 μžˆμ§€λ§Œ μΆ”κ°€ 도ꡬ μ—†μ΄λŠ” ν•΄λ‹Ή 열을 필터링할 수 μ—†μŠ΅λ‹ˆλ‹€.

oc get pods --all-namespaces -o wide --sort-by=.spec.nodeName | grep -Ev "(Running|Completed)"

Golang에 λŒ€ν•œ 지식이 더 λ§Žμ•˜λ‹€λ©΄ "STATUS" 열을 κ΅¬μΆ•ν•˜κΈ° μœ„ν•΄ 이것이 μ–΄λ–»κ²Œ λ‹¬μ„±λ˜μ—ˆλŠ”μ§€ μ—¬κΈ°μ—μ„œ λͺ…ν™•ν•˜κ³  더 λ‚˜μ€ μ†”λ£¨μ…˜μœΌλ‘œ μ΄μ–΄μ§ˆ 수 μžˆλ‹€κ³  μƒκ°ν•©λ‹ˆλ‹€.
https://github.com/kubernetes/kubectl/blob/7daf5bcdb45a24640236b361b86c056282ddcf80/pkg/describe/describe.go#L679

@alexburlton-sonocent grep의 깨지기 μ‰¬μš΄ 츑면을 ν”Όν•˜κΈ° μœ„ν•΄ --no-headers --output custom-columns= μ˜΅μ…˜μ„ μ‚¬μš©ν•˜μ—¬ μ›ν•˜λŠ” 열을 지정할 수 μžˆμ§€λ§Œ STATUS 열에 μž…λ ₯ν•œ 전체 정보와 λ™μΌν•œ λ¬Έμ œκ°€ λ°œμƒν•  수 μžˆμŠ΅λ‹ˆλ‹€. ν¬λ“œ μ •μ˜μ—μ„œ μ•ˆμ •μ μœΌλ‘œ 찾을 수 μ—†μŠ΅λ‹ˆλ‹€.

λ‹€μŒμ€ μ™„μ „νžˆ μ‹€ν–‰λ˜μ§€ μ•ŠλŠ” λͺ¨λ“  ν¬λ“œλ₯Ό μ°ΎλŠ” 데 μ‚¬μš©ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€(예: 일뢀 μ»¨ν…Œμ΄λ„ˆκ°€ μ‹€νŒ¨ν•¨)

kubectl get po --all-namespaces | gawk 'match($3, /([0-9])+\/([0-9])+/, a) {if (a[1] < a[2] && $4 != "Completed") print $0}'
NAMESPACE        NAME                               READY   STATUS      RESTARTS   AGE
blah             blah-6d46d95b96-7wsh6              2/4     Running     0          33h

90일 λ™μ•ˆ μ‚¬μš©ν•˜μ§€ μ•ŠμœΌλ©΄ λ¬Έμ œκ°€ λΆ€μ‹€ν•΄μ§‘λ‹ˆλ‹€.
/remove-lifecycle stale λ₯Ό μ‚¬μš©ν•˜μ—¬ 문제λ₯Ό μ΅œμ‹ μœΌλ‘œ ν‘œμ‹œν•©λ‹ˆλ‹€.
λΆ€μ‹€ λ¬Έμ œλŠ” μΆ”κ°€λ‘œ 30일 λ™μ•ˆ μ‚¬μš©ν•˜μ§€ μ•ŠμœΌλ©΄ 썩고 κ²°κ΅­ λ‹«νž™λ‹ˆλ‹€.

이 문제λ₯Ό μ§€κΈˆ μ’…λ£Œν•˜λŠ” 것이 μ•ˆμ „ν•˜λ‹€λ©΄ /close 둜 μ’…λ£Œν•˜μ‹­μ‹œμ˜€.

sig-testing, kubernetes/test-infra 및/λ˜λŠ” fejta 에 ν”Όλ“œλ°±μ„ λ³΄λ‚΄μ‹­μ‹œμ˜€.
/수λͺ… μ£ΌκΈ° λΆ€μ‹€

/remove-lifecycle λΆ€μ‹€

μ—¬κΈ°λ₯Ό μ°Έμ‘°ν•˜μ‹­μ‹œμ˜€

이 νŽ˜μ΄μ§€κ°€ 도움이 λ˜μ—ˆλ‚˜μš”?
0 / 5 - 0 λ“±κΈ‰