Kubernetes의 정의

  • 컨테이너화된 워크로드의 관리 및 오케스트레이션을 위한 이식가능하고 확장성 있는 오픈소스 플랫폼
  • 복잡한 컨테이너 관리 작업을 추상화하고, 다양한 컴퓨팅 환경에서 컨테이너를 오케스트레이션 하는 선언적 구성을 제공

Kubernetes 이점

  • Kubernetes사용의 이점은 작업 추상화를 기반으로 합니다.
  • 컨테이너 자동 복구. 예를 들어 실패한 컨테이너를 다시 시작하거나 컨테이너를 바꿉니다.

  • 요청에 따라 동적으로 배포된 컨테이너 개수 스케일 업 또는 다운

  • 컨테이너의 자동 롤링 업데이트 및 롤백

  • 스토리지 관리

  • 네트워크 트래픽 관리

  • 사용자 이름, 암호 등 중요한 정보 저장 및 관리

Kubernetes 고려사항

  • 배포, 크기 조정, 부하 분산, 로깅 및 모니터링과 같은 측면은 모두 선택 사항입니다. 이와 같은 측면을 해결하기 위해 요구 사항에 맞는 최적의 솔루션을 찾아야 합니다.

  • Kubernetes는 플랫폼에서 실행할 수 있는 애플리케이션의 유형을 제한하지 않습니다. 컨테이너에서 애플리케이션을 실행할 수 있는 경우 Kubernetes에서 애플리케이션을 실행할 수 있습니다. 컨테이너화된 솔루션을 최대한 활용하기 위해 개발자는 마이크로 서비스 아키텍처와 같은 개념을 이해해야 합니다.

  • Kubernetes는 미들웨어, 데이터 처리 프레임워크, 데이터베이스, 캐시 또는 클러스터 스토리지 시스템을 제공하지 않습니다. 이 항목은 모두 컨테이너로 실행되거나 다른 서비스 제공 사항의 일부로 실행됩니다.

  • Kubernetes가 컨테이너를 실행하려면 Docker 같은 컨테이너 런타임이 필요합니다. 컨테이너 런타임은 컨테이너 관리를 담당하는 개체입니다. 예를 들어 컨테이너 런타임은 컨테이너의 상태를 시작하고 중지하며 보고합니다.

  • Kubernetes 환경을 유지 관리할 책임이 있습니다. 예를 들어 OS 업그레이드와 Kubernetes 설치 및 업그레이드를 관리해야 합니다. 네트워킹, 메모리 및 스토리지와 같은 호스트 머신의 하드웨어 구성도 관리합니다.

Kubernetes Cluester

클러스터는 함께 작동하고 단일 시스템으로 볼 수 있도록 구성하는 컴퓨터 세트 입니다.

Kubernetes 아키텍처

  • Control plane

    • Kubernetes의 오케스트레이션 기능을 관리하는 서비스 컬렉션
  • Node

    • 컴퓨팅 워크로드가 실행되는 위치 입니다. 각 노드는 API서버를 통해 Control plane과 통신하여 노드의 상태 변경 내용을 알립니다.

Control plane에서 실행되는 서비스

  • API서버

    • API서버는 Kubernetes클러스터의 컨트롤 플레인에 대한 프론트 엔드로 간주할 수 있습니다.
    • Kubernetes의 구성 요소 사이에서 수행되는 모든 통신은 이 API를 통해 수행됩니다.
  • 백업 저장소

    • Kubernetes 클러스터의 전체 구성을 저장하는데 사용하는 지속성 저장소 입니다.

    • etcd라는 고가용성 안정적인 분산 Key-Value 저장소 입니다.
    • etcd 저장소는 클러스터내 모든 개체의 현재 상태 및 원하는 상태를 저장합니다.
  • 스케줄러

    • 모든 노드에서 워크로드의 할당 작업을 담당하는 구성요소 입니다.

    • 클러스터에서 새로 만든 컨테이너를 모니터링하고 해당 컨테이너를 노드에 할당 합니다.
  • 컨트롤러 관리자

    • 컨트롤러 관리자는 API 서버를 통해 클러스터에 구성된 컨트롤러를 시작하고 모니터링하는 일을 담당합니다.
  • 클라우드 컨트롤러 관리자

    • 클라우드 컨트롤러 관리자는 클러스터가 클라우드 환경에서 실행되는 경우 클러스터의 기본 클라우드 기술과 통합됩니다.
    • 해당 서비스는 부하 분산 장치, 큐 및 스토리지 등이 될 수 있습니다.

Node에서 실행되는 서비스


  • Kubelet

    • Kubelet는 클러스터의 각 노드에서 실행되고 API 서버의 작업 요청을 모니터링하는 에이전트입니다.
    • 에이전트는 요청된 작업 단위가 실행 중이고 정상 상태인지 확인합니다.
    • Kubelet는 노드를 모니터링하고 각 노드에서 예약된 컨테이너가 예상대로 실행되는지 확인합니다.
  • Kube-proxy

    • Kube-proxy 구성 요소는 로컬 클러스터 네트워킹을 담당하며 각 노드에서 실행됩니다. 
    • 이 구성 요소는 각 노드에 고유한 IP 주소가 있는지 확인합니다. 
    • iptables 및 IPVS를 사용하여 트래픽의 라우팅과 부하 분산을 처리하는 규칙을 구현합니다.
    • CoreDNS를 기반으로 하는 DNS 클러스터 추가 기능이 권장되며 기본적으로 설치됩니다.
  • Container Runtime

    • 컨테이너 런타임은 Kubernetes 클러스터에서 컨테이너를 실행하는 기본 소프트웨어입니다.
    • 런타임은 컨테이너 이미지를 가져오고, 시작하고, 중지하는 일을 담당합니다.
    • Kubernetes는 Docker, rkt, CRI-O, containerd 및 frakti를 비롯한 여러 컨테이너 런타임을 지원합니다.


Kubernetes Pod

Kubernetes Pod의 수명 주기

Pod의 상태

상태설명
보류 중Pod 실행이 예약된 후 컨테이너 런타임은 컨테이너 이미지를 다운로드하고 Pod의 모든 컨테이너를 시작합니다.
실행 중Pod 내의 모든 리소스가 준비된 후 Pod는 실행 중 상태로 전환됩니다.
성공Pod가 의도한 작업을 완료하고 성공적으로 실행되면 Pod는 성공 상태로 전환됩니다.
실패Pod는 다양한 이유로 실패할 수 있습니다. Pod의 컨테이너가 실패하여 다른 모든 컨테이너가 종료되었을 수 있습니다. 또는 Pod 컨테이너를 준비하는 동안 이미지를 찾지 못했을 수 있습니다. 이와 같은 경우 Pod가 실패 상태로 전환될 수 있습니다. Pod는 보류 중 상태 또는 실행 중 상태에서 실패 상태로 전환될 수 있습니다. 특정 실패로 인해 Pod가 보류 중 상태로 돌아갈 수도 있습니다.
알 수 없음Pod 상태를 확인할 수 없는 경우 Pod는 알 수 없음 상태가 됩니다.

컨테이너 상태

상태설명
대기 중컨테이너의 기본 상태이며 컨테이너가 실행 또는 종료되지 않은 상태입니다.
실행 중컨테이너가 문제없이 예상대로 실행되고 있습니다.
종료됨컨테이너가 더 이상 실행되지 않습니다. 모든 작업이 완료되거나 어떤 이유로 컨테이너가 실패했기 때문입니다. 두 사례를 모두 디버그할 때 이유와 종료 코드를 사용할 수 있습니다.




Pod Template

Replication Controller

Deployment

Services


Services Type

Type
ClusterIP클러스터 내의 서비스 세트에서 서비스를 사용할 수 있도록 서비스에 할당된 주소입니다. 예를 들어 애플리케이션의 프런트 엔드 및 백 엔드 구성 요소 간 통신이 있습니다.
NodePortKubernetes 컨트롤 플레인이 서비스에 할당하는 30000~32767 사이 노드 포트입니다. 예를 들어 clusters01의 192.169.1.11이 있습니다. 그런 다음, 공개하려는 Pod의 대상 포트를 사용하여 서비스를 구성합니다. 예를 들어 프런트 엔드 중 하나를 실행하는 Pod에서 포트 80을 구성합니다. 이제 노드 IP 및 포트 주소를 통해 프런트 엔드에 액세스할 수 있습니다.
LoadBalancer애플리케이션을 실행하는 노드와 공용 네트워크 액세스에 Pod를 공개하는 노드 간에 부하를 분산할 수 있는 부하 분산 장치입니다. 일반적으로 클라우드 공급자를 사용할 때 부하 분산 장치를 구성합니다. 이 경우 외부 부하 분산 장치의 트래픽은 애플리케이션을 실행하는 Pod로 전송됩니다.




Ingress

  • No labels