Yaml 및 Json 파일에 ConfigMap과 Secret을 정의.
쿠버네티스에서 애플리케이션을 실행하려면, 애플리케이션을 docker image로 만들어 도커 허브에 push 필요.
Kubectl 명령어를 실행하면 kube-Apiserver에 REST API로 Yaml 이나 Json으로 작성된 파일이 전송
kubectl이 kube-apiserver에 yaml 파일 전송시, JSON 형식으로 정보를 변환시켜 전송한다.
Kube-apiserver가 Yaml 파일을 읽고난 뒤,
kube-apiserver는 kube-scheduler에게 각 컨테이너에 필요한 리소스를 계산하라고 명령을 내림.
Kube-scheduler는 사용 가능한 노드에 pod을 할당.
kube-apiserver가 노드의 kubelet에게 명령을하고, 해당 노드의 kubelet은 pod이 스케쥴링 됐다는 것을 전달받는다.
kubelet이 Docker(container runtime)에게 이미지를 실행 명령.
위와 같이 kubelet이 직접 도커에 명령을 내려 이미지를 실행할 수도 있지만, 매우 번거럽고 불편하다.
특히나 롤링 업데이트와 같은 작업을 할 경우 일일히 다 배포해 줘야 하기 때문이다. 그래서 kubelet이 docker에게 명령을 내리는 것이 아닌
kube-controller manager -> controller -> deployment -> replicaset을 이용해 pod을 생성, 관리, 배포 합니다.
도커 이미지가 해당 노드 상에 없다면, 도커 허브에서 이미지를 pull해오고, 이미지를 pull해온 후 도커는 컨테이너를 생성 및 실행.
위의 과정을 통해 생성된 pod들은 service 오브젝트에의해 외부로 노출된다.
또한 service와 함께 Ingress를 Controller를 같이 사용하여 효과적인 클러스터 관리를 가능케함.(클라우드를 같이 사용하는 경우 loadbalancing을 같이 사용)