kubernetes 의 pod, deployment 그리고 service에대해 알아보려한다. 일단 pod는 쉽게말해서 container 와 같고 deployment는 docker swarm 의 service와 상응하는 기능으로 보인다. 햇갈릴수있는 부분이, docker swarm 에서 지칭하는 service 와 kubernetes에서 지칭하는 service의 혼동이다. docker swarm 에서의 service는 n개의 replicas container의 집합과 관리를 담당 ( rollback , update 등 ) 하는반면 kubernetes의 service는 deployment 들을 expose( 노출 ) 하던지 load balancing을 위한 용도로 지칭하는듯 하다. 또 다른 특이점으론 docker swarm 에서 master node는 –availability active mode로 동작하는 반면 kubernetes master node는 기본적으로 –availability drain mode로 동작한다. ( 사용자가 생성한 pod, deployment등 container들을 master node에서 생성하지않는다. ) nginx를 이용하여 간단히 테스트를 진행한다.
deployment
deployment( pods ) 생성한다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
$ vi nginx-deployment.yaml
apiVersion: apps/v1 # for versions before 1.9.0 use apps/v1beta2
kind: Deployment
metadata:
name: nginx-deployment
spec:
selector:
matchLabels:
app: nginx
replicas: 2 # tells deployment to run 2 pods matching the template
template: # create pods using pod definition in this template
metadata:
# unlike pod-nginx.yaml, the name is not included in the meta data as a unique name is
생성된 2개의 pod에 접속하여 access log를 확인한다. 기본적으로 access log는 주석처리되어있으므로 설정변경과 nginx를 reload 한다 . master node에서 kubectl exec … 로 pods( container ) 접근하여 수정하거나 해당 node에서 docker exec …로 생성된 pods로 직접접속한다.
간단히 kubernetes를 살펴본 느낌으로는 docker swarm 보다 기능이 디테일하게 세분화되어있는 느낌을 받았다. 예를들어 docker swarm에서 default로 생성되는 overlay network 라든지 외부접근 관련된 service expose 라던지.. 좀더 살펴봐야하겠지만. docker swarm 과 비슷하면서도 난해한부분이 없지않아 있는듯하다. 특히 ingress 관련 …