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