Kubernetes CLI 도구인 kubectl의 사용법 이해하기

Bakumando·2022년 5월 19일
5

Kubernetes

목록 보기
2/17

들어가기에 앞서...

  • 본 쿠버네티스 실습 시리즈는 아래 학습 자료를 참고한다.
  • 이번 블로깅은 kubectl의 명령어 사용법에만 집중한다. 각 리소스가 가지는 의미나 디테일한 kubernetes의 동작 원리 및 흐름에 대해선 추후 시리즈에서 다룰 예정이다.

0. 블로깅 목적

  • kubectl 사용 목적을 이해하고, kubectl 명령어의 종류를 파악한다.
  • kubectl 명령어의 역할과 실질적인 사용법을 이해한다.

1. kubectl 사용 목적을 이해하고, kubectl 명령어의 종류를 파악한다.

1) kubectl 사용 목적

  • 쿠버네티스에도 GUI는 있지만, 입문할 땐 kubectl로 CLI 명령어를 직접 타이핑하며 전진하는 것이 좋다.
  • kubectl은 kubernetes의 상태를 확인하고 원하는 상태를 요청하는 걸 주목적으로 사용된다.
  • kubectl은 그 밖에도 컨테이너 로그 확인 및 원격 접속도 가능하게 해준다.
  • kubectl의 명령어를 익히고, 이를 바탕으로 이후에 각종 컴포넌트(Pod, ReplicaSet, Deployment, Service)의 사용법을 학습 및 실습해가야 쿠버네티스의 동작 원리를 이해할 수 있다.
  • 이번 시리즈는 kubectl의 명령어 사용법에만 집중한다. 각 리소스가 가지는 의미나 디테일한 지식에 대해선 추후 시리즈에서 자세하게 다룰 예정이다. 이를 참고하여 따라오길 바란다.

2) kubectl 명령어 종류

  • apply: 원하는 상태 적용. (주로 -f 옵션과 함께 사용)
  • get: 리소스 리스트 조회
  • describe: 리소스 상태 상세 조회
  • delete: 리소스 제거
  • logs: 컨테이너 로그 조회
  • exec: 컨테이너에 명령어 전달 (주로 컨테이너 접근 시 사용)
  • config: kubectl 설정 관리

2. kubectl 각 명령어의 역할과 실질적인 사용법을 이해한다

1) apply

$ kubectl apply -f {파일명 혹은 URL}
  • 적용하길 원하는 상태를 yml로 작성해두고, 이를 활용하여 apply 명령어로 적용하는 방식으로 쓰인다.
  • subicura의 쿠버네티스 안내서의 yml 소스 파일을 활용해서 실제 적용도 해보자.
  • yml 소스: https://subicura.com/k8s/code/guide/index/wordpress-k8s.yml)
  • 직접 wordpress-k8s.yml 파일을 만들어 소스코드를 붙여도 되고, 아니면 위 url 자체를 넣어줘도 된다.
  • kubectl apply -f wordpress-k8s.yml

2) get

$ kubectl get {타입}
$ kubectl get {타입},{타입}
$ kubectl get all
$ kubectl get {타입} -o {원하는 포멧}
$ kubectl get {타입} -show-labels
  • 이와 같은 방식으로 활용할 수 있다.
  • 위에서 apply로 생성해둔 리소스를 바탕으로 실습해보자.

1. Pod 조회

  • kubectl get pod
    • kubectl은 영리해서 복수형 및 축약형도 다 알아먹는다.
      • ex) kubectl get pods 혹은 kubectl get po

2. 여러 타입 조회

  • kubectl get pod,service
    • 3개 이상의 타입도 가능하다.
      • ex) kubectl get pod,service,deployment
    • service의 축약형은 svc, deployment는 deploy다.
      • ex) kubectl get po,svc,deploy

3. 전체 타입 조회

  • kubectl get all
    • Pod, ReplicaSet, Deployment, Service, Job 까지 모든 컴포넌트를 조회한다.

4. 출력 포맷 변경

  • kubectl get pod -o json
    • 캡쳐 내용이 너무 길어서 적당히 생략했지만, 이처럼 -o 옵션을 사용하면 원하는 형태로 변경하여 볼 수 있다.
    • yml과 wide 형식으로 보려면 아래와 같다.
    • ex) kubectl get pod -o yaml
    • ex) kubectl get pod -o wide

5. 레이블 확인

  • kubectl get pod --show-labels
    • 이외에도 다양한 옵션이 존재한다.
    • 옵션은 필요할 때 공식문서를 통해 학습 및 적용하면 된다.

3) describe

$ kubectl describe {타입}/{리소스 이름}
$ kubectl describe {타입} {리소스 이름}
  • 리소스의 상세한 상태를 확인할 수 있다.
  • get으로 일단 리소스를 조회하여 리소스 이름을 확인한 뒤 적용해야한다.

1. 리소스 상세 조회

  • kubectl describe pod/wordpress-mysql-5447bfc5b-n6gz2
    • status, labels, ip, container, volumes 등 리소스에 대한 디테일한 확인이 가능하다.
    • kubectl describe pod wordpress-mysql-5447bfc5b-n6gz2 형태도 같은 결과를 출력한다.

4) delete

$ kubectl delete {타입}/{리소스 이름}
$ kubectl delete {타입} {리소스 이름}
$ kubectl delete -f {리소스 파일명}
  • 특정 리소스를 제거할 수 있다.
  • 마찬가지로 get으로 일단 리소스를 조회하여 리소스 이름을 확인한 뒤 적용해야한다.
  • kubectl delete -f {리소스 파일명}을 적용하면, 리소스 전체 제거할 수도 있다.

1. 리소스 제거

  • kubectl delete pod/wordpress-mysql-5447bfc5b-n6gz2
    • 제거되었다는 결과가 나왔음에도 get 조회 시에 남아있다. 이상하게 느껴지겠지만 pod를 제거해도 되살아나는 게 일반적이다.
    • 이는 ReplicaSet 때문이다. ReplicaSet는 원본의 유실을 고려해서 최초 생성 시 여러개를 만들어두는 개념이다. 이게 pod의 개수를 유지해주는 역할을 한다.
    • 추후 ReplicaSet에 대해서도 더 다룰 예정이다.

5) logs

$ kubectl logs [파드 이름]
$ kubectl logs -f [파드 이름]
$ kubectl logs [파드 이름] -c [컨테이너 이름]
  • get 조회로 확인한 Pod명으로 로그 조회를 할 수 있다.
  • 하나의 Pod에 여러 개의 컨테이너가 있는 경우는 -c 옵션으로 컨테이너를 지정해서 로그를 볼 수 있다.
  • 실시간 로그를 보고 싶다면 -f 옵션을 이용하면 된다.

1. Pod 로그 조회

  • kubectl logs wordpress-74757b6ff-6fhcm
    • 로그 조회 결과이다.
    • 로그를 보고 바로 터미널로 빠져나온다.

2. Pod 실시간 로그 조회

  • kubectl logs -f wordpress-74757b6ff-6fhcm
    • 실시간 로그 조회 결과이다.
    • 터미널로 빠져나오지 않고 머무른다.

3. Pod 내 컨테이너 지정 로그 조회

  • kubectl logs wordpress-74757b6ff-6fhcm -c wordpress
    • logs 파드명 + c옵션 컨테이너명 을 순차로 입력해주면 된다.
    • 참고로 해당 실습 pod엔 컨테이너가 하나 뿐이긴 했지만 2개 이상이어도 문제 없이 잘 작동한다.

6) exec

$ kubectl exec {파드 이름} -- {커맨드}
$ kubectl exec -it {파드 이름} -- {커맨드}
  • 컨테이너에 명령어를 전달하는 역할이다. docker에서 사용되는 exec과 흡사하다.
  • 당연한 얘기지만 get pod로 파드 이름부터 체크해야 명령어 전달이 가능하다.
  • 주로 컨테이너에 접속하는 용도로 사용된다.
  • 쉘로 접속하여 컨테이너 상태를 확인하는 경우에 -it 옵션을 사용하면 된다.
  • 여러 개의 컨테이너가 있는 경우엔 -c 옵션으로 컨테이너를 지정할 수도 있다.

1. Pod 컨테이너 파일리스트 확인

  • kubectl exec wordpress-74757b6ff-6fhcm -- ls
    • 파드에 명령어를 전달하여, 파드가 가진 파일 목록을 체크하였다. docker exec과 정말로 별반 다를 게 없다.

2. Pod 컨테이너 접속

  • kubectl exec -it wordpress-74757b6ff-6fhcm -- bash
    • -it 옵션을 통해 집적 쉘로 접속해보았다.
    • 접속 이후엔 ls만 입력해도 파일리스트 확인이 가능하다.

7) config

$ kubectl config {커맨드}
  • kubectl은 여러 개의 쿠버네티스 클러스터를 context로 설정하고 필요에 따라 선택할 수 있다. (참고: minikube를 클러스터라고도 하고 minikube로 만드는 것도 클러스터라고 부른다.)
  • 현재 어떤 컨텍스트로 설정되어 있는지 확인하고 원하는 컨텍스트를 지정할 수도 있다.
  • 그밖에 다양한 커맨드가 있다.
  • 위 캡쳐를 참고하여, kubectl config {커맨드} 형태로 사용하면 된다.
  • 실습은 생략하기로 하겠다.

8) 기타 명령어

$ kubectl api-resources
$ kubectl explain pod
  • kubectl api-resources: 전체 api 리소스 종류를 확인할 수 있다.
  • kubectl explain pod: 특정 api 리소스 설명을 볼 수 있다.
  • 이 밖에도 매우 다양한 kubectl 커맨드가 있으나, 전부 다룰 수는 없다. 필요에 따라 학습하고 적용하는 게 옳다.
profile
그렇게 바쿠만도는 개발에 퐁당 빠지고 말았답니다.

0개의 댓글