보통 kubernetes pod을 재시작하려면 deployment 파일을 이용하는 경우가 많지만..
설정 파일 없이 확인하는 방법도 있다.
먼저 도커 이미지 이름을 얻는다.
아래 커맨ㄷ는 실제 컨테이너의 데타 데이터 이름과 컨테이너의 도커 이미지 이름을 얻는 커맨드이다.
$ kubectl get pods --all-namespaces -o=jsonpath='{range .items[*]}{"\n"}{.metadata.name}{":\t"}{range .spec.containers[*]}{.image}{", "}{end}{end}' |\ sort
ingress-nginx-controller-szb9s: quay.io/kubernetes-ingress-controller/nginx-ingress-controller:0.19.0,
ingress-nginx-controller-ttq2h: quay.io/kubernetes-ingress-controller/nginx-ingress-controller:0.19.0,
jenkins-8498fcb9b5-6n2vm: jenkins/jenkins:lts,
kube-apiserver-dkosv3-jenkins-master-1: gcr.io/google-containers/hyperkube-amd64:v1.11.5,
kube-apiserver-dkosv3-jenkins-master-2: gcr.io/google-containers/hyperkube-amd64:v1.11.5,
kube-apiserver-dkosv3-jenkins-master-3: gcr.io/google-containers/hyperkube-amd64:v1.11.5,
원하는 것은 바로 아래 커맨드이다. 메타데이터와 컨테이너 이름을 얻을 수 있다.
$ kubectl get pods -o=custom-columns=NAME:.metadata.name,CONTAINERS:.spec.containers[*].name
NAME CONTAINERS
jenkins-job-8f24e681-5b83-4f87-b713-69c86deedb22-25gsh-vjh9r jnlp
jenkins-job-914tx-fthwt jnlp
jenkins-8498fcb9b5-6n2vm jenkins
my-release-mysql-65d89bd9c4-txkvn my-release-mysql
재시작을 진행한다. reboot 커맨드가 도커 안에 포함되어 있으면 다음처럼 실행한다.
$ kubectl exec jenkins-8498fcb9b5-6n2vm -c jenkins reboot
만약 다음 에러가 난다면, kill 커맨드를 사용해야 한다.
rpc error: code = 2 desc = oci runtime error: exec failed: container_linux.go:247: starting container process caused "exec: \"reboot\": executable file not found in $PATH"
kubectl exec jenkins-8498fcb9b5-6n2vm -c jenkins -- /bin/sh -c "kill 1"
'Cloud' 카테고리의 다른 글
[docker] 도커 환경을 정리하는 커맨드 (0) | 2019.07.08 |
---|---|
[kubernetes] sidecar proxy 개념 (0) | 2019.03.21 |
kubernetes의 ip를 얻는 kubernetes 커맨드 (0) | 2019.03.19 |
[Kubernetes] 볼륨 삭제 안되는 경우 볼륨에 의존적인 셋을 삭제한다 (0) | 2019.03.15 |
NIFI-인증 (0) | 2019.03.14 |