본문 바로가기
Containers/Kubernetes

kubernetes 구성 요소 및 API

by shinebee* 2020. 7. 22.
  • kubernetes cluster는 마스터와 노드 구성요소가 있고, 추가요소가 있다.
    이런 구성요소들은 API를 통해 메시지를 주고받는다.

 

1. 마스터

  • 클러스터의 Control plane을 제공
  • 클러스터에 대한 전반적인 결정(ex. scheduling)을 수행
  • 클러스터 이벤트를 감지하고 이에 대응
  • production 환경에서는 멀티 마스터 환경을 구성
  • 3대 이상 만드는게 좋다.

 

1) API server (kube-apiserver)

  • 쿠버네티스 클러스터의 모든 구성요소들은 마스터의 API 서버와 메시지를 주고받는다.
  • control plane에 대한 frontend를 담당한다.

 

2) etcd

  • 쿠버네티스 클러스터의 모든 정보데이터를 저장하는 일관성과 고가용성을 지원하는 키-값 저장소
  • key가 있으면 이에 해당하는 value가 있다.
  • key:  value

 

3) 쿠버네티스 컨트롤러 관리자 (kube-controller-manager)

  • 쿠버네티스는 무수히 많은 컨트롤러로 이루어져있다.

  • node controller

    • 노드 관리

    • 노드가 다운되었을 때, 알림과 대응

  • replication controller

    • 복제 컨트롤러를 사용하는 모든 오브젝트 관리

    • 알맞은 수의 pod를 유지하는 기능

  • Endpoint controller

    • service와 pod를 연결

  • Service Account 및 Token Controller

    • kubernetes의 namespace, account, token을 담당

 

4) 클라우드 컨트롤러 관리자 (cloud-controller-manager)

  • 클라우드를 제공하는 업체의 기능과 클라우드에서 동작하는 쿠버네티스 구성요소와 상호작용 할 수 있도록 하는 컨트롤러 관리자
  • kubernetes 1.6에서 도입된 alpha 기능
  • 클라우드 제공업체의 코드와 쿠버네티스의 코드가 서로 독립적으로 발전시켜 나갈 수 있도록 해준다.

 

  • Node controller
    • node가 응답이 없을 때 클라우드 상에서 node가 삭제되어졌는지 확인
  • Route controller
    • 클라우드 인프라의 네트워크 경로 구성 담당
  • Service controller
    • 클라우드 로드밸런서 관리 담당
  • Volume controller
    • 클라우드 볼륨 관리 담당
  • 클라우드 컨트롤러 관리자는 클라우드 공급자(AWS, GCP, Azure, OCI 등)의 의존성을 갖는다.

 

 

2.  노드

  • Worker
  • kubernetes의 런타임 환경 제공
  • 동작중인 pod 유지
  • 필요한 만큼 만든다.

 

1) kubelet

  • 각 노드에서 실행되는 에이전트
  • 마스터로부터 제공받은 pod의 구성정보를 받음
  • 컨테이너가 확실하게 동작하는 것을 관리하고 보장

 

2) kube-proxy

  • 호스트 레벨의 네트워크 규칙을 구성
  • 외부 연결을 pod에 대한 forwarding 담당
  • kubernetes의 서비스 추상화가 가능하도록 함.
  • 컨테이너에 접근 가능하게 해줌

 

3) container runtime

  • 컨테이너 동작을 책임지는 구성요소임
  • 기본적으로 도커 플랫폼 사용
  • 종류
    • Docker
    • containerd
    • cri-o
    • rktlet
    • Kubernetes CRI(Container Runtime Interface)를 구현한 모든 런타임

 

  • kubernetes의 cluster 정보 확인
kubectl cluster-info

 

  • kubernetes의 node 정보 확인
kubectl get nodes
kubectl get nodes -o wide  // 더 자세한 정보
// -o 옵션 : output

 

 

3. 애드온

 

  • cluster DNS
    • kubernetes cluster 내에 여러 object(pod, container, service 등)에 대한 DNS 레코드를 제공
    • 주소기반으로 object를 찾을 수 있음.
    • 서비스만 구성해서 하드에 연결하면 됨.
    • 거의 필수 기능으로 사용
  • dashboard
    • kubernetes cluster를 위한 웹 기반의 인터페이스 제공
  • container resource monitoring
    • 컨테이너들에 대한 리소스 사용량을 시계열(Time-series) 메트릭스를 사용하여 데이터를 저장하고 열람하기 위한 인터페이스 제공
  • cluster logging
    • container log를 중앙 로그 저장소에 저장하고 관리

 

 

4. 아키텍처

사진참조 : https://kubernetes.io/docs/concepts/overview/components/

 

 

5. 쿠버네티스 API

  • API 버전 규칙
    • 쿠버네티스의 모든 구성요소는 API 서버를 통해 API로 메시지를 주고받는다.
    • 쿠버네티스는 리소스에 대한 표현을 쉽게하기 위해 각각 다른 API 경로에서 복수의 API 버전을 지원한다.
    • 같은 종류의 리소스인데 API 버전이 다른 경우  ->  안전성이나 기술 지원의 수준이 다르다.

 

  • 알파 버전 API
    • 버전 이름에 alpha가 포함됨 (ex. v1alpha1)
    • 활성화 해야 볼 수 있다.
    • 기본적으로 비활성화 되어있음
    • 활성화 하다가 버그에 노출될수 있다.
    • 테스트용

 

  • 베타 버전 API
    • 버전 이름에 beta가 포함됨 (ex. v2beta3)
    • 기본적으로 활성화 되어있음
    • 베타버전에서 stable 버전으로 바뀔 수 있다.
    • 중요하지않은 용도로만 사용하기를 권장

 

  • 안정화 버전 API
    • 버전 이름이 vX or X 정수
    • 알파, 베타가 없으면 stable ver

 

※ 참고

  • 클러스터에서 지원되는 API 버전 확인
kubectl api-versions

 

  • 클러스터에서 지원되는 API 리소스 확인
kubectl api-resources

 

 

  • API 그룹
    • 쿠버네티스에서 기능을 추가할 떄 해당 기능을 사용하기 위한 API를 더 쉽게 확장하도록 도움.

'Containers > Kubernetes' 카테고리의 다른 글

Pod  (0) 2020.07.23
명령형 명령어  (0) 2020.07.23
Object 관리  (0) 2020.07.22
YAML  (0) 2020.07.22
Container와 Kubernetes 소개  (0) 2020.07.22

댓글