쿠버네티스 기초 &심화

Featured image

쿠버네티스의 등장배경

컨테이너 서비스란

컨테이너란 애플리케이션을 언제든지 실행할 수 있게 소스코드, 종속성등 필요한 요소들을 하나의 런타임으로 패키징한 논리적 공간

==경량의 격리된 프로세스

컨테이너 환경의 특징

일반 서버에서 애플리케이션을 실행하는 것과 비슷하지만 언제든지 프로세스 수준의 속도로 빠르게 실행할 수 있고 한번에 여러 개의 컨테이너를 동시에 실행가능한 점이 다르다

컨티에니 자체 어플리케이션 환경의 관리만 하면 되기 때문에 서버관리 비용이 절감되고 개발팀과 운영팀의 업무 분리로 각자의 업무와 세분화된 관리에 집중이 가능해진다

컨테이너 오케스트레이션

컨테이너를 자동으로 관리할 수 있는 소프트웨어 기술이다

개발자는 컨테이너를 자동관리하고 정확하게 조정하여 많은 수의 컨테이너 애플리케이션의 수동관리로 인한 인적 오류를 최소화 할 수 있다

대표적인 도구는 도커 스윔과 쿠버네티스

정리

컨테이너 오케스트레이션은 관리의 복잡성을 줄여주고 자동화하는 기술로 배포관리, 제어 및 모니터링, 스케일링, 네트워킹을 해준다

배포관리 -> 컨테이너를 어느 노드에 한정된 자원에 맞춰 최적의 스케줄링을 할것인가

제어 및 모니터링 -> 어떻게 실행중인 여러 컨테이너들의 상태를 추적하여 관리할 것인가

스케일링 -> 변화하는 워크로드 및 사용량 확장에 따른 대응은 어떻게 할 것인가

네트워킹 -> 여러 컨테이너의 상호작용을 위한 연결은 어떻게 할 것인가

쿠버네티스

컨테이너화된 애플리케이션을 위한 오케스트레이션 플랫폼으로 기업은 대규모 컨테이너 워크로드의 고나리 및 구성을 자동화 할 수 있다

자동화 플랫폼

쿠버네티스의 사용목적 -> Desired state managenent (사용자가 원하는 상태를 관리해준다)

쿠버네티스 오케스트레이션의 6가지 기술

  1. Service discovery & Load Balancing 서비스 검색기능

각 pod에 단일 dns의 이름과 ip주소 할당

트래픽이 높으면 여러 pod를 포함하는 서비스 전체에 자동으로 로드밸런싱 수행

서비스와 pod를 라벨이라는 키워드를 통해 하나의 연결점을 만들어 외부 트래픽이 들어왔을때 자체적으로 연결되어 있는 pod들의 부하 분산을 실행할 수 있음

  1. authomated rollouts and rollbacks 새로운 pod를 출시하고 기존 pods와 교환(대치)

실패된 배포는 변경사항을 되돌릴 수 있다(롤백)

  1. self healing pods의 상태 확인하고 실패한 컨테이너를 다시 시작한다

만약 pods에 장애가 발생하면 k8s는 상태 확인이 될때까지 해당 pods에 연결 허용 안함

상태를 지속적으로 확인하고 상태값이 문제가 없어질떄 연결허용

  1. automatic Bin-packing 구성된 cpu및 RAM의 요구 사항에 따라 컨테이너를 효율적으로 할당하여 리소스 사용도 최적화

그때 그때 필요한 cpu메모리를 할당하고 적절한 용량을 배분하는 기술

  1. Storage orchestration 로컬 및 네트워크 스토리지 퍼블릭 클라우드 제공업체등 다양한 스토리지 시스템을 K8s을 이용해 마운트

  2. Secret and Configuration management 컨테이너 이미지를 재구성하지 않고도 내부 구성 및 기밀정보를 업데이트 가능하도록 지원

이미지는 readonly로 불변성이지만 내부 구성을 업데이트 지원

쿠버네티스 키 포인트

  1. 선언적 구성 기반의 배포 환경 원하는 상태를 선언(yaml)하고 현재 상태와의 지속적인 체크를 통해 자동 복구 되도록 배포

  2. 기능 단위의 분산 각각의 기능들이 개별적인 구성요소로써 독립적인 분산 컨트롤러로 관리

  3. 클러스터 단위의 중앙제어 전체 물리 리소스를 클러스터 단위로 추상화하여 관리 컨트롤플레인 역할의 마스터 노드를 통해 각클러스터 관리

  4. 동적 그룹화 가능 구성요소들에 라벨및 어노테이션을 키-벨류 단위로 설정

  5. API기반의 상호작용 구성요소들은 kube-apiserver를 통해서만 상호접근이 가능 kube-apiserver가 가장 중추