ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Kubernetes가 사용되는 이유
    Kubernetes 2024. 5. 8. 10:15
    728x90

    이 내용은 <코어 쿠버네티스>를 참고해 작성하였습니다.

    Kubernetes란?

    통합적인 인프라 관리, 버전 관리를 위한 도구

    클라우드 컴퓨팅의 핵심 기술 중 하나

     

    • CNI/CSI : 컨테이너 네트워킹/스토리지 인터페이스로, 각각 쿠버네티스에서 실행되는 파드에 대한 플러그형 네트워킹과 스토리지를 가능하게 한다
    • Container : 도커 및 OCI 이미지. 일반적으로 애플리케이션을 실행한다.
    • Control Plane : 컨테이너의 스케줄링과 모든 쿠버네티스 객체의 관리가 이루어지는 곳\
    • DaemonSet : 디플로이먼트와 유사하나, 클러스터의 모든 노드에서 실행된다
    • Deployment : 쿠버네티스에서 관리되는 파드의 모음이다
    • Kubectl : 쿠버네티스 컨트롤 플레인과 통신하기 위한 명령행 도구
    • Kubelet : 클러스터 노드에서 실행되는 쿠버네티스 에이전트. 컨트롤 플레인이 동작하는 데 필요한 작업을 수행
    • Node : kubelet 프로세스가 실행되는 머신
    • OCI : 실행 가능한 독립형 애플리케이션을 만들기 위한 일반적인 이미지 형식.
    • Pod : 실행 중인 컨테이너를 캡슐화하는 쿠버네티스 객체

     

    쿠버네티스는 kubectl 하나로 모든 애플리케이션의 전체 상태 공간을 중앙에서 관리할 수 있는 방법을 제공

    • K8s API 서버에 REST API를 호출하는 명령행
    • 클라이언트

     

    컨테이너의 역할

    • App 실행
    • App에 의존하는 서비스 실행 Ex. 맞춤형 스토리지 프로비저닝, 방화벽 요구사항
    • App 실행에 필요한 App 인프라 관리 Ex. 컨테이너에 IP 주소 할당

     

    이미지를 사용하면 불변 서버를 실행할 수 있으며 최고 수준의 단순성을 가질 수 있음

     

    쿠버네티스는 모든 것을 YAML이나 JSON으로 정의된 일반 텍스트로 정의하고, 선언적인 방식으로 OCI 이미지를 실행

    • 네트워크 규칙이나 역할 기반 인증 및 권한 부여 등을 구성하는 데도 이와 동일한 방법을 사용
    • Dockerfile 작성 -> image 빌드 -> OCI 레지스트리에 push -> pul

     

    클라이언트와 mysql 서버를 쿠버네티스 환경에서 컨테이너로 실행하고 싶다면 두 개의 파드를 만들어 수행할 수 있다.

     

    일반적으로 YAML 코드 일부를 텍스트 파일로 저장하고 쿠버네티스 클라이언트 도구를 사용해 실행한다.

    kubectl은 k8s API 서버에 연결하고 저장되어야 하는 YAML의 정의를 전송한다.

    그러면 쿠버네티스는 API 서버에 있는 두 개의 파드 정의를 자동으로 가져와 어디에서 실행 중인지 확인

     

    필수조건

    • 클러스터 내 노드가 계속해서 발생하는 이벤트에 응답하고 API 서버에 통신하는 kubelet을 통해 그 노드 객체에 상태를 업데이트
    • OCI 이미지가 존재하고 쿠버네티스 클러스터에서 해당 노드에 액세스 가능

     

    이렇게 하면 클러스터에 있는 모든 애플리케이션의 전체 상태 공간에 대한 변경을 지속적으로 요청할 수 있음을 보장하고, 시간이 지나면서 기본적인 쿠버네티스 플랫폼이 이러한 앱의 동작 방법에 대한 실행 계획을 파악할 수 있게 된다.

     

    쿠버네티스를 사용하면 직접 클러스터에 있는 모든 웹의 원하는 상태, 네트워킹 방법, 실행 위치, 사용하는 스토리지 등을 정의할 수 있으나 기본적인 세부사항 구현은 쿠버네티스에 위임 가능하다.

     

    • 포트나 IP 경로의 서버 구성
    • 애플리케이션을 위한 영구 스토리지 가용성
    • 특정 서버나 임의의 서버에 대한 소프트웨어 호스팅
    • 애플리케이션이 서로 액세스하기 위한 RBAC나 네트워크 규칙 같은 보안 프로비저닝
    • 애플리케이션별 또는 글로벌 기반의 DNS 구성

     

    이 모든 컴포넌트는 쿠버네티스 API에서 객체로 표현하는 구성 파일에 정의된다.

    쿠버네티스는 변경 사항을 적용하고, 이러한 변경을 모니터링하며, 원하는 최종 상태에 도달할 때까지 순간적인 실패나 중단을 해결하는 데 이 빌딩 블록과 컨테이너를 사용한다.

     

     

    Dev : 컨테이너 오케스트레이션 플랫폼을 통해 인스턴스 실행 과정, 호스트 프로비저닝, 컨테이너 연결 등을 자동화해 오케스트레이션 절차를 최적화하고 애플리케이션 수명주기를 연장할 수 있다.

     

    • 컨테이너는 파드가, 파드는 쿠버네티스가 필요

     

    • API 서버 내부의 모든 기능에 대한 클라우드 중립적인 API 노출
    • 쿠버네티스 컨트롤러 매니저에서 모든 주요 클라우드 및 하이퍼바이저 플랫폼과의 통합
    • 모든 서비스, 애플리케이션, 데이터 센터 구성이나 쿠버네티스 지원 인프라의 상태를 저장하고 정의하기 위한 내결함성 프레임워크 제공
    • 개별적인 호스트나 서비스 또는 애플리케이션에 관계없이 사용자가 마주하는 다운타임 최소화하는 배포 관리
    • 롤링 업데이트 인식을 통해 호스트와 호스팅된 애플리케이션에 대한 스케일링 자동화
    • 로드 밸런싱을 사용해 내부 및 외부 통합의 생성
    • 노드 레이블링 및 쿠버네티스 스케줄러 : 메타 데이터에 기반한 특정 가상화 하드웨어에서 실행되도록 애플리케이션 할당
    • 데몬셋을 통한 고가용성 플랫폼과 클러스터의 모든 노드에서 실행되는 컨테이너 우선순위 지정하는 기술 인프라 제공
    • API 서버와 통합된 CoreDNS에 의해 구현된 DNS 통한 서비스 검색 허용
    • 영구적인 애플리케이션을 실행하는 것과 같은 방법으로 저장소 및 컨테이너를 사용하는 배치 프로세스 실행
    • API 확장 포함, 포트 매핑이나 연결없이 사용자 정의 리소스 정의를 사용해 네이티브 API 기반 프로그램 구성
    • Kubectl exec / describe를 통한 언제든지 모든 컨테이너에 대한 원격 실행
    • StorageClass API와 PersistentVolumes를 통한 컨테이너에 대한 로컬/원격 스토리지의 마운트와 선언적 스토리지 볼륨 관리

     

     

    어떻게 Immutable할 수 있는가?

    쿠버네티스는 전체 OS 업데이트할 때만 업데이트 되는 기본 OS 있고, 해당 OS 사용해 노드/쿠버네티스를 설치하기 때문이다.

    728x90
Designed by Tistory.