Tech story/Container

쿠버네티스, 이것만 알면 된다! - #5 쿠버네티스의 동작 흐름

kt cloud 테크블로그 2021. 9. 13. 13:44

 

 

쿠버네티스의 동작 흐름 

쿠버네티스에서는 새로운 Pod를 만들기 위한 과정이 다음과 같은 흐름으로 진행됩니다. 

 

출처: https://subicura.com/2019/05/19/kubernetes-basic-1.html

 

1. Master Node의 kube-apiserver에 Pod 생성을 요청

2. kube-apiserver는 etcd에 새로운 상태를 저장

3. kube-controller-manager에게 kube-apiserver가 etcd의 상태 변경을 확인하여, 새로운 Pod 생성을 요청

4. kube-controller-manager는 새로운 Pod를 생성(no assign)을 kube-apiserver에 전달하고, 이를 전달받은 kube-apiserver는 etcd에 저장 

5. kube-scheduler는 kube-apiserver에 의해 Pod(no assign)가 확인되면, 조건에 맞는 Worker Node를 찾아 해당 Pod를 할당하기 위해 kube-apiserver는 etcd에 업데이트

6. 모든 Worker Node의 kubelet은 자신의 Node에 할당되었지만, 생성되지 않은 Pod가 있는지 체크하고 있다면 Pod를 생성

7. 해당 Worker Node의 kubelet은 Pod의 상태를 주기적으로 API Server에 전달 

 

 

흐름을 보면 각각의 컴포넌트들이 서로 개별적으로 통신하지 않고, API Server를 통해서 통신하는 것을 알 수 있습니다. 

또한 컴포넌트들은 각기 현재 상태를 체크하고 독립적으로 동작하게 됩니다. 

 

 

 

 

쿠버네티스의 명령어

kubectl을 통해서 API Server에 명령을 전달할 수 있습니다. kubectl을 이용하는 방식은 아래와 같습니다.

 

command 자원에 실행하려는 동작 - create: 생성
- apply: 원하는 상태를 적용

- get: 리소스 목록을 보여줌
- describe: 리소스의 상태를 자세하게 보여줌
- delete: 리소스를 제거 
- logs: 컨테이너의 로그를 보여줌
- exec: 컨테이너에 명령을 내릴 때 사용
- ...
type 자원 타입 - pod
- service
- deployment
- ...
name 자원 이름  
flag 옵션  

 

 

 

Nginx 배포하기

이번에는 여러 가지 Controller 중에서, Deployment를 사용하여 Nginx를 배포해보도록 하겠습니다. 

 

위와 같은 YAML 파일을 작성하여, Nginx를 배포할 수 있습니다. 

kind에 어떠한 controller를 사용할 것인지 명시하고, 해당 controller에 대한 apiVersion을 찾아서 작성하면 됩니다.

 

이후, spec에서 어떠한 컨테이너를 생성할 것인지에 대해서 작성하면 됩니다. 

 

spec.replicas에서는 몇 개의 컨테이너를 생성할 것인지 작성합니다.

spec.selector.matchLabels와 spec.template.metadata.labels에서는 Labels를 일치시켜 작성해야 합니다. (이 정보가 일치하지 않을 경우, API Server에 의해 생성이 거부됩니다.) 

spec.template.spec에서 container의 이름과 어떠한 이미지와 포트 번호를 사용할 것인지 작성하면 됩니다. 

 

작성을 완료하고 나면, 해당 파일을 create 명령어를 통해 생성할 수 있습니다.

생성이 완료되고 나면, get 명령어를 통해 생성된 Pod에 대한 정보를 확인할 수 있습니다.

 

 

 

 

마무리

이번 장에서는 쿠버네티스가 동작하는 흐름에 대해서 알아보고, Nginx를 YAML 파일을 통해 배포해보았습니다. 

 

다음 장에서는 배포한 Nginx를 어떻게 외부로 노출하는 지에 대해서 알아보겠습니다.

 

 

관련글

1.쿠버네티스란 무엇일까? - https://ktcloudplatform.tistory.com/67

2.Desired State - https://tech.ktcloud.com/68

3.쿠버네티스 구성요소 - https://tech.ktcloud.com/70

4.쿠버네티스 설치 - https://tech.ktcloud.com/71