λ¬΄μ¨ μΌμ΄ μμλμ§ :
νμ¬ μ€λΉλμ§ μμ ν¬λλ₯Ό νμΈνλ κ°λ¨ν λͺ λ Ήμ κ°κ³ μΆμ΅λλ€.
μμνλ μΌ :
λͺ κ°μ§ μ΅μ μ λ³Ό μ μμ΅λλ€.
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'
/μ’ λ₯ κΈ°λ₯
/μκ·Έλ ν΄λ¦½
μ¬κΈ°λ λ§μ°¬κ°μ§μ λλ€. μ€νλμ§ μλ 컨ν μ΄λλ§ λμ΄νκΈ° μν΄ λ³΅μ‘ν ꡬ문μ μ¬μ©νλ κ²μ λλΌμ΄ μΌμ λλ€...
μ΄μμ μΌλ‘λ λ€μκ³Ό κ°μ΄ λ§ν μ μμ΅λλ€.
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'
--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 λ΄λΆμμ νν°λ§μ΄ λ°μν©λκΉ? λ°λΌμ νν°λ§λ κ²°κ³Όλ§ λ°νλ©λκΉ?
@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
νν°λ§νλ €λ©΄
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 λΆμ€
μ¬κΈ°λ₯Ό μ°Έμ‘°νμμμ€
κ°μ₯ μ μ©ν λκΈ
50140μ μ§κΈ μ΄λ¬ν ν¬λλ₯Ό νν°λ§νκΈ° μν΄ μ νλκ·Έ
--field-selector
λ₯Ό μ 곡ν©λλ€./λ«κΈ°