DevOps K8S(3) – 이 Pod 이 그 Pod? Namespace, Label, Selector

안녕하세요,

오늘은 베스핀글로벌 DevOps실 구연수 님이 작성해 주신 ‘이 Pod 이 그 Pod? Namespace, Label, Selector’에 대해 알아보겠습니다. 🙂

Namespace

Kubernetes에서 생성해 온 Object들 – Pod, Deployment, Service들은 클러스터 내 Namespace 안에 구성된다.

Kube-System
  • Kubernetes에 의해 자동 생성
  • Kubernetes는 서비스의 네트워크 문제, DNS 서비스 등 자체 목적을 위해 Kube-System 네임 스페이스를 따로 만들어 Pod, Service 집합을 구성
Kube-public
  • Kubernetes에 의해 자동 생성
  • 모든 유저에 의해 만들어진 리소스들이 위치하는 곳
Namespace
  • 소규모 프로젝트라면 default namespace로 충분하지만, 엔터프라이즈나 프로덕션 레벨에서 클러스터를 구성한다면 namespace를 고려해야 한다.
  • 개별 Namespace를 구성하면?
    • 각자의 정책을 가질 수 있다.
    • 각자의 리소스 할당량을 제한할 수 있다.
  • Namespace 별 접근 방법
    • 같은 namespace 안에 있는 리소스들은 서로를 이름만으로 접근할 수 있다.
    • mysql.connect("db-service")
    • my-dev라는 이름의 namespace 안에 있는 리소스를 부른다면 추가 정보를 더 입력한다.
    • mysql.connect("db-service.my-dev.svc.cluster.local")
      • 주소 상세 설명
        • cluster.local : Kubernetes 클러스터의 default domain
        • svc : sub domain
        • my-dev : 지정 namespace
        • db-service : 서비스 name
Namespace를 지정한 Pod 생성
  • 명령어로 생성

kubectl run nginx --image nginx --namespace=네임스페이스이름

  • pod와 같이 yaml에 지정 Pod를 생성할 때 특정 namespace를 지정
  • namespace 단독 생성
    • 명령어
  • yaml
default namespace를 바꾸고 싶다면?
namespace 상관없이 전체 pod 확인
namespace에 자원할당 방법 – ResourceQuota

Label & Selector

분류가 어떤 것이든 그 분류대로 객체를 그룹화할 수 있어야 하며, 목적에 따라 필터링할 수 있어야 한다.

Kubernetes에는 수 백 수 천 개까지 객체가 존재할 수 있다 (Pod, Service, Replica Set, Deployment etc…) 이 객체들을 필터링하고 카테고리 별로 객체를 조회할 필요가 있다.

Label
  • 각 아이템마다 붙여진 속성
  • 한 객체당 원하는 만큼의 label을 붙일 수 있다.
  • Pod 설정 yaml 파일
Selector
  • label로 붙여진 속성들을 필터링
  • 특정 label이 있는 pod 조회

Kubernetes는 추가로 다른 객체끼리 연결할 때 label과 selector를 활용하기도 한다.

  • ReplicaSet에서 Label과 Selector를 활용하는 사례
  • replicaSet 객체 자체의 label
  • 생성될 pod의 label
  • 복제 대상인 pod를 확인하는 label 총 3가지가 활용되었으므로 혼동하지 않게 조심해야 한다.
Annotations
  • 정보 전달 목적의 다른 세부 정보를 담는 속성
    • (ex) 빌드 정보, 버전, 이름, 연락처, 이메일 등등

감사합니다.

Written by 구 연수 / Yeonsoo koo

Software Engineer