본문 바로가기
IT 기술/Infra

[k8s] Object 그려보며 이해하기

by Geunny 2023. 12. 19.
반응형

본 게시물은 인프런 쿠버네티스 어나더 클래스 강의 내용을 정리한 내용입니다.  링크(https://url.kr/vxsutp)

 

어떤 공부를 하던 그림을 그려가며 머릿속에 정리해 가는 과정이 필요합니다. 이번 글에서는 다음과 같이 3개의 과정을 통해 쿠버네티스를 이해하고자 하며 이번 정리는 이중 첫번째 Object 그려보며 이해해 보는 과정을 가지려고 합니다.

Object 그려보며 이해하기

 

  • 오늘 공부하게 될 쿠버네티스에 기본을 구성하는 Object 들의 구성 내용들입니다.
  • 정리할 양이 매우 많기에 하나하나 자세히 보며 정리해 보겠습니다.
  • 연습에서 사용된 yaml script 는 해당 카페 자료에 정리되어 있습니다. yaml 자료 - (link)

 

namespace 와 Deployment

  • Namespace 는 Object 들을 그룹핑 해주는 역할을 한다.
    • kubectl get pods -A 사용시 각 파드의 namespace 에 나타나는 논리적인 리소스이다.
    • kubectl 사용시 --namespace 를 통해 사용되며 사용하지 않으면 'default' namespace 로 지정된다.

 

  • Deployment 는 Pod 를 만들고 업그레이드 해주는 역할을 한다.
    • 모든 오브젝트들은 기본으로 metadata 를 갖는다. (namespace, label, name) 
    • 이후 사용될 replicas의 상위 오브젝트이다.
    • Deployment 는 label 과 selector 를 갖는다. (이후 설명)
    • 위 설정한 api-tester-1231은 해당 Deployment 의 이름이며 한 namespace 안에서 이름이 중복되면 안된다.
    • replicas 는 pod 를 몇개 만들것인지에 대한 설정이 있다. 설정된 갯수만큼 pod의 갯수를 유지시킨다.
    • strategy 는 Deployment 의 업데이트 정책을 설정하는 핵심기능이다.
    • template 는 만들어질 pod의 template 정보이다.
    • nodeSelector 는 이름 그대로 pod를 띄울 node 를 선택해준다.
    • containers 아래 여러 옵션이 존재하는데 image 는 사용될 DockerHub 의 이미지를 사용한다.

    • continers
      • envFrom : configmap과 연결됨. Application에 환경 변수랑 관련된 부분을 담당, Configmap에서 해당 값을 관리함.
      • probe: App에 관련된 속성들을 관리하고 실행시킴.
      • StartupProbe App이 잘 기동이 됐는지 체크를 하고 있다가 기동이 안 되면 App을 재기동 시킨다.
      • StartupProbe 정상처리후readinessProbe랑 livenessProbe를 시작함.
      • readinessProbe App에 트래픽을 연결 관련 속성
      • livenessProbe App이 정상이 아니면 재시작을 시킬 건지 판단하는 속성
    • resources : pod의 CPU/memory 할당. limit을 설정함. limit설정 없으면 node 전체 자원을 사용하게된다.
    • volumeMounts mountPath pod 내부에 만들어지는 디렉토리
    • mountPath 와 volumes에 이 이름이 매칭이 되어 실제 persistentVolumeClaim(PVC) object와 연결
    • secret-datasource도 name으로 연결이 되면서 secret object와 연결된다.

 

Service 오브젝트

 

  • 서비스의 역할은 실제 트래픽을 pod에 연결해 주는 역할이다.
  • 네트워크 트래픽을 로드밸런싱 해주는 역할.

  • PersistentVolumeClaim : pod에서 pv 를 지정할 때 사용
  • Secret: Configmap 과 유사한 값을 저장함. pod에 좀 더 중요한 값을 제공하는 역할.
  • PersistentVolume (pv): 실제 Volume을 지정하는 역할
  • local : path를 volume으로 사용하겠다는 내용

 

  • 위 그림처럼 Namespace 와 PV 는 Cluster level 오브젝트
  • Deployment, Configmap, Service PVC Secret 은 namespace level 오브젝트

HPA

  • namespace level 오브젝트중 하나.
  • 부하에 따라 pod를 늘려주고 줄여주는 스케일링 역할
  • scaleTargetRef : 스케일링 대상을 지정
  • min/maxReplicas : pod 최소 갯수와 최대갯수를 지정 ( 스케일 업 시점에 Max 까지 pod를 늘림)
  • metrics : cpu 평균값을 기준으로 pod 를 늘리기 시작하려는 기준점. ( cpu 가 설정값 이상으로 사용시 pod 증설)
  • behavior : pod 스케일업 동작을 상세설정. (ex 스케일 업이후 계속 스케일업 하는 것이 아닌 시간 텀을두어 스케일업 시간을 조정)

 

  • 오브젝트 삭제시 하위 오브젝트도 모두 삭제됨.
    • namespace 삭제시 해당 namespace의 namespace level 오브젝트 모두 삭제.

Object 그려보며 이해하기 - (label/selector/naming) (1)

  • pod 생성시 작성된 값들을 보면서 비교
  • labels 을 통해 pod 의 정보를 작성하여 App 정보를 파악하는 네이밍.
  • part-of : 어플리 케이션 전체 이름.
  • component : 서비스를 구성하는 각각의 분리된 기능. (prometheus/exporter/grafana)
  • name: 어플리케이션 실제 이름
  • instance: 실제 동작하는 component. 동일한 component 를 여러 instance식별자를 두어 띄울수 있다.
  • version : App 버전 변경시 수정 필요함.

오브젝트 네이밍 추천 (강사의견)

  • namespace 앱 범위를 나타날수 있게 사용.
  • 각 오브젝트 명은 오브젝트네임 + 인스턴스로 만듬.
  • 쿠버네티스 가이드에서는 인스턴스 이름을 어플리케이션명 + 식별자로 권고함.
  • 즉 오브젝트 네임은 인스턴스를 따르도록 하면 좋음.
  • ConfigMap의 경우 rule suffix 를 붙여줌.
  • Prometheus 에서도 초기데이터로 rule 을 사용함.
  • 배포도구의 경우 Managed-by 로 구성함.

Object 그려보며 이해하기 - (label/selector/naming) (2)

 

  • 각 오브젝트의 selector 는 사용하는 오브젝트의 labels 와 연결됨.
  • 노드의 오브젝트에도 nodeSelector/nodeAffinity 가 연결됨.

 

  • 각 label 은 prefix 를 붙일수가 있다.
  • 쿠버네티스 문서에 있는 yaml 파일들에서 이런 예제를 많이 볼수 있음.
  • 보통 도메인을 prefix 로 붙여준다.
  • 여기까지가 쿠버네티스에서 권고하는 label 이고 이외에 추가적으로 더 작성해줄수 있다.
  • 의미있는 정보로 넣어줄수 잇다.

 

  • 각 selector 마다 사용하는 옵션들이 있다.
  • 오브젝트에 맞게 알맞게 찾아서 사용하면 된다. (굳이 외울필요까진 없을것 같다.)

 

댓글