kubectl
≡ 목차 (Table of Contents)
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 top node [NODE]
노드의 메트릭을 조회할 수 있다. 노드 이름을 넣지 않으면 모든 노드의 메트릭을 볼 수 있다.
kubectl top pod [POD-NAME]
비슷하게 단일 포드 혹은 전체 포드의 메트릭을 조회할 수 있다.
심화 예제
레코드와 롤백
--record
커맨드로 현재 기록을 남겨둘 수 있다.
kubectl apply -f somedeploy.yaml --record
그리고 롤백도 쉽게 된다.
kubectl rollout history deploymenys some-deployment
(다만 이것도 아직 시험 안 해봄😏)
기타 외부 링크
- 🌏Kubernetes Best Practices (Slides)