#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)
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