용어
- manifest : deployment.yaml, service.yaml 등의 파일들의 통칭
- helm : deployment.yaml, service.yaml 등을 하나로 묶어 관리하는 '패키지 매니저'
- kubectl : K8s 관리소에 명령(Manifest 전달)을 내리는 핵심 도구
- Master에서만 사용 가능하고, k8s에서 관리하는 자원을 생성, 가져오기 및 삭제하는 작업 수행
- Cluster : 가장 기본적인 단위, 여러 개의 node로 구성되며 마스터 노드(Control Plane)와 워커 노드(Worker Node)로 나뉨
- Namespaces : 동일한 물리 클러스터를 기반으로 하는 여러 가상 클러스터를 지원하며, 이런 가상 클러스터를 말함. 논리적인 분리 단위이며, Namespace 별로 클러스터 내에서 논리적으로 리소스를 분리하게 함
-> 리소스 중 object는 namespaces, service, volume, pod- Controller : k8s는 다양한 컨트롤러를 통해 애플리케이션을 자동으로 배포/관리하고 문제 발생 시 복구할 수 있도록 지원
- Ingress : 클러스터 외부에서 내부 서비스(Pod)로 접근할 수 있도록 트래픽을 제어하는 역할
- Node : k8s 클러스터를 구성하는 실제 컴퓨터(ec2 등)를 의미
- Pod : k8s에서 생성하고 관리할 수 있는 배포 가능한 가장 작은 컴퓨팅 단위 (컨테이너의 그룹)
-> 스토리지 및 네트워크를 공유하고, 해당 컨테이너를 구동하는 방식에 대한 명세 또는 정의를 갖게 됨

- kubectl ➔ Master(API server) ➔ Worker(kubelet) ➔ Worker(docker)가 Container 생성
- Deployment라는 컨트롤러가 ReplicaSet을 만들고, 이 ReplicaSet이 Pod의 개수를 유지
- Service가 가진 고정 IP를 호출하면, Service가 알아서 현재 살아있는 Pod들 중 하나로 트래픽을 전달해줌


Deployment : 지정된 수의 Pod를 항상 유지하며, 애플리케이션을 점진적으로 업데이트하거나 문제가 생겼을 때 이전 버전으로 롤백할 수 있도록 도움
StatefulSet : 각 Pod에 고유한 네트워크 ID와 영구 저장소가 필요한 상태 기반 애플리케이션을 안정적으로 운영할 수 있게 함
DaemonSet
Job & CronJob
ClusterIP
NodePort
LoadBalancer
ExternalName

pod 접속
- 클러스터 내에서 Pod 접속 → Cluster IP
- 클러스터 밖에서 Pod 접속 → Node Port
- 클러스터 밖에서 Pod 접속 → Load Balancer
-> 최종적으로 밖에서 Pod에 접속 할 때 Load Balancer → Node Port→ Cluster IP로 접속
정리
1. 컨트롤러(Controller)를 통한 Pod 관리 방식
- 명령 전달: 개발자가 kubectl을 통해 YAML 파일(선언적 명세)을 API Server에 전달합니다.
- 상태 기록: API Server는 이 명세를 etcd에 기록합니다.
- 컨트롤러 작동: Controller Manager는 etcd에 기록된 '원하는 상태(예: Pod 3개)'와 '현재 상태'를 지속적으로 비교합니다.
- 스케줄링: 개수가 부족하면 Scheduler가 어느 워커 노드에 Pod를 띄울지 결정합니다.
- 실행 지시: API Server가 해당 노드의 kubelet에게 Pod 생성을 요청합니다.
- 현지 관리: kubelet은 컨테이너 런타임(Docker 등)을 호출해 컨테이너를 실행하고, 그 상태를 다시 API Server에 보고합니다.2. 서비스(Service)를 통한 Pod 접근 방식
- 객체 생성: 사용자가 Service 리소스를 생성하면 고정된 ClusterIP가 할당됩니다.
- 엔드포인트(Endpoint) 관리: Service는 레이블 셀렉터(Label Selector)를 사용하여 대응하는 Pod들의 IP 목록을 자동으로 관리합니다.
- kube-proxy의 역할: 모든 워커 노드에는 kube-proxy라는 네트워크 관리자가 상주합니다.
- 트래픽 라우팅: 사용자가 Service IP로 접속하면, 각 노드의 kube-proxy가 설정한 네트워크 규칙(iptables/IPVS)에 따라 실제 살아있는 Pod 중 하나로 트래픽을 전달(Load Balancing)합니다.
- 추상화: 사용자는 Pod가 삭제되고 새로 생성되어 IP가 바뀌어도, 고정된 Service IP만 바라보면 되므로 통신이 단절되지 않습니다.
- k8s 기초
https://velog.io/@pinion7/Kubernetes-%EB%A6%AC%EC%86%8C%EC%8A%A4-Namespace%EC%97%90-%EB%8C%80%ED%95%B4-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B3%A0-%EC%8B%A4%EC%8A%B5%ED%95%B4%EB%B3%B4%EA%B8%B0- https://velog.io/@sgwon1996/%EC%BF%A0%EB%B2%84%EB%84%A4%ED%8B%B0%EC%8A%A4-%ED%99%98%EA%B2%BD%EC%97%90-%EC%8A%A4%ED%94%84%EB%A7%81-%EC%96%B4%ED%94%8C%EB%A6%AC%EC%BC%80%EC%9D%B4%EC%85%98-%EB%B0%B0%ED%8F%AC%ED%95%98%EA%B8%B0
- 공식문서 service
- service
- service 이미지
- 실전 적용 시 pod가 죽지 않을 경우