Kubernetes
2019. 11. 26
Jaewoo KIM

Kubernetes has become the de facto container orchestration engine across organizations
k8s 는...
- 2014년 구글이 오픈소스로 공개
- 상대적으로 유연성이 뛰어남
- 2017년 10월 도커와 쿠버네티스의 통합이 정식으로 발표
- 클라우드 플랫폼의 쿠버네티스 지원
k8s vs swarm

k8s 리소스들
- 노드 - 컨테이너가 배치되는 서버
- 네임 스페이스 - k8s 클러스터 안의 가상 클러스터
- 파드 - 컨테이너의 집합 중 가장 작은 단위로, 컨테이너 실행 방법을 정의
- 레플리카세트 - 같은 스펙을 같는 파드를 여러개 생성하고 관리하는 역할
- 디플로이먼트 - 레플리카 세트의 리비전을 관리
- 서비스 - 파드의 집합에 접근하기 위한 경로를 정의
- 인그레스 - 서비스를 k8s 외부로 노출 시킴
클러스터와 노드

클러스터 전체를 관리하는 서버인 마스터가 적어도 하나 이상 존재
현재 클러스터에 소속된 노드의 목록
$ kubectl get nodes
마스터 서버에 배포되는 관리 컴포넌트들 (194p)
- kube-apiserver
- etcd
- kube-scheduler
- kube-controller-manager
네임스페이스 목록 확인
$ kubectl get namespace
네임스페이스마다 권한을 설정할 수 있으므로
견고하고 세세하게 권한을 제어할 수 있다
네임스페이스
파드

컨테이너 하나 혹은 컨테이너의 집합체
파드
매니페스트 파일 작성
$ vi simple-pod.yaml
클러스터에 배포
$ kubectl apply -f simple-pod.yaml
$ kubectl get pod
레플리카세트
똑같은 정의를 갖는 파드를 여러 개 생성하고 관리
$ vi simple-replicaset.yaml
클러스터에 배포
$ kubectl apply -f simple-replicaset.yaml
$ kubectl get pod
디플로이먼트
애플리케이션 배포의 기본 단위가 되는 리소스
Deployment
echo
ReplicaSet
echo-1
Pod
echo-1a
Pod
echo-1b
Pod
echo-1c
create
create
디플로이먼트
레플리카 세트와 큰 차이는 리비전 관리를 할 수 있다는 점
$ vi simple-deployment.yaml
클러스터에 배포
$ kubectl apply -f simple-replicaset.yaml --record
$ kubectl get pod,replicaset,deployment --selector \ app=echo
롤백 실행하기
리비전 확인
$ kubectl rollout history deployment echo
$ kubectl rollout history deployment echo --revision=1
롤백
$ kubectl undo deployment echo
서비스
클러스터 안에서 파드의 집합에 대한 경로를 제공하는 리소스
$ vi simple-replicaset-with-label.yaml
리비전 확인
$ kubectl get pod -l app=echo -l release=spring
$ kubectl get pod -l app=echo -l release=summer
서비스
Service(name=echo)
[selectors]
app=echo
release=summer
Pod
app=echo
release=summer
Pod
app=echo
release=summer
Pod
app=echo
release=spring
http://echo/
apiVersion
필드의 값이 리소스 종류에 따라서 달라진다
$ kubectl api-versions
Kubernetes
By Jaewoo KIM
Kubernetes
- 369