kubectl
Command
Docs
매니페스트
매니페스트로부터 쿠버네티스 오브젝트를 생성
kubectl apply -f [매니페스트 파일명]
매니페스트를 지정하여 API 오브젝트를 제거하는 예
kubectl delete -f [YAML 파일명]
kubectl get pod
STATUS 와 의미
STATUS | 의미와 대책 |
---|---|
ContainerCreating | 이미지를 다운로드 중이거나 컨테이너를 생성하는 중에 있음을 의미한다. 컨피그맵과 시크릿이 마운트되지 않아 컨테이너 생성이 보류된 경우일 수도 있다 |
CrashLoopBackOff | 파드 내의 컨테이너가 종료되어 다음 기동 시까지 대기 상태에 있음을 의미한다. 2회 이상 컨테이너가 종료되면, CrashLoopBackOff 시간 동안 대기하게 된다. 이 상황에서는 컨테이너 내의 프로세스를 재검토할 필요가 있다 |
Pending | 파드 생성 요구를 받았지만 하나 이상의 컨테이너가 생성되지 않은 상태를 의미한다. 리소스 부족 등의 이유로 스케줄이 되지 않은 경우에 해당한다. |
Running | 파드의 모든 컨테이너가 생성되어 실행 중임을 의미한다. |
Terminating | 컨테이너에 종료 요청 시그널을 보낸 후 컨테이너가 종료할 때까지 대기 중임을 의미한다. 유예 시간을 넘겨도 컨테이너가 종료할 수 없는 경우는, 컨테이너를 강제로 종료한다 |
Succeeded | 파드 내 모든 컨테이너가 정상적으로 종료했음을 의미한다. |
Completed | 파드 내 컨테이너가 정상적으로 종료되었음을 의미한다. 파드 내에 복수의 컨테이너가 있는 경우, 첫 번째 컨테이너가 정상 종료(Exit 코드=0) 하면 Completed가 표시된다 |
Error | 컨테이너가 이상 종료 된 경우다. Exit 코드 != 0 인 경우에 이상 종료로 간주한다. 파드 내에 복수의 컨테이너가 있는 경우, 첫 번째 컨테이너가 이상 종료 하면, Error로 표시한다. |
Failed | 파드 내에 적어도 하나의 컨테이너가 이상 종료 했음을 의미한다. |
Unknown | 파드의 상태를 얻을 수 없는 상황을 의미한다 |
kubectl delete pod
- kubectl delete pod 를 실행하면 파드의 종료 처기사 시작된다. 기본 유예시간은 30초다
- kubectl get pod의 status는 Terminating이라고 표시된다.
- 다음 세 가지 작업이 동시에 진행된다.
- 파드의 PreStop hook이 정의되어 있으면, 파드 내에세 호출된다. 유예 시간을 넘어서면 PreStop hook이 실행되고 있어도, 파드 내의 메인 프로세스에서 SIGTERM이 보내지며, 2초 후에 SIGKILL로 강제 종료 된다.
- PreStop hook이 정의되어 있지 않다면, 곧바로 파드 내의 메인 프로세스에 SIGTERM신호가 송신되며 종료 처리가 개시된다.
- 파드가 서비스의 엔드포인트 목록에서 제거되며, 로드밸런서 (kube-proxy 등)의 목록에서도 제거된다. - 유예 시간을 넘어서서 파드 내의 프로세스가 살아 있다면, 파드의 메인 프로세스에 SIGKILL을 보내서 강제로 종료한다.
- 제거 대상인 파드가 표시되지 않게 된다.
kubectl delete --grace-period=초
Command
$ kubectl run hello-world --image=hello-world -it --restart=Never
- kubectl : k8s 클러스터를 조작하기 위해 사용되는 커맨드
- run : 컨테이너 실행을 명령하는 서브 커맨드
- –image=hello-world : 컨테이너의 이미지. 쿠버네티스에서는 파드 단위로 컨테이너가 기동되며 리포지터리명이 생략된 경우에는 도커 허브를 사용
- -it : 도커에서의 -it와 마찬가지로, -i는 키보드를 표준 입력에 연결하고, -t는 유사터미널과 연결하여 대화 모드 설정. 옵션
--restart=Never
인 경우에만 유효하며, 그 외에는 백그라운드로 실행 - –restart=Never : 이 옵션에 따라 파드의 기동 방법 변경. Never는 직접 파드가 기동되며 Always나 OnFailure는 컨트롤러를 통해 파드가 기동
--rm 사용
$ kubectl run hello-world --image=hello-world -it --restart=Never --rm
명령어
커맨드 | 동작 |
---|---|
kubectl cluster-info | k8s 클러스터의 엔드포인트를 표시 |
kubectl get no | k8s 클러스터를 구성하는 노드 목록 표시 |
kubectl run | 파드를 실행 |
kubectl get po | 파드의 목록 출력 |
kubectl delete po | 파드의 이름을 지정해서 삭제 |
kubectl get all | 모든 오브젝트를 출력 |
kubectl logs | 컨터에너 프로세스가 STDOUT이나 STDERR로 출력하는 로그를 표시 |
kubectl get deploy,po | 디플로이먼트와 파드의 목록을 표시 |
kubectl get deploy | 디플로이먼트 목록 표시 |
kubectl delete deploy | 디플로이먼트와 관련 레플리카셋 및 파드를 일괄 삭제 |
kubectl get jobs | 잡의 실행 상태를 출력 |
kubectl create job | 잡 컨트롤러 제어하에서 파드를 실행 |
kubectl create deployment | 디플로이먼트 컨트롤러 제어하에서 파드를 실행 |
kubectl scale | 레플리카 수 변경 |
커맨드 | 동작 |
---|---|
kubectl create -f 파일명 | 파일에 기술된 오브젝트를 생성 |
kubectl delete -f 파일명 | 파일에 기술된 오브젝트를 삭제 |
kubectl apply -f 파일명 | 파일에 기재된 오브젝트가 있으면 변경하고 없으면 생성 |
커맨드 | 동작 |
---|---|
kubectl scale | 레플리카 값을 변경 |
kubectl rollout | 롤아웃의 상태 표시, 일시정지와 재개, 취소, 이력 표시 |
kubectl drain <노드명> | 가동 중인 파드를 다른 노드로 이동 |
kubectl cordon <노드명> | 노드에 새로운 파드의 스케줄 금지 |
kubectl uncordon <노드명> | 노드에 새로운 파드의 스케줄을 재개 |