Infra/Kubernetes

쿠버네티스를 활용한 네이티브 데브옵스 - 7장 유용한 쿠버네티스 도구

wave35 2024. 10. 19. 15:23

7.1 kubectl 마스터하기

리소스 단축형 사용

  • kubectl get po      (pod)
  • kubectl get deploy  (deployment)
  • kubectl get svc     (service)
  • kubectl get ns      (namespace)
  • kubectl get no      (node)
  • kubectl get cm     (configmap)

 

도움말 보기 (kubectl -h)

kubectl -h

상세 커맨드 도움말
kubectl <command> --help"
kubectl get -h

 

더 자세한 출력 결과 확인하기

kubectl get pods
NAME                    READY   STATUS    RESTARTS        AGE
demo-6c7dbfffb4-bkkpp   1/1     Running   1 (2m56s ago)   20d

# -o wide 옵션은 파드가 실행 중인 노드와 같은 추가정보 확인
kubectl get pods -o wide
NAME                    READY   STATUS    RESTARTS        AGE   IP            NODE       NOMINATED NODE   READINESS GATES
demo-6c7dbfffb4-bkkpp   1/1     Running   1 (2m50s ago)   20d   10.224.0.61   minikube   <none>           <none>

 

 

jq를 이용하여 json 형식으로 출력

다양한 jq쿼리를 테스트하기 - ( https://jqplay.org )

# jq 다운로드
brew install jq

# json 형식으로 출력
kubectl get pods -n kube-system -o json

# 출력 결과를 쿼리하고 필터링
kubectl get pods -n kube-system -o=json | jq '.items[].metadata.labels'
{
  "k8s-app": "kube-dns",
  "pod-template-hash": "787d4945fb"
}
{
  "component": "etcd",
  "tier": "control-plane"
}
{
  "component": "kube-apiserver",
  "tier": "control-plane"
}
...

 

오브젝트 감시하기

kubectl get pods --watch

 

오브젝트 정보 확인

kubectl describe pods demo-6c7dbfffb4-b888p

 

 

7.2 리소스 다루기

리소스 매니페스트 생성하기 (신규)

클러스터 변경시 kubectl 커맨드는 권장하지 않지만, 

커맨드를 활용하면 k8s YAML 매니페스트 기본파일을 손쉽게 생성할 수 있다.

# demo 파드를 실행
# --dry-run 옵션은 리소스를 생서하지 않고, 생성시 발생하는 메세지만 출력
# -o yaml 옵션은 리소스 매니페스트를 yaml 형식으로 출력
kubectl run demo --image=cloudnatived/demo:hello --dry-run -o yaml > deployment.yaml

# 리소스 매니페스트 실행
kubectl apply -f deployment.yaml

 

리소스 매니페스트 내보내기 (기존)

클러스터에 존재하는 기존의 리소스를 매니페스트 파일로 생성할 수 있다.

jq를 이용해 불필요한 필드를 제거하고 yaml파일을 생성한다.

kubectl get deployment demo -o json | jq 'del(.metadata.creationTimestamp, .metadata.generation, .status, .metadata.managedFields)' > deployment_2.yaml

 

 

7.3 컨테이너 다루기

컨테이너 로그 보기 ( kubectl logs <pod_name> )

# tail을 통해 가장 최근 로그 출력
kubectl logs -n kube-system kube-ingress-dns-minikube --tail=20

# follow를 통해 로그 출력을 터미널로 스트림
kubectl logs -n kube-system kube-ingress-dns-minikube --follow

 

컨테이너에 명령어 실행 ( kubectl exec -it <pod_name> -- <commend> )

# -i는 사용자 입력을 허용하고, -t는 터미널 모드로 실행을 도움
# Pod 내부에서 bash, sh와 같은 특정 명령어를 실행할 때 유용
# 멀티 컨테이너 Pod에서 특정 컨테이너에 접근할 때는 -c 옵션을 사용
kubectl exec -it -c container2 demo -- ls /

 

 

7.4 컨텍스트와 네임스페이스

클러스터가 두개 이상인 경우, kubectl 명령어를 실행할 대상 클러스터와 네임스페이스를 선택할 수 있다.

컨텍스트 확인 ( kubectl config get-contexts )

# 컨텍스트 확인
kubectl config get-contexts
CURRENT   NAME                          CLUSTER      AUTHINFO           NAMESPACE
          admin							kubernetes   kubernetes-admin   
*         minikube                      minikube     minikube           default

# 컨텍스트 전환
kubectl config use-context admin

# 컨텍스트 생성
kubectl config set-context myapp --cluster=gke --namespace=myapp