[따배쿠] 쿠버네티스 아키텍쳐

박병준·2022년 9월 27일
0

따배쿠

목록 보기
1/4

쿠버네티스 동작원리

쿠버네티스의 전체 동작 Flow는 아래와 같습니다.

1. Docker push hub.example.com/nginx

개발자 혹은 운영자가 컨테이너 런타임을 이용하여 컨테이너를 쿠버네티스 플랫폼에 올립니다.

여기서는 컨테이너 런타임의 예로 Docker를 사용합니다.

2. Image nginx is pushed to Docker Hub

생성한 컨테이너 이미지를 컨테이너 저장소 (Docker Hub)에 업로드합니다.

3. kubectl create deploy web --image=hub.example.com/nginx

쿠버네티스 명령어를 통해 생성한 컨테이너가 실행되도록 요청합니다.

4. kubectl issues REST call

Master 노드(Control-plane)의 REST API Server로 kubectl명령이 전달됩니다.

5. Pod created and scheduled to a worker node

Worker 노드 중 어느 노드에 파드가 생성되면 좋을지 Scheduler에게 요청합니다.

Scheduler는 노드들의 상태들을 보고 어느 노드가 가장 놓을지 선택합니다.

6. Kubelet is notified

Scheduler가 Pod를 생성하기 적당한 노드를 찾아 해당 노드의 kubelet에 파드 생성 요청을 합니다.

7. kubelet instructs Docker to run the image

Pod 생성 요청을 받은 kublet이 Docker 데몬에게 실제 컨테이너의 생성을 요청합니다.

8. Docker pulls and runs nginx

컨테이너 생성 요청을 받은 Docker 데몬이 Docker Hub에서 이미지를 찾아서 이미지를 생성합니다.

이렇게 생성된 컨테이너를 쿠버네티스에서는 'Pod'라는 단위로 관리합니다.

쿠버네티스 컴포넌트

마스터 노드

컴포넌트설명
etcdkey-value 타입의 저장소 (쿠버네티스 마스터 및 노드들의 다양한 상태 정보 저장)
kube-apiserverk8s API를 사용하도록 요청을 받고 요청이 유효한지 검사
kube-scheduler파드를 실행할 노드 선택
kube-controller-manager파드를 관찰하며 개수를 보장

워커 노드

컴포넌트설명
kubelet모든 노드에서 실행되는 k8s 에이전트 (데몬 형태로 동작)
kube-proxyk8s의 network 동작을 관리
컨테이너 런타임컨테이너를 실행하는 엔진

애드온

애드온은 클러스터 내부에서 필요한 기능들을 위해 실행되는 Pod입니다.

분류종류
네트워크 애드온CNI - wave, calico, flaneld
dns 애드온CoreDNS
대시보드 애드온쿠버네티스 웹 UI 대시보드
컨테이너 자원 모니터링cAdvisor
클러스터 로깅컨테이너 로그, k8s 운영 로그들을 수집해서 중앙화 (ELK(ElasticSearch, Logstash, Kibana), EFK(ElasticSearch, Fluentd, Kibana), DataDog)

namespace

쿠버네티스에서 namespace란

  • 클러스터 하나를 여러 개의 논리 적인 단위로 사용할 수 있게 해줍니다.

  • 쿠버네티스 클러스터 하나를 여러 팀이나 사용자가 공유하게 됩니다.

  • 용도에 따라 실행해야 하는 앱을 구분할 때 사용할 수 있습니다.

여러 서비스를 운영하고 있거나 같은 서비스여도 여러 환경에서 운영하고 있을 때 namespace를 이용해서 논리적으로 분리하여 관리할 수 있습니다.


yaml

YAML 템플릿이란

  • 사람이 쉽게 읽을 수 있는 데이터 직렬화 양식

  • HTML, XML과 같은 Markup Language

  • 기본 문법

    • 구조화된 데이터를 표현하기 위한 데이터 포맷
    • Python 처럼 들여쓰기로 데이터 계층을 표기
    • 들여쓰기를 할 때에는 Tab이 아닌 Space Bar를 사용
    • 가독성이 좋아 설정 파일에 적합한 형식
    • Scalar 문법 : ':'를 기준으로 key: value 설정
    • 배열 문법 : '-' 문자로 여러 개를 나열
    • 공식 사이트 : https://yaml.org/

YAML 파일 예시

apiVersion: v1
kind: Pod
metadata:
  name: mypod
  namespace: orange
spec:
  containers:
  - image: nginx:1.14 # Scalar 문법
    name: nginx
    ports:  # 배열 문법
    - containerPort: 80
    - containerPort: 443

출처
https://www.youtube.com/playlist?list=PLApuRlvrZKohaBHvXAOhUD-RxD0uQ3z0c

profile
뿌셔뿌셔

0개의 댓글