티스토리 뷰

 

2022.01.29 - [Devops 2회차/K8S Study] - K8S-04_리소스 생성, 삭제, 갱신

아무것도 모른채 pod를 생성해 보았다.
pod를 생성할 때에 kubectl을 사용하였는데 이 kubectl은 단순히 pod를 생성하는 것보다 더 많은 역할을 한다.
사실상 kubectl을 다룰줄 알아야 쿠버네티스에서 원하는 서비스를 띄우고, 문제상황의 원인을 파악하고 대응할 수 있다.
kubectl의 명령어는 굉장히 많아서 전부 다루지는 못하고, 서적에 나와있는 것 위주와 실제로 많이 사용하는 명령어 위주로 사용해본다.

출처

쿠버네티스 완벽 가이드

시작하기전에

쿠버네티스는 사용하다보면 여러 클러스터를 움직여야 한다.
하지만 작업은 로컬에서 진행하기 때문에 내가 어디 클러스터에서 있는지 직관적으로 알 수가 없다.
그런것을 가능토록 하는 도구를 설치한다. (MAC)

brew update
brew install kube-ps1

설치하고 나면 로컬 기본 상태란에 현재 내가 어느 클러스터의 어느 네임스페이스에서 작업하는지 알 수 있다.

kubectl 명령어

kubectl api-resources

이 명령어는 실무를 하면서 실제로 사용할 일은 거의 없다.
하지만 처음 입문한다면 꼭 쳐볼 것. 어떤 리소스를 현재 사용가능한지와 더불어 약어까지 알 수 있다.

kubectl get {resource}
### 자주 사용하는 옵션 및 사용 예시
# kubectl get pod -o yaml
# kubectl get pod -o wide
# kubectl get ingress
# kubectl get pod --show-labels

# kubectl get all

위의 {resource} 영역은 api-resources 로 나오는 종류를 입력해주면 된다. (events, bindings, secrets .... etc)

쿠버네티스에서 파드를 생성해 봐서 알겠지만 리소스를 배포할 때 yaml파일 -> kubectl apply 를 통해서 리소스를 생성한다.
만일 반대로 현재 생성된 리소스의 정보를 yaml 파일로 보고 싶다면 위 옵션(-o yaml)을 사용해주면 된다. (pod 외의 다른 리소스에도 적용된다.)

(-o wide)옵션:  경우 단순히 파드의 정보만 보여주는 것이 아닌, 추가적인 정보 (IP, Node 정보 등을 추가로 출력해준다)

(--show-labels)옵션: 나중에 여러 리소스들이 서로 연관성을 갖고 selecting을 할 때, 라벨을 기반으로 하는 경우가 꽤 있다. 만일 라벨이 제대로 설정되지 않았는지 확인한다면 해당 옵션을 통하여 확인이 가능하다. pod 외의 다른 리소스에도 적용된다.

kubectl describe {resource}

마찬가지로 모든 resource를 갖다 붙이면 결과를 확인할 수 있다.
get의 command가 간단하게 리소스의 종류와 상태 이름등을 확인할 수 있었다. 이 정보들은 껍데기처럼 표면적인 정보들이다.
describe command는 표면적인 정보 외에 리소스 관련 이벤트나 각종 내부적인 활동에 대한 상태, 결과 등을 확인할 수 있다.
kubectl describe node {nodename}과 같이 사용한다면 리소스 사용 현황이나 할당 내역등을 확인할 수 있다.

kubectl top node

top는 실제 리소스 사용량을 확인하는 명령어이다.
물론, pod나 사용량 지표를 가진 다른 리소스에도 사용할 수 있지만 주로 node를 위해 사용하기 때문에 예시를 node로 들었다.
서비스에 이상이 생기면 위 명령어로 간단하게 어떤 노드가 가장 리소스를 잡아먹는지 혹은 비정상적인 리소스 사용량을 갖는지 등을 한눈에 확인할 수 있다.

kubectl exec -it {pod명} -- /bin/bash

나는 로컬에서 작업하지만 때로는 파드 내부에 직접 들어가서 확인해야 하는 작업이 필요할 수 있다.
/bin/bash와 같은 셸을 실행함으로써 컨테이너에 로그인한 것처럼 내부에 접속이 가능하다.
(-it) 옵션은 너무나 자동으로 쫓아 다니기 때문에 그냥 같이 외우는 것이 좋다.
-t는 가상 터미널을 생성하라는 옵션이고, -i는 표준 입출력을 pass through 하라는 명령어이다.

kubectl logs {pod}

위에서는 exec로 파드에 들어가는 법을 배웠지만 만일 기동한 서비스가 콘솔로그를 출력한다면
간단하게 kubectl logs 로 로그를 확인할 수 있다. 굳이 귀찮게 컨테이너 내부에 터미널 연결을 하지 않고도 말이다.