System Engineering/Kubernetes

2. Kubernetes Architecture

Hopulence 2021. 2. 23. 17:17
반응형

1. Kubernetes

 K8s는 컨테이너의 집합(Pod)을 효율적으로 배포•관리하기 위한 오픈소스 Ochestrator이다.

 

K8s Architecture

  • Master : K8s의 전체적인 Control
  • Worker(Node) : Container가 배포되어 구동되는 Node
  • API Server : Node, Web Console, Cli 명령어 등과 통신
  • Etcd : K8s의 Configuration 등, Stateful 정보를 저장하기 위한 Key-Value 방식의 분산형 DB
  • Scheduler : 컨테이너를 어느 노드에 배포할 것인지 결정
  • C-M(Controller Managers) : 구동중인 컨테이너가 죽으면 Restart 시키는 등의 관리
  • C-C-M(Cloud Controller Managers)
  • Container Runtime : 파일 시스템이나 네트워킹과 같은 시스템 리소스를 가상화하는 Namespace와 CPU/Memory등의 리소스를 할당하는 cgroup을 설정하고 명령 실행. 
  • Kubelet : Master로 부터 명령을 받는 Agent로써, 컨테이너의 상태 정보를 Master로 전송.
  • Kube-prxoy : 컨테이너가 외부로 통신하기 위한 NAT와 Routing
  • kube-dns : Pod의 IP는 ephemeral이므로 재기동 후 주소가 변경될 수 있다. Pod가 배포되면 모든 컨테이너의 Service IP는 '/etc/relosv.conf' 경로에 저장되어 Pod간 통신 시 Service의 Label을 바라본다.

* Etcd에 모든 Config 정보와 Password 등의 보안 정보가 저장되므로 이중화와 필요시 암호화는 것이 좋다.

* Dashboard : GUI로 Cluster Control이 가능하나, 보안에 취약해서 사용에 유의하여야 한다.

 

2. Pod

 - n개의 Container로 구성된 Building Block으로 Cluster의 최소 단위

    * 동일 Pod 내 Container는 Local Disk와 IP를 공유

 - Pod는 etcd의 Manifest에 정의 됨

    * Manifest : API 객체에 대한 Text 파일

 

Pod 당 1~2개(Main Application+Sub Sidcar)의 Container를 사용하는 것이 좋다

  * Sidecar : HA Proxy / Log Collector / Heartbeat 등의 Sub Agent

  apiVersion: v1
  kind: Pod
  metadata:
    name: nginx
  sepc:
  containers:
    - name: nginx
      image: nginx:1.7.9
      ports:
      - containerPort: 80
  • apiVersion : Kubernetes의 API 버전
  • kind : Resource의 종류

 

3. Label

  - Key-Value 페어로 구성된 1개 이상의 Pod tagging으로 K8s의 리소스를 선택하는데 사용

  - K8s에서는 Equality와 Set의 두가지 방식을 제공

 

    * 용도(Frontend / Backend / DB) 또는 사용자(Developer / Operator) 별로 Pod 식별

 

  apiVersion: v1
  kind: Pod
  metadata:
    key1: value1
    key2: value2

 

  1) Equality based Selector 

    : Key와 Value가 일치하는 경우를 식별하며, ReplicaController에서 사용

environment = production
tier != frontend

 

2) Set based Selector

    : Key 집합 내에 Value가 존재하면 Pod 식별. ReplicaSet에서 사용

environment in (production, qa)
tier notin (frontend, backend)
partion
!partion

 

4. Namespace

 - 서비스(팀)마다 권한과 리소스를 할당해주기 위한 일종의 Tenant 역할로 고유한 이름을 가진다

 - 동일한 Namespace 내 리소스를 구별하기 위해 Label 사용

 

 

5. Reference

쿠버네티스 컴포넌트
Kubernetes Advanced Workshop
조대협의 블로그
반응형