ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Kubernetes
    개발/K83 2022. 2. 20. 16:49

     

     

    시작에 앞서, Terraform / AWK_EKS

    Terraform

    설치 SCRIPT를 제공해주어 Module들을 사용할 수 있도록 지원
    • IAC 표준 , Cloud 업체에서 관리해서 사용 할 수 있도록 잘 되어 있다.
    • User는 Script의 module name , version 만 설정하면 구축 가능

     

    AWS_EKS

    Amazon Elastic Kubernetes Service(Amazon EKS)는 Kubernetes를 실행하는 데 사용할 수 있는 관리형 서비스
    • 제어 플레인 또는 노드를 설치, 작동 및 유지 관리할 필요 X
    • Kubernetes는 컨테이너화된 애플리케이션의 배포, 조정 및 관리 자동화를 위한 오픈 소스 시스템

     

    K8S ( Kubernetes )

    Docker의 Container의 개념을 사용
    • 하나의 Server에서 여러 App 구축

    → VM을 이용한 APP 구축 ( 서버마다 동일한 환경 설정 , 같은 서버내 다른 APP 설치로 장애 발생 )

    → Container를 이용한 App 구축 순서로 발전 ( 서버에 동일한 환경 FIX하여 setting )

     

    컨테이너 오케스트레이션 시스템

    문제점 : 서버의 환경은 통일하게 되었지만, 배포 서비스 시 별도 설정이 필요

    → 이를 해결하기 위하여 나타남( Google )

    • 선언적 Update를 지원 = 서버가 죽더라도 알아서 N개를 띄우라고 설정하면 복구가 되는한 계속 실행

     

    Container Deployement

    1. Pod

    파드

    쿠버네티스에서 생성하고 관리할 수 있는 배포 가능한 가장 작은 컴퓨팅 단위
    • 1개 이상의 컨테이너가 뜨는 가장 작은 단위
    • 여러 컨테이너 사용 시 Stroage 및 Network는 공유하여 사용
    • 1Pod = 2Continaer

    2. Deployment / Replicaset

    디플로이먼트

    Controller로써, Pod 와 Replicaset에 대한 선언적 업데이트를 제공한다.
    • Pod를 관리하는 Controller ( Rolling Update / Recreate )
    • Rolling Update시 새로운 Version의 Pod가 생기고 나서야 기존에 Pod를 죽인다.
    • 가장 일반적인 배포 방법

    3. Statefulset

    Statefulset

    Deployment 및 scailing 관리 / Pod들의 순서 및 고유성 보장
    • Delpoyment와 차이점?

    → 파드는 이름이 고정되어 있고, 처음 구동된 노드(VM or 물리머신)에서만 동작한다

    • 고유성이 필요한 이유?

    → HA 구성 필요성 ( Master , Slave ) / Pod 자체가 1개씩 동작되도록 필요성

     

    4. Daemonset

    daemonset

    Auto healing = pod에 문제가 생기거나 pod가 실행되고 있는 node에 문제가 생기면 해당 pod를 다시 실행
    • 모니터링 , 로그 수집 , Cotrol 을 위한 pod 수행

     

    5. JOB & CRONJOB

    / 크론잡

    • 실행 후 종료가 되는 POD 를 띄우는 목적E.g ) 모델 학습 파이프라인 / 사용자 메일 발송
    • 주기적 실행
    • 외부 Trigger 사용 ( API 이용 )

     

    Container Service

    1. Service

    서비스

    파드 집합에서 실행중인 애플리케이션을 네트워크 서비스로 노출하는 추상화 방법
    • Loadbalance 개념
    • Pod가 죽고 살아나도 쿠버네티스 내부 고정 IP 제공
    • 파드가 서비스 투입 가능 상태 확인 후 서비스의 노출 파드로 투입→ 파드의 모든 컨테이너가 정상적인 Runnig 상태Configure Liveness, Readiness and Startup Probes | Kubernetes
    •  
    • → Pod의 Status가 Ready 상태일때 정상 ( 파드의 Probe 조건이 모두 정상 )

    2. Ingress

    인그레스(Ingress)

    클러스터 내부 서비스 대한 외부 접근 관리
    • 서비스를 직접 LoadBalance 를 사용
    • 인그레스는 서비스를 외부에 제공하며 부가 기능을 제공 할수 있다 ( proxy load balance )
    • 대표적인 인그레스 컨트롤러 ( nginx ingress controller / AWS Load Balance Controller )
    • 인그레스 무중단 배포 주의

    구성 및 저장소

    1. ConfigMap / Secret

    컨피그맵(ConfigMap) | Kubernetes

    Key - Value 형태로 Value를 변경하여 보여주려면 Secret
    • 암호화는 별도로 추가로 해야한다.

     

    2. PV

    생명 주기 이외에도 저장하기 위하여 Pod 에 마운트한다.
    • Pod는 생명 주기 이후에 network , volume이 사라진다. ( 초기화 )

     

    Architecture

    Component

    Control Plance Component

    Cluster 스케쥴 , detect , active

    Kube-apiservier

    Control plance front-end

    Etcd

    DB의 역할로 Key-value ( Nosql 과 유사한듯 )

    kube-scheduler

    Node가 배정되지 않는 Pod들을 Detect / 실행 할 노드를 선택

    kube-controller-manager

    Control-process를 실행하는 컨트롤 플레인 컴포넌트

    cloud-controller-manager

     

    WORKER NODE = Containter 화 된 APP을 실행

    POD는 기본 구성 단위로, 클러스터에서 실행 중인 컨테이너 집합이라고 한다.

     

    Node Component


    Kubelet

    Node에서 실행되는 Agent로써, Pod 에서 컨테이너가 동작하도록 확실히 해준다.

     

    Kube-proxy

    네트워크 개념을 붙인거라 생각하면 된다. ( IP 주소 서비스 관련 )

     

    Container runtime

    컨테이너 실행 담당 ( Docker ,containerd .. )

    댓글

Designed by Tistory.