Kubernetes & Docker/궁금한 것

쿠버네티스 "kubectl get all" 명령어에 나오는 모든 것들에 대해서

정현수 2020. 7. 17. 08:51
반응형

※주의

이 글은 제가 혼자 공부하면서 여기저기 찾아보고 정리하는 곳이라서

글의 퀄리티나 내용상 맞지 않는 부분들이 있습니다.

공식문서가 더욱 더 큰 도움이 될 수 있습니다!

궁금점

kubectl get all 명령어를 입력했을 때 나오는 목록들의 의미를 알고싶었습니다. 


행동

Pod

kubectl get all의 윗 부분

NAME

이 부분은 kubectl get pods / kubectl get pod 로도 얻을 수 있는 부분입니다.

 kubectl get pods / kubectl get pod 

둘의 차이점은 kubectl get all 명령어는 오브젝트를 구분해주기 위해 앞에 오브젝트의 이름이 붙고 그 다음에 name이 붙습니다.

kubectl get all = pod / pod의 name

kubectl get pod = pod의 name

 

READY

READY 필드는 파드(pod)에 몇 개의 컨테이너가 준비되어 있는지 보여주는 필드입니다.

만약 하나의 파드에 여러 개의 컨테이너가 있다면 (ex 3개 )

파드를 실행했을 때 파드에 있는 컨테이너들이 전부 준비상태가 되었는지 아닌지를 확인할 수 있습니다.

만약 3개중에 2개만 준비가 되었다면 2/3 으로 표기가 됩니다.

 

STATUS

STATUS 필드는 Pod들의 상태를 표기해주는 필드입니다.

Pending 파드가 쿠버네티스 시스템에 의해서 승인되었지만, 파드를 위한 하나 또는 하나 이상의 컨테이너 이미지 생성이 아직 완료되지 않았다. 여기에는 스케줄되기 이전까지의 시간 뿐만 아니라 오래 걸릴 수 있는 네트워크를 통한 이미지 다운로드 시간도 포함된다.
Running 파드가 한 노드에 결합되었고, 모든 컨테이너들의 생성이 완료되었다. 적어도 하나의 컨테이너가 동작 중이거나, 시작 또는 재시작 중에 있다.
Succeeded 파드에 있는 모든 컨테이너들이 성공으로 종료되었고, 재시작되지 않을 것이다.
Failed 파드에 있는 모든 컨테이너들이 종료되었고, 적어도 하나 이상의 컨테이너가 실패로 종료되었다. 즉, 해당 컨테이너는 non-zero 상태로 빠져나왔거나(exited) 시스템에 의해서 종료(terminated)되었다.
Unknown 어떤 이유에 의해서 파드의 상태를 얻을 수 없다. 일반적으로 파드 호스트와의 통신 오류에 의해서 발생한다.

STATUS 필드에 속할 수 있는 값들은 5가지입니다. 

 

RESTARTS

RESTARTS 필드는 파드안의 컨테이너가 몇 번 재실행 되었는지 count수를 나타내는 필드입니다.

AGE

Pod의 실행중인 시간을 나타냅니다.

 

Service

NAME

Service 또한 pod와 마찬가지로 오브젝트 타입 / 오브젝트 명순으로 표기가 됩니다.

 

kubectl get service로 했을 때와 NAME이 차이가 있습니다.

TYPE

Service의 type의 이름을 보여주는 필드입니다. 총 4개의 필드값이 있습니다.

더보기

Type 값과 그 동작은 다음과 같다.

ClusterIP: 서비스를 클러스터-내부 IP에 노출시킨다. 이 값을 선택하면 클러스터 내에서만 서비스에 도달할 수 있다. 이것은 ServiceTypes의 기본 값이다.

NodePort: 고정 포트 (NodePort)로 각 노드의 IP에 서비스를 노출시킨다. NodePort 서비스가 라우팅되는 ClusterIP 서비스가 자동으로 생성된다. <NodeIP>:<NodePort>를 요청하여, 클러스터 외부에서 NodePort 서비스에 접속할 수 있다.

LoadBalancer: 클라우드 공급자의 로드 밸런서를 사용하여 서비스를 외부에 노출시킨다. 외부 로드 밸런서가 라우팅되는 NodePort와 ClusterIP 서비스가 자동으로 생성된다.

ExternalName: 값과 함께 CNAME 레코드를 리턴하여, 서비스를 externalName 필드의 콘텐츠 (예:foo.bar.example.com)에 매핑한다. 어떤 종류의 프록시도 설정되어 있지 않다.

CLUSTER-IP

서비스가 생성이 되면 쿠버네티스 마스터는 가상 IP 주소를 할당합니다.

Proxy가 새로운 서비스를 발견하면 새로운 임의의 포트를 열고, 가상 IP 주소에서 이 새로운 포트로 iptables 리다이렉션을

설정한 후, 연결을 수락하기 시작하는데 그 때의 가상 IP주소를 의미하는 필드입니다.

 

EXTERNAL-IP

Service의 type이 LoadBalancer일 때 서비스를 외부에 노출시키는데

그 때 서비스에 의해 노출된 외부 IP 주소 ( LoadBalancer Ingress ) 를 나타내는 필드입니다.

PORT(S)

Port필드는 말그대로 포트를 나타내는 필드입니다. 

Jenkins는 클러스터IP의 8080번 포트로도 접근이 가능하지만, 모든 노드의 30001번 포트로도 서비스를 접근할 수 있다는 얘기이다.

Nexus는 클러스터IP의 8081번 포트로도 접근이 가능하지만, 모든 노드의 30002번 포트로도 서비스를 접근할 수 있다는 얘기이다.

Tomcat은 클러스터IP의 8082번 포트로도 접근이 가능하지만, 모든 노드의 30003번 포트로도 서비스를 접근할 수 있다는 얘기이다.

Mariadb는 클러스터IP의 3306번 포트도 접근이 가능하지만, 모든 노드의 30004번 포트로도 서비스를 접근할 수 있다는 얘기이다.

Deployment

NAME

kubectl get all
kubectl get deployments.apps / kubectl get deployments

Deployment 역시 앞에 이름이 차이가 납니다.

deployment.apps 라는 것은 deployment의 apiVersion을 나타낸 것인데요

apiVersion에 대해서 알고싶으시다면 참고해주세요!

 

READY

사용자가 사용할 수 있는 애플리케이션의 레플리카의 수를 표시합니다. ready/desired 패턴을 따릅니다.

만약 replica가 2이고, 두 개의 복제된 파드중 하나만 준비가 됐다면 1/2 로 표시가 될 것입니다.

UP-TO-DATE

의도한 상태를 얻기 위해 업데이트된 레플리카의 수를 표시합니다.

우리가 의도한 레플리카는 jenkins / mariadb / nexus / tomcat 각각 5,3,3,3개 이므로 위와 같이 표기됩니다.

AVAILABLE

사용자가 사용할 수 있는 애플리케이션 레플리카의 수를 표시합니다.

AGE

ReplicaSet

Name

kubectl get all
kubectl get replicasets / kubectl get replicasets.apps

역시 앞에 오브젝트명이 더 붙는 것을 알 수 있습니다.

apiVersion에 대해서 알고싶으시다면 참고해주세요!

 

DESIRED

디플로이먼트의 생성 시 정의된 의도한 애플리케이션 레플리카 의 수를 표시합니다.  이것이 의도한 상태입니다.

CURRENT

현재 실행 중인 레플리카의 수를 표시합니다.

READY

사용자가 사용할 수 있는 애플리케이션의 레플리카의 수를 표시합니다.

AGE

애플리케이션의 실행된 시간을 표시합니다.


참고

https://kubernetes.io/ko/docs/concepts/workloads/pods/pod-lifecycle/

 

파드 라이프사이클

이 페이지는 파드의 라이프사이클을 설명한다. 파드의 단계(phase) 파드의 status 필드는 phase 필드를 포함하는 PodStatus 오브젝트로 정의된다. 파드의 phase는 파드가 라이프사이클 중 어느 단계에 해�

kubernetes.io

 

반응형