문서 보기역링크PDF로 내보내기맨 위로 이 문서는 읽기 전용입니다. 원본을 볼 수는 있지만 바꿀 수는 없습니다. 문제가 있다고 생각하면 관리자에게 문의하세요. # kubectl ## Command - [[kubectl run]] - [[kubectl get]] - [[kubectl describe]] - [[kubectl create]] - [[kubectl delete]] - [[kubectl config]] - [[kubectl exec]] ## Docs - 헬름 [[Helm]] - [[Pod]] - [[kubectx]] ## 매니페스트 ### 매니페스트로부터 쿠버네티스 오브젝트를 생성 <code> kubectl apply -f [매니페스트 파일명] </code> ### 매니페스트를 지정하여 API 오브젝트를 제거하는 예 <code> kubectl delete -f [YAML 파일명] </code> ## 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 1. kubectl delete pod 를 실행하면 파드의 종료 처기사 시작된다. 기본 유예시간은 30초다 2. kubectl get pod의 status는 Terminating이라고 표시된다. 3. 다음 세 가지 작업이 동시에 진행된다. - 파드의 [[PreStop hook]]이 정의되어 있으면, 파드 내에세 호출된다. 유예 시간을 넘어서면 PreStop hook이 실행되고 있어도, 파드 내의 메인 프로세스에서 [[SIGTERM]]이 보내지며, 2초 후에 [[SIGKILL]]로 강제 종료 된다. - PreStop hook이 정의되어 있지 않다면, 곧바로 파드 내의 메인 프로세스에 SIGTERM신호가 송신되며 종료 처리가 개시된다. - 파드가 서비스의 엔드포인트 목록에서 제거되며, 로드밸런서 ([[kube-proxy]] 등)의 목록에서도 제거된다. 4. 유예 시간을 넘어서서 파드 내의 프로세스가 살아 있다면, 파드의 메인 프로세스에 [[SIGKILL]]을 보내서 강제로 종료한다. 5. 제거 대상인 파드가 표시되지 않게 된다. <code> kubectl delete --grace-period=초 </code> ## Command <code> $ kubectl run hello-world --image=hello-world -it --restart=Never </code> - kubectl : [[k8s]] 클러스터를 조작하기 위해 사용되는 커맨드 - run : 컨테이너 실행을 명령하는 서브 커맨드 - [[hello-world]] : 쿠버네티스 오브젝트의 이름 ([[파드]]나 [[컨트롤러]] 등) - --image=hello-world : 컨테이너의 이미지. 쿠버네티스에서는 파드 단위로 컨테이너가 기동되며 리포지터리명이 생략된 경우에는 도커 허브를 사용 - -it : 도커에서의 -it와 마찬가지로, -i는 키보드를 표준 입력에 연결하고, -t는 유사터미널과 연결하여 대화 모드 설정. 옵션 `--restart=Never`인 경우에만 유효하며, 그 외에는 백그라운드로 실행 - --restart=Never : 이 옵션에 따라 파드의 기동 방법 변경. Never는 직접 파드가 기동되며 Always나 OnFailure는 컨트롤러를 통해 파드가 기동 ### --rm 사용 <code> $ kubectl run hello-world --image=hello-world -it --restart=Never --rm </code> ## 명령어 ^ 커맨드 ^ 동작 ^ | 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 <노드명> | 노드에 새로운 파드의 스케줄을 재개 | ## Docs - [[디플로이먼트]] - [[kubectl describe]] ## Links - https://ahmet.im/blog/kubectl-aliases/index.html open/kubectl.txt 마지막으로 수정됨: 2021/11/09 02:57저자 127.0.0.1