[Kubernetes] 3. 팁

2023. 6. 1. 23:28쿠버네티스 (Kubernetes)


Namespace

 

네임스페이스(namespace)는 편하게 그룹이라고 생각해도 됩니다.

kubectl을 사용할 때, 별도의 네임스페이스를 지정하지 않으면 기본으로 default를 사용합니다.

만일 특정 네임스페이스를 지정하고 싶다면 --namespace=abc 처럼 만들면 되고, 전체 네임스페이스는 --all-namespaces 옵션을 사용합니다.

 

네임스페이스를 만들기 위해서 create 명령어를 사용합니다.

kubectl create namespace {네임스페이스 이름}

 

 

 

 


Context

 

매번 네임스페이스를 지정하기 귀찮다면, 컨텍스트(context)를 사용하면 됩니다.

예를 들어 abc 네임스페이스를 kubectl에 기본으로 사용하고 싶다면

kubectl config set-context abc-context --namespace=abc

로 컨텍스트를 만들고

kubectl config use-context abc-context

를 실행하면 됩니다.

 

 

 

 

 


Object

 

쿠버네티스에 담겨 있는 모든 자원은 사실 Restful 자원들로 표현할 수 있습니다.

이러한 자원들은 쿠버네티스 오브젝트(kubernetes object)라고 불리기도 하는데, 오브젝트들은 각자 자신만의 고유한 HTTP 경로가 있습니다. 예를 들어 https://your-k8s.com/api/v1/name‐spaces/default/pods/abc 는 abc라는 이름의 pod을 가리킵니다.

 

API에서 GET으로 보듯, CLI에서는 get 명령어를 사용합니다.

kubectl get <resource-name> <obj-name>

위를 실행하면 resource-name에 해당하는 정보를 볼 수 있으며, 경우에 따라 obj-name을 넣어 세부적으로 확인할 수 있습니다.

 

더욱 자세한 정보를 얻고 싶다면 get 대신 describe 명령어를 사용해도 좋습니다.

kubectl describe <resource-name> <obj-name>

 

 

 


Debugging

 

컨테이너 로그를 보고 싶은 경우에는 아래 명령어를 실행하면 됩니다.

kubectl logs <pod-name>

만일 하나의 pod에 여러 개의 컨테이너가 있다면, -c 옵션으로 어떤 컨테이너의 로그를 볼 지 선택할 수 있습니다.

그리고 지속적으로 log를 보고 싶다면 -f 옵션을 사용합니다.

 

exec 명령어를 사용하면 실행중인 컨테이너에 접속할 수 있습니다.

kubectl exec -it <pod-name> -- bash

또한 attach로 어플리케이션에 직접 붙을 수도 있는데, logs 명령어와 다른 점은 표준 입력이 가능하다는 것입니다.

kubectl attach -it <pod-name>

 

 

 

 


Port Forward

 

특정 pod에 네트워크 접속을 하고 싶다면 port-forward 명령어를 사용합니다.

kubectl port-forward <pod-name> 8080:80

이렇게 작성하면 실제 로컬 컴퓨터의 8080번 포트를 해당 pod의 80번 포트로 포워딩할 수 있습니다.

 

 

 

 

 


Resource

 

클러스터의 시스템 자원 사용량을 알고 싶다면 top 명령어를 사용합니다.

kubectl top nodes
더보기

NAME                     CPU(cores)   CPU%   MEMORY(bytes)   MEMORY%   
kind-control-plane   169m             1%        661Mi                     2%        

kubectl top pods

pods의 경우 기본으로 현재 네임스페이스에 대해서만 보여주는 데, 전체 네임스페이스를 확인하려면 --all-namespaces 옵션을 사용합니다.

만일 error: Metrics API not available 에러메시지가 뜬다면 아래 명령어를 실행한 후 spec.template.spec.containers.args- --kubelet-insecure-tls 를 추가해서 tls 보안을 무시하도록 합니다.

kubectl edit deployments.apps -n kube-system metrics-server

 

 

 

 


Autocompletion

 

쿠버네티스 명령어를 작성할 때, 터미널에서 자동 완성 기능을 사용하고 싶다면 bash-completion을 설치합니다.

sudo apt install bash-completion -y

 

 

 

 


Symbolic Link

 

kubectl 명령어를 자주 쓰게 될텐데, 매번 전체 이름을 작성하기 귀찮을 때 있습니다.

이럴 땐 명령어를 줄여서 쓰면 매우 편리합니다.

 

아래 명령어를 실행하면 kubectl이 위치한 장소가 나옵니다.

which kubectl

해당 디렉터리를 방문해서 아래 명령어를 통해 심볼릭 링크 파일을 만듭니다. (sudo는 필요 시 붙입니다.)

sudo ln -s kubectl k

 

필자는 k라고 붙였는데, 본인이 원하는 줄임말로 만들면 됩니다. 이렇게 만들면,

k get pods

처럼 써도 됩니다.