isPowerfulBlog

[Kubernetes] Kubernetes Tutorial for Beginners 정리(1) 본문

Infra

[Kubernetes] Kubernetes Tutorial for Beginners 정리(1)

왕밤빵도라에몽 2023. 6. 3. 22:04

Kubernetes?

컨테이너 오케스트레이션 툴

등장 배경

  1. 모놀리식 아키텍처 -> 마이크로 아키텍처
    개발, 테스트, 장애 대응 등 여러 면에서 더 유연한 마이크로 아키텍처로 전환
  2. 서비스의 규모가 커지면서 관리해야하는 컨테이너의 개수 증가 -> 컨테이너들을 쉽게 관리할 툴 필요

오케스트레이션 툴의 특징

  • 고가용성
  • 확장성
  • 백업 및 복원

Main K8s Components

Pod

  • k8s에서 가장 작은 단위
  • 컨테이너 추상화 개념
  • 보통 하나의 애플리케이션 당 Pod 하나
  • 각각의 Pod들은 자신의 IP 주소를 가짐
  • Pod가 재생성되면 IP 주소가 새로 할당됨 -> 관리하기 힘들어

Service

  • 각각의 Pod에 영구적인 IP 주소를 붙일 수 있음
  • Pod의 lifecycle에 연결 X -> Pod가 죽어도 Service와 이 IP 주소는 그대로
  • 외부 서비스에서 접속할 때: http://{NODE_IP}:{PORT} -> 테스트 할 때는 괜찮은데, 최종 product에서는 적절하지 X
  • Replecates의 로드밸런서 역할

Ingress

  • ingress에 먼저 request를 보내면 service로 forwarding 됨 -> 외부에서 애플리케이션 접속 시, 도메인 네임 url로 접속 가능

ConfigMap

  • 애플리케이션의 외부에 설정 내용들을 저장해놓음
  • 서비스 이름, url 등등 설정이 바뀔 때 이미지를 다시 빌드하지 않아도 됨
  • 보안 수준 떨어짐

Secrets

  • 보안이 필요한 데이터들 저장

Volumes

  • 하드 드라이브에 속해있는 물리적 저장 공간, pod에 연결되어있음
  • 재시작되어도 모든 데이터가 유지됨

Deployment

  • 애플리케이션 pod, replica에 대해서 계획 및 선언
  • pod의 추상화 개념 -> pod를 직접 건드는 것이 아니고, deployment를 통해서 컨트롤
  • DB는 state를 가지기 때문에 deployment로 replica 만들 수 X, replica 사이에서 data의 모순이 있어서는 안 됨

StatefulSet

  • DB(MySQL, MongoDB, ElasticSearch 등)는 deployment가 아닌 statefulset을 이용해서 생성
  • deployment와 마찬가지로 pod, replica에 대해 계획 및 선언
  • DB를 읽고 쓰는 과정에서 싱크를 확실하게 맞춰주는 역할을 함

K8s Architecture

Node(Worker) process

  • 실제로 일하는 노드
  • 각각의 노드들은 여러개의 pod를 가짐
  • 모든 노드에는 pod를 스케줄링하고 관리하는 3개의 프로세스가 존재Container Runtime
  • 컨테이너 생성Kubelet
  • 컨테이너, 노드와 상호작용
  • 컨테이너 내부의 pod 시작Kube Proxy
  • request forwarding

Master process

  • pod 스케줄링
  • 모니터링
  • pod re스케줄링, restart
  • 4개의 프로세스가 존재API Server
  • cluster gateway
  • 인증을 위한 gatekeeper 역할
  • 새로운 pod를 스케줄링하거나 새로운 서비스를 deploy 하고 싶다면 API server와 소통해야함

Scheduler

  • 어떤 노드에 pod를 스케줄링할지 결정

Controller manager

  • 클러스터의 상태 변화를 감지

etcd

  • 클러스터의 변화를 key value 형태로 저장

Cluster Set up 예시

  • 2 Master Nodes -> 마스터는 리소스 덜 잡아먹음
  • 3 Workder Nodes -> 일은 실제로 워커노드가 하기 때문에 리소스 많이 잡아먹음

Add new Master/Node server

  1. 빈 서버 만들기
  2. master 또는 node에 필요한 process 설치
  3. 클러스터에 추가

Reference

https://www.youtube.com/watch?v=X48VuDVv0do