k8s vs swarm 비교 요약
비교항목 | Kubernetes |
Swarm | |
---|---|---|---|
설치 |
△ (열위) Docker 설치 후, k8s 추가 설치 필요 |
O (우위) Docker만 설치하면 끝 |
|
미세 조정 (fine control) |
O (우위) 클러스터 미세 조정 가능 (pod, replica-set, deployment, service 등 세밀하게 구분된 객체 제공) |
△ (열위) 미세 조정 미흡 (service 객체만 제공) |
|
성능 |
container life-cycle 관리 |
O (동등) deploy, scale, update |
O (동등) deploy, scale, update |
container rolling-update |
O (우위) 7초 |
△ (열위) 117초 |
|
node fail 복구 |
△ (열위) 304초 |
O (우위) 21초 |
|
사용 소감 |
* Flexible * 신뢰성이 높고 유연함 * 현시점에서 가장 적합한 선택 |
* Simple * 리소스 사용량이 작고 빠름 * 특수 상황에 적합한 선택 |
솔루션 특징 요약
k8s
* 주요 resource
- pod 객체
. 컨테이너 집합
. k8s의 실행 단위 (스케줄링 단위)
- deployment 객체
. pod 배포를 담당하는 자원
. pod 인스턴스 수를 관리하는 replica-set 자동 생성
. pod 인스턴스에 대한 rolling-update 관리
- service 객체
. pod 집합을 고정된 end-point로 관리
* declarative configuration
- desired-state를 선언(declare)하면 k8s가 클러스터의 current-state를 desired-state로 맞추기 시작
- kubectl edit 명령이 유용
swarm
* 주요 resource
- docker engine swarm mode에는 pod, replica-set 등의 객체가 없고, service 객체만 존재
- service
. service는 1개 이상의 container로 구성되며,
service 생성시 옵션 파라미터를 사용하여 replica 갯수를 지정
* imperative configuration
- 클러스터 상태 변경 명령을 내리면 즉시 반응 (장점 아님)
공통점 & 차이점
. k8s와 swarm 모두 master가 죽어도 pod/service/overlay-network의 동작/연결은 유지됨
. k8s는 delarative configuration, swarm은 imperative configuration
즉, admin이 컨테이너 인스턴스를 100개 -> 10개로 지정하는 명령을 내렸을 경우
- k8s는 중간 상태인 100개를 건너뛰고 최종 상태인 10개에 도달하는 방식
- swarm은 100개 상태를 거쳐 10개 상태에 도달하는 방식
성능 테스트 결과
테스트 종류 | Kubernetes | Swarm | ||
---|---|---|---|---|
Container Life-cycle Mgmt. |
컨테이너 생성 - 컨테이너 생성 시간 측정 - master x1, node x3 |
10개 생성 |
2.3초 3:4:3 |
7.0초 4:3:3 |
50개 생성 |
11.6초 17:17:16 |
14.3초 17:16:17 |
||
100개 생성 |
27.8초 34:33:33 |
22.2초 33:33:34 |
||
200개 생성 |
83.2초 66:67:67 |
63.2초 66:67:66 (?) |
||
200개 with 4 node |
59.1초 50:50:50:50 |
41초 50:50:50:50 |
||
300개 with 4 node |
실패 (자원 부족) |
70초 75:75:75:75 |
||
Scaling: - 1개 컨테이너를 100개로 scaling - master x1, node x4 |
25.3초 25:25:25:25 |
26.4초 25:25:25:25 |
||
Rolling Update: - 어플리케이션 중단 없이 컨테이너 이미지 교체 - 컨테이너 인스턴스 10개가 동작하는 상황 - master x1, node x4 |
7.1초 3:2:2:3 |
117초 | ||
Cluster Mgmt. |
node fail 대처: - 4개 node가 동작중인 상황에서 - 1개 node를 power-off, - 제거된 node에서 실행되던 컨테이너가 다른 node로 이동/복구되는 시간을 측정 |
304.8초 33:33:34 |
21초 |
k8s vs swarm 테스트 스크립트 비교
테스트 종류 |
Kubernetes 명령 스크립트 |
Swarm 명령 스크립트 |
---|---|---|
컨테이너 생성 |
$ kubectl create -f deploy.yaml |
$ docker service create --name hello-nodejs ingee/hello-nodejs:0.2 |
Scaling |
$ kubectl scale --replicas=10 deploy hello-nodejs |
$ docker service update --replicas 10 hello-nodejs |
Rolling Update |
$ kubectl set image deploy hello-nodejs hello-nodejs=ingee/hello-nodejs:0.2 |
$ docker service update --images ingee/hello-nodejs:0.2 hello-nodejs |
(이상)