kubectl

2021년 6월 7일 수정

kubectl 소개

kubectl 은 Kubernetes 클러스터 컨트롤 CLI 도구다. 이름대로 Kubernetes Controller다.

사용법 예제

포드 리스트

kubectl get pods

포드 정보 보기

kubectl describe pod POD_NAME

YAML 파일 적용

kubectl apply -f foo/bar.yaml

포드 삭제하기

보통은 rescale로 0대만 동작하게 설정하는 식으로 포드를 종료 시킨다.

kubectl scale --replicas=0 deployment/POD_NAME

YAML 파일이 있으면 포드 이름을 찾을 필요 없이 좀 더 쉽게 할 수 있다.

kubectl scale --replicas=0 -f foo/bar.yaml

아예 포드를 삭제 시킬 수도 있다. Deployment가 아닌 포드는 이 방법으로 삭제하는 것이 편한 것 같다.

kubectl delete pod POD_NAME

Deployment의 경우는 delete 를 시켜도 replica 설정에 의해 부활할 수 있음에 유의하자.

포드 재시작 하기

특별히 커맨드가 있는 건 아니고 아래처럼 할 수 있다.

kubectl edit deployment/POD_NAME

이렇게 입력하면 에디터가 뜨는데 그냥 저장하고 종료하면 재시작 된다고 한다. (아직 시험 안 해봄😛)

로그 보기

kubectl logs -f POD_NAME

보통 사용하는 tail -f 와 비슷한 커맨드다.

포드가 여럿인 특정 앱의 모든 로그를 보려면 아래처럼 할 수 있다.

kubectl logs -f -l app=APP_NAME

기본적으로 5개의 포드 까지만 볼 수 있게 되어있는데 에러 메시지에 옵션(--max-log-requests) 정보가 나오니까 이것도 참고하자.

위의 방법이 잘 안 되면 아래와 같은 식으로도 해보자.

kubectl logs -f deployment/APP_NAME --all-containers=true

너무 많은 로그가 나올 수도 있는데, --since 옵션을 이용해 과거의 로그를 다 안 보는 방법이 있으니 참고하자.

kubectl logs -f deployment/APP_NAME --all-containers=true --since=10m

포트 포워딩

kubectl port-forward POD_NAME PORT_NUM

PORT_NUM 으로 표기한 부분은 포트 번호인데 HOST_PORT:CONTAINER_PORT 와 같은 식으로 다르게 지정하는 것도 가능하다.

포드가 아닌 서비스도 포트 포워딩이 된다.

kubectl port-forward svc/SERVICE_NAME PORT_NUM

컨테이너의 커맨드 실행시키기

kubectl exec -it POD_NAME -- COMMAND

-it 옵션을 넣었기 때문에 커맨드에 을 넣으면 당연히 도 뜬다.

포드가 하나 이상의 멀티 컨테이너일 경우 --container 옵션으로 골라서 접속할 수 있다.

kubectl exec -it POD_NAME --container CONTAINER_NAME -- COMMAND

사용량 등 메트릭 조회

kubectl top node [NODE]

노드의 메트릭을 조회할 수 있다. 노드 이름을 넣지 않으면 모든 노드의 메트릭을 볼 수 있다.

kubectl top pod [POD-NAME]

비슷하게 단일 포드 혹은 전체 포드의 메트릭을 조회할 수 있다.

심화 예제

레코드와 롤백

--record 커맨드로 현재 기록을 남겨둘 수 있다.

kubectl apply -f somedeploy.yaml --record

그리고 롤백도 쉽게 된다.

kubectl rollout history deploymenys some-deployment

(다만 이것도 아직 시험 안 해봄😏)

기타 외부 링크