GitHub

https://github.com/Choidongjun0830

클라우드

Kubernetes Principles

gogi masidda 2024. 10. 15. 12:03

#1. Kubernetes APIs are declarative rather than imperative.

K8S에서는, Master Node가 Worker Node에게 어떤 동작을 하라고 명령하는 것이 아니라, Master Node가 원하는 상태를 정의하면, Worker Node는 그 상태가 되도록 작업을 수행한다.

 

이를 통해서 얻을 수 있는 이점은 Auto Recovery가 있다. Worker Node에서 현재 상태가 원하는 상태와 일치하지 않다면, 그 상태가 아님을 스스로 알아채고 현재 상태를 원하는 상태로 만들기 위해 스스로 동작한다.

#2. The Kubernetes control plane is transparent, there are no hidden Internal APIs.

Master Node가 Worker Node에게 뒷단에서 다시 명령하지 않는다는 것이다.

1번과 비슷하다. Master Node가 원하는 상태를 정의하면, Worker Node는 자기가 할 일이 무엇인지 알기 위해, etcd를 계속 쳐다본다. Master Node는 원하는 상태만 정의하고, Worker Node는 그 상태를 지속적으로 확인하며 작업을 수행한다.

이것은 K8S를 단순하고, 강력하게 만들어주고, 문제가 생겨도 시스템 전체에 문제가 되지 않도록 해준다. 핵심 구성 요소들이 명확하게 분리되어서 복잡도가 줄어들게 된다.

#3. Meet the users where they are.

기존 애플리케이션들을 Cloud 환경에서 동작시키려 할 때, 애플리케이션을 수정하지 않도록 하는 것이다. 

 

기존 코드를 수정하여 코드가 API Server가 직접 통신하여 ID와 PW같은 데이터를 읽어오라고 하는 것이 아니라, 기존 코드의 수정 없이 API Server는 다른 파일에서 읽어와야 한다. 다른 파일은 Secret, ConfigMap, 환경 변수가 될 수 있다.

하지만, 이런 파일을 읽고, 쓰고 하기 위해서는 Volume이 필요하다.

결론적으로 애플리케이션을 수정하지 않도록 하기 위해서 Volume이 필요하다는 것이다. 하지만, 여기서 Persistent한 Volume을 위해서, Remote Storage를 사용해야 한다.

#4. Workload Portability

Pod가 PV를 직접 참조할 때, 어떤 Cloud 환경에서 다른 Cloud 환경으로 옮길 때, Storage도 그 환경에 맞게 바꾸어야 한다. 그러면 Pod와 PV를 수정해야 한다. 이렇게 Pod가 PV를 직접 참조하면, 의존성이 높아지고, 유연성이 떨어진다.

그래서 PV와 PVC로 프로비저닝과 사용하는 것을 나누어 추상화해야 한다. 그러면 Cloud 환경을 옮길 때, PVC만 바꾸면 된다.

 

728x90

'클라우드' 카테고리의 다른 글

Kubernetes Volumes  (0) 2024.10.12
K8S 네트워킹  (1) 2024.10.11
Deployment 리소스 생성시 흐름  (0) 2024.10.10
Kubernetes Basic - 2  (2) 2024.10.08
Restful API  (1) 2024.10.06