#Query1
kubectl get pod -o jsonpath='{$.items[*].metadata.name}{“\n”}’
#result
busybox-1 busybox-2
#Query2
kubectl get pod -o jsonpath='{$.items[*].spec.containers[?(@.image == "busybox:latest")].name}{"\n"}’
#result
busybox-1 busybox-2
결과는 같지만, Query1/Query2가 가져오는 key:value다르다.
배열의 모든 값 “*” (wild card),조건식 “?()” (='{$.items[*].spec.containers[?(@.image == "busybox:latest")].) 은 다음에..
controlplane ~ ➜ kubectl drain node01 --ignore-daemonsets
node/node01 cordoned
error: unable to drain node "node01" due to error:cannot delete Pods declare no controller (use --force to override): default/hr-app, continuing command...
There are pending nodes to be drained:
node01
cannot delete Pods declare no controller (use --force to override): default/test-app
There are pending nodes to be drained: node01 cannot delete Pods declare no controller (use --force to override): default/hr-app
- 원인 : Drain을 하기 위해선 1개 이상의 Replicaset이 있어야 함.
즉 deploy,replicaset 으로 replica를 1개 이상 유지 시킬 object가 필요한것이다.
- k8s는 tls 기반으로 각 component에 엑세스를 하기때문에, 새로 추가된 멤버(개발자)에게 k8s 접근하기 위해선 ceriticate을 필요함.
□ 순서
1.개인key, csr파일 생성
2. k8s에 csr object 생성(.yaml작성)
3. k8s에 csr승인
1. 개인key,csr 파일 생성
- key 생성
# key 생성
[node2 pki]$ openssl genrsa -out tam.key 2048
Generating RSA private key, 2048 bit long modulus
...................+++
.....+++
e is 65537 (0x10001)
### vi로 yaml 파일 작성vitam-csr.yamlapiVersion:certificates.k8s.io/v1kind:CertificateSigningRequestmetadata:name:tamspec:request:LS0tLS1CRUdJTiBDRVJUSUZJQ0FURSBSRVFVRVNULS0tLS0KTUlJQ1V6Q0NBVHNDQVFBd0RqRU1NQW9<중략>signerName:kubernetes.io/kube-apiserver-clientexpirationSeconds:86400# one dayusages:-clientauth
3. k8s에csr승인
ex)
## create csr
[node2 ~]$ kubectl apply -f tam-csr.yaml
certificatesigningrequest.certificates.k8s.io/tam created
## 생성된 csr 확인
[node2 ~]$ kubectl get csr
NAME AGE SIGNERNAME REQUESTOR CONDITION
tam 35s kubernetes.io/kube-apiserver-client kubernetes-admin Pending
## csr 승인
[node2 ~]$ kubectl certificate approve tam
certificatesigningrequest.certificates.k8s.io/tam approved
Failed to get system container stats for "/system.slice/kubelet.service": failed to get cgroup stats for "/system.slice/kubelet.service": failed to get container info for "/system.slice/kubelet.service": unknown container "/system.slice/kubelet.service"
- 발생이벤트
kubelet:E0300 20:45:31.395023 0532 kubelet_volumes.go: 154] orphaned pod "23fww56c-2012-45xv-k124-452395be2792" found, but volume paths are still present on disk.
#상세조회
kurnalctl -f -u kubelet
- 원인 : Pod가 삭제된 상태에서 node 이슈(hang,shutdown)으로 node에서 pod 디렉토리가 삭제되지 않음
- 조치 : Pod가 사용하던 디렉토리 삭제해주면 됨
. 삭제된 Pod의 디렉토리조회 : ls -l /var/lib/kubelet/pods/23fww56c-2012-45xv-k124-452395be2792