ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Kubernetes) Kubernetes namespace 알아보기
    Cloud/Kubernetes 2022. 10. 12. 01:04
    학습 목표 : kubernetes namespace사용하기위해 Kubernetes Object를 알아보고 namespace를 생성해본다.

    Kubernetes Object 란?

    1. Kubernetes는 Object(Resource)와 Object를 관리하는 Controller로 나뉜다.
    2. Object는 Kubernetes 시스템에서 영속성을 갖는다.
    3. Object를 생성하면 Kubernetes 시스템은 개발자/운영자가 원하는 상태를 보장하기위해 지속적으로 동작한다.
    4. Object는 cluster 상태를 나타내기위해 사용한다.
    5. Controller는 status와 spec이 일치하도록 Object를 관리한다.
      • status : Kubernetes 시스템과 component에 의해 제공되고 업데이트된 Object의 현재상태를 설명한다.
      • spec : Object 특성으로 추구하는 상태
      • status 와 spec이 일치하게 관리한다는 것은, Object가 추구하는 상태를 Controller가 유지할수 있게 관리하는것을 의미합니다.


    Kubernetes의 기본 Object

    1. Pod
      • Kubernetes에서 가장 기본적인 배포단위
      • container를 포함하는 단위
      • Kubernetes의 특징중 하나로 container를 개별적으로 배포하는것이 아닌 Pod 단위로 배포한다.
      • Pod는 하나 이상의 container를 포함한다.
    2. Volume
      • container는 기본적으로 상태가 없는 app container를 사용한다.
      • 상태가 없다는것은 container혹은 node에 문제가 있어 container를 새로 실행했을 때 다른 node에 자유롭게 옮길 수 있다는 뜻이다.
      • 하지만 container가 실행되지 않거나 삭제된다면 현재까지 저장한 데이터는 사라진다는 단점이 있다.
      • app의 특성에 따라 container에 문제가 발생해도 데이터를 보존해야하는 경우 Volume을 사용한다.
      • Volume은 container가 재시작 하더라도 데이터를 유지한다.
    3. Service
      • Pod 집합에서 실행중인 애플리케이션을 네트워크 서비스로 노출하는 추상화 방법
      • Service는 Pod에게 고유한 IP 주소와 Pod 집합에 대한 단일 DNS를 부여하여 Pod가 cluster 안 어디에있든 고정주소를 통해 접근할 수 있다.
    4. Namespace
      • Namespace는 Kubernetes cluster 하나를 여러개의 논리적인 단위로 나누어 사용한다.
      • Pod와 Service등 namespace별로 생성하고 관리될 수 있다.


    Kubernetes Object 기술 방법 - YAML

    # Kubernetes Object YAML 파일 예
    apiVersion: v1
    kind: Pod
    metadata:
      name: nginx-pod
      labels:
        app: myweb
    spec:
      containers:
      - name: myweb-container
        image: nginx:latest
        ports:
        - containerPort: 80
    1.  apiVersion
      • Object를 생성하기 위한 Kubernetes API 버전 명시
    2. kind
      • 어떤 종류의 Object를 생성하고자 하는지 명시
    3. metadata
      • Object 이름 부여
      • Object를 유일하게 구분지어줄 데이터
      • name : 동일 namesapce상 유일한 값
      • labels : 특정 kubernetes Object만 나열하거나 검색할 때 유용하게 쓰이는 key-value 쌍
    4. spec
      • 생성할 Object의 구체적인 내용을 정의한다
      • spec의 format은 Kubernetes Object 종류에따라 다르다. 다음은 자주쓰이는 spec 항목이다.
        1. containers : Pod에는 1개이상의 container를 포함하며, containers에 원하는 만큼 container를 정의할 수 있다.
        2. image : pull 받아올 docker image의 주소
        3. replicas : 원하는 Pod개수
        4. selector : controller가 어떤 Pod를 감시하는지 명시
        5. template : 새로운 Pod를 생성할 때 사용할 template. selector값이 template의 labels와 일치해야 관리되는 Pod를 제대로 선택할 수 있다.


    namespace 란?

    1. namespace는 Kubernetes cluster 내의 논리적인 분리단위다.
    2. namespace 단위로는 자원할당, 사용자 접근 권한관리 등을 수행할 수 있다.
    3. 별도로 namespace를 지정하지 않으면 항상 default namespace에 Object를 생성한다.
    4. namespace는 논리적인 분리단위를 의미하고 물리적인 분리를 의미하지는 않는다.
    5. 하나의 cluster를 논리적으로 개발/통합/운영으로 namespace를 분리한다.
      • dev namespace(개발) : 개발 용도로 사용
      • std namespace(통합) : 통합 목적으로 사용
      • prd namespace(운영) : 운영 목적으로 사용


    참고



    댓글

Designed by Tistory.