Architecture

K8s 1) 쿠버네티스 기본

나리사리 2024. 5. 17. 11:20

Kubernetes

※ Docker 등 Container에 대한 기본 설명은 제외하였습니다.


K8s의 구조

  • Master에 API 서버와 상태 저장소를 두고, 각 Node(서버)의 에이전트(Kublet)와 통신하는 구조

K8s의 구조 : Master

  • K8s 클러스터 관리하는 역할
  • 노드의 상황을 파악
  • 컨테이너를 어떤 노드에서 가동할지 선택
  • etcd 분산 저장소를 사용하여 클러스터의 정보를 저장

K8s 구조 (By.Lukša)

Master

 API Server

  • API 서버는 모든 요청을 처리하는 마스터의 핵심
  • 모든 컴포넌트들은 API 서버를 통해서 커뮤니케이션함
  • 인증 및 인가 기능 보유

Scheduler

  • 컨테이너를 어떤 노드에서 가동할지 결정하는 컴포넌트
  • 노드들의 정보를 파악하고 컨테이너를 가동할 적합한 노드 선택

Controller Manager

  • K8s 클러스터의 상태를 감시
  • 시스템의 상태 감시 및 유지
  • 요청된 상태와 현재 시스템의 상태의 차이 감시

etcd 

  • 분산 key-value 저장소
  • 클러스터의 모든 설정, 상태 데이터 저장
  • 스케줄러와 컨트롤러 매니저 등이 API 서버를 통해 etcd의 데이터 조회 및 갱신
  • 마스터에서 분리하여 독자적으로 분리 가능

K8s의 구조 : Node

  • 컨테이너가 가동되는 서버
  • 다수의 노드로 클러스터를 구성
  • 클라우드의 경우 가상머신이 노드가 됨 ex.) ec2...

K8s 구조 (By.Rancher Admin)

Node

Kubelet

  • 실제로 컨테이너를 생성하는 주체
  • 마스터로부터 생성 요청을 받으면 컨테이너를 생성
  • 컨테이너의 상태를 감시하는 역할 수행
  • 컨테이너의 상태를 API 서버로 전송

Kube proxy

  • 각 노드에서 실행되는 네트워크 프록시
  • 노드의 네트워크 규칙을 유지 및 관리
  • 내부 네트워크 세션, 클러스터 외부에서 내부로 네트워크 통신

Pod

  • 한 개 또는 여러 개의 컨테이너의 묶음

 


K8s Object

  • Container, Network 등 분산에 필요한 필요 요소의 추상화

K8s Object

Object

Replica Set

  • Pod를 한 개 이상 복제하여 관리
  • Pod를 생성하고 개수 유지를 위해서 ReplicaSet을 사용해야 함

Daemon Set

  • 클러스터 전체에 Pod를 띄울 때 사용하는 Controller
  • 항상 모든 Node에 특정 Pod가 실행됨
  • 새로운 Node가 추가되면 자동으로 Pod 실행됨
  • 로그 수집기, 모니터링 에이전트 등 실행하는 용도

Stateful Set

  • K8s 대부분의 Object는 Stateless
  • StatefulSet은 상태를 유지하는 Pod를 위한 Object
  • Volume을 사용해서 데이터 저장, Pod 재기동 시에도 유지 가능
  • DB 등을 컨테이너화 할 때 사용 가능

Pod

  • K8s에서 배포할 수 있는 가장 작은 단위
  • 한 개 이상의 컨테이너와 스토리지, 네트워크 속성을 가짐
  • Pod에 속한 컨테이너는 스토리지와 네트워크를 공유하고 서로 localhost로 접근 가능

Service

  • 네트워크와 관련된 Object
  • Pod 간 연결 및 Pod와 외부 네트워크를 연결
  • 여러 개의 Pod에 대한 내부 로드밸런서
  • 내부 DNS에 서비스 등록하여 서비스 디스커버리 역할도 함
  • Pod에 대한 L4 로드밸런싱 수행
  • Cluster IP, Node Port, Load Balancer 등 옵션 지정 가능

Deployment

  • K8s에서 실제 배포를 진행하는 기본 단위
  • 배포 Revision 관리 및 Roll Back 등 다양한 옵션 제공

Ingress

  • 외부 트래픽을 받는 Object
  • Http/ Https 등 L7 레벨로 라우팅 규칙, 로드벨런싱 규칙 등도 포함
  • Service도 외부로 노출 가능하지만 L4 레벨만 가능

Others

  • ConfifMap, Secret : 설정정보 저장 등 Pod 참조
  • Job, CronJab : 배치 관리
  • Label, Selector : 자원 관리 위해 Labeling

 


K8s Manifest File

  • 선언적 설정을 위한 YAML/JSON 형태의 파일

Manifest File

YAML or JSON

YAML

apiVersion: v1
kind: Pod
metadata:
  name: nginx
spec:
  containers:
  - name: nginx
    image: nginx:1.20.1
    ports:
    - containerPort: 80

Json

{
  "apiVersion": "v1",
  "kind": "Pod",
  "metadata": {
    "name": "nginx"
  },
  "spec": {
    "containers": [
      {
        "name": "nginx",
        "image": "nginx:1.20.1",
        "ports": [
          {
            "containerPort": "80"
          }
        ]
      }
    ]
  }
}

apiVersion

  • K8s API 버전 정보 기술

kind

  • Object의 종류 기술 (Pod, Service...)

metadata.name

  • Object 이름을 기술

spec

  • Object 상세 정보 기술
  • 포트 등 환경 정보 기술

 


K8s 사용


K8s 사용

유/무료 설치형 배포판

  • Red Hat OpenShift
  • Pivotal PKS
  • Rancher
  • Kubeadm

Cloud Managed Kubernetes

  • EKS
  • GKE
  • AKS
  • NCloud K8s Service