터칭 데이터

K8s 소개, K8s 아키텍처, 사용예 본문

Docker & K8S

K8s 소개, K8s 아키텍처, 사용예

터칭 데이터 2023. 12. 22. 00:15

 

 

 

이번 학습에 있어 중점을 두어야할 포인트

 

K8s의 학습은 어려움!

서버 운영에 관련된 부분이나 순수개발자에게는 쉽지 않음

 

모든 걸 다 설명하려는 것보다는 아래에 방점을 둘 예정임

 


왜 필요하고 어떤 기능을 해주는지 그리고
Docker와 어떻게 서로 보완적인 관계인지 이해
(개념적인 이해)하고 기본적인 사용법을
익힌다

 

 

 

 

 

 

 

 

 

수많은 Container Orchestration 툴 중 왜 K8s가 가장 널리 사용되는지

알아보자

 

 

 

 

 

 

 

 

 

 

 

 

Kubernetes (K8s) 소개 (1)

컨테이너 기반 서비스 배포/스케일/관리 자동화를 해주는 오픈소스 프레임웍

구글에서 사용하던 Borg를 서비스를 오픈소스화함 (2015년)
클라우드나 on-prem 모두에서 잘 동작
어느 컨테이너이면 가능하지만 주로 Docker Container들이 대상이 됨
물리서버나 가상서버 위에서 모두 동작

 

지금은 Cloud Native Computing Foundation이라는 비영리 단체에서 운영

클라우드 환경에서 어떻게 소프트웨어를 배포하는 것이 효율적일까?
    - 컨테이너, 서비스메시, 마이크로서비스, API, DevOps, On-demand Infra

 

 

 

 

 

 

 

 

 

 

 

 

Kubernetes (K8s) 소개 (2)

가장 많이 사용되는 컨테이너 관리 (Orchestration) 시스템

사용회사와 커뮤니티 활동이 굉장히 많고 활발
카카오, 네이버, 라인, 쿠팡 등의 국내 업체도 활발히 사용
K8s위에 기능을 추가한 Container Orchestration 툴들이 생각남
모든 글로벌 클라우드 업체들이 지원: EKS, AKS, GKE

 

 

 

 

 

 

 

 

 

 

 

 

 

Kubernetes (K8s) 소개 (3)

확장성이 좋아서 다양한 환경에서 사용됨

머신러닝: Kubeflow
CI/CD: Tekton
Service Mesh: Istio
Serverless: Kubeless

 

다수의 서버에 컨테이너 기반 프로그램을 실행하고 관리

컨테이너 기반 프로그램 == Docker Container
보통 Docker와 K8S는 같이 사용됨
Pod: 같은 디스크와 네트웍을 공유하는 1+ 컨테이너들의 집합

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

K8s 아키텍처

K8s의 기본 구조에 대해 알아보자

 

 

 

 

 

 

 

기본 구조: 마스터-노드

 

 

노드는 물리서버이거나 가상서버

 

클러스터는 1+ 노드의 집합

 

마스터는 클러스터를 관리해주는 역할 수행

 

 

 

 

 

 

 

 

 

 

 

 

 

 

기본 구조: K8S 프로세스들

 

Master안에는 여러 프로세스들이 돌고 있음

API Server (Container로 동작): kube-apiserver

    - Entrypoint of K8S cluster
    - Web UI, CLI (kubectl), API


Scheduler

    - Pods 생성과 할당 (노드들의 상황 고려 - utilization)


Controller Manager
    - 전체 상황을 모니터링하고 fault tolerance 보장


Master는 High Availability가 중요함


etcd
    - K8S 환경 설정 정보가 저장되는 key/value 스토어로 백업됨

 

Controller runtime

대부분 Docker가 사용됨

 

 

 

 

 

 

 

 

 

 

 

 

Kubectl: 커맨드라인 툴

 

kubectl run hello-minikube

 

kubectl cluster-info

 

kubectl get node

 

 

 

 

 

 

 

 

 

 

 

 

Pod란 무엇인가?

 

다시 한번 K8s 사용시 컨테이너를 바로 다루지 않음

 

Pod: K8S 사용자가 사용하는 가장 작은 빌딩 블록

 

1 Pod = 보통은 하나의 container로 구성

하나보다 많은 경우에는 보통 helper container가 같이 사용됨
같은 Pod 안에서는 디스크와 네트워크가 공유됨
Fail-over를 위해 replicas를 지정하는 것이 일반적
    - 다양한 방법으로 복제본을 유지

 

Pod는 네트웍 주소를 갖는 self-contained server

 

 

 

 

 

 

 

 

 

 

 

 

 

YAML 환경 설정 예

apiVersion: apps/v1
kind: Pod
metadata:
  name: nginx
spec:
  containers:
    - name: nginx
    image: nginx

 

 

 

 

 

 

 

 

 

Pod 생성예

 

kubectl create -f pod-definition.yml

 

kubectl get pods

 

kubectl describe pod nginx

 

kubectl run nginx --image nginx

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

K8s/Docker 사용 예 살펴보기

K8s/Docker를 사용하는 예를 2개 살펴보자

 

 

 

 

케이스 #1 - Airflow

쏘카의 Airflow Containerization 이야기

 


케이스 #2 - Airflow

Bucket Place의 Airflow Containerization 이야기

 

 

 

 

 

 

어떤 부분을 학습하는 것이 좋을까?

 

만들어진 Docker Image를 어떻게 배포하고 스케일할 것인가?

Docker를 모르면 K8s를 이해하기 힘듬

 

먼저 docker-compose를 통해 Multi-Container 관리를 하는 것을 배우는 것이 좋음

우리는 이미 앞에서 배웠음

 

다음으로 K8s를 사용하여 Container를 관리하고 배포하기

실습 환경 설정, kubectl 사용, 개념 이해 (pod, deployment, service 등등)

 

네트워크 관련해서 외부와 연결 설정하기

Cluster IP, NodePort, Load Balancer, Ingress, 서비스 타입, 서비스 디스커버리 등등

 

스케일 아웃하기

부하에 따라서 컨테이너 수 조정 (Auto-Scaling, 최소 리소스 설정 등등)

 

 

 

 

 

 

 

 

 

 

Docker/K8s에 대해 더 공부하고 싶다면?

 

Kubernetes for the Absolute Beginners - Hands-on:

https://www.udemy.com/course/learn-kubernetes/
초보자가 공부하고 실습하기 좋은 내용으로 구성되어 있음

 

Docker and Kubernetes: The Complete Guide

https://www.udemy.com/course/docker-and-kubernetes-the-complete-guide/

 

 

 

 

 

 

'Docker & K8S' 카테고리의 다른 글

Container Orchestration 소개  (0) 2023.12.21
서버 관리의 어려움  (0) 2023.12.21
Docker 정리  (0) 2023.12.21
Airflow Docker docker-compose.yml 리뷰  (0) 2023.12.21
voting application의 docker-compose.yml 개선하기  (0) 2023.12.21