컨테이너화된 애플리케이션을 배포 및 관리하기 위한 오픈 소스 도구 (컨테이너 오케스트레이션)
배포 컨테이너로 컨테이너(서비스)를 여러 서버에 손쉽게 배포할 수 있습니다.
자동 스케일링을 지원합니다, 트래픽에 따라 자동으로 서버를 늘리거나 줄일 수 있습니다.
동일한 컨테이너를 여러 서버에 복제하여 하나의 서버에 장애가 발생해도 지속적인 서비스 운영이 가능합니다.
컨테이너의 장애가 발생하면 자동으로 롤백할 수 있어 안정성이 높습니다. (의도한 상태 특성)
한번 구성하면 스케일링을 마음대로 조절할 수 있다는 점, 컨테이너 배포가 쉽다는 점이 저에게는 큰 매력으로 다가왔습니다.

쿠버네티스의 특징이 존재합니다. 바로 '의도한 상태' 라는 개념으로 컨테이너를 관리하는데요
저희가 원하는 상태(Desired State)를 변경하고 싶다면 계속하여 현재 상태(Current State)를 확인하여 비교하게 됩니다.

클러스터 전체를 관리
클러스터가 배포되는 물리적 머신
kubelet
클러스터 내부 속한 모든 노드에서 실행되는 에이전트입니다. PodSpec 설정을 전달받아서 Pod 컨테이너의 실행을 직접 관리하고 해당 컨테이너가 정상적으로 실행되는지 헬스 체크를 진행합니다. 참고로 노드 안에 컨테이너가 있더라도 해당 컨테이너가 쿠버네티스로 생성된 컨테이너가 아니면 관리대상이 아닙니다.
kube-proxy
쿠버네티스는 클러스터 안에서 별도의 가상 네트워크를 생성하고 관리하게 되는데, kube-proxy는 이런 가상 네트워크의 동작을 관리하는 컴포넌트입니다.
container runTime
실제로 컨테이너를 실행시키는 컴포넌트입니다. 거의 대부분은 도커지 않을까요?
기본 오브젝트, 오브젝트 컨트롤러, 오브젝트의 스펙들로 구성이 되어있습니다.
오브젝트는 spec 과 status 등의 값을 가지는데, 여기에는 오브젝트를 생성한 의도나 오브젝트를 관리할 때 원하는 상태 등을 설정합니다.
NameSpace로 개발 / 스테이징 / 운영 처럼 나눌 수도 있고 서비스 도메인에 따라 구분할 수도 있습니다.
Pod의 생명주기는 kubelet 모니터링 합니다. kubectl get pods
그 외
kubectl delete --force를 수행하면 됩니다. (생명주기가 아닌 상태입니다.)개인공부 할 때는 쿠버네티스까지 구축할 규모가 안되서 개념만 알고있었는데
AWS EKS를 사용하면 편하게 쓸 수 있지만
저는 이 모든 것을 온프레미스 환경에서 전부 구성할 것 같아서
많은 공부와 삽질이 필요할 것 같습니다 ㅠㅠㅠㅠ
설계 및 구성할 때 우려되는 부분은 네트워크 부분에서 kube-proxy, namespace를 잘 조합해서 pod 끼리 잘 통신이 가능할지
Inbound, OutBound 제약을 걸 수 있는지 등등 좀 삽질할 것 같긴하네요.
일단 오늘은 쿠버네티스가 어떠한 특징과 왜 사용하는지 그리고 구조에 대해서만 좀 공부해보았고
쿠버네티스 설정 부터 ArgoCD, Service Mesh인 Istio 등등등등~~등은 추후 또 공부해 보려고 합니다.
쿠버네티스는 앞으로도 계속 공부 많이 할 예정입니다.