1.Why Kubernetes?.
- IT 서비스의 사용량이 항상 같지 않기 때문에 서버 자원을 효율적으로 활용하기 위해 kubernenes의 가상화 서비스를 사용한다.(AutoScaling 가능)
- Auto Healling 기능으로 서비스의 장애가 발생하면 남아있는 여분의 서버로 알아서 서비스를 유지시켜줌.
- 서비스의 배포및 업데이트를 자동화 할 수 있다.
2.VM vs Container
- Container 기술은 리눅스의 커널기술인 namespace, cgroups와 같은 OS의 자원격리 기술을 사용하여 구현되는 기술이다.
- VM은 S/W로 구현된 하드웨어 그위에 OS 를 설치하여 구현 되는 기술.
- Container는 VM 과 다르게 하드웨 및 OS 계층을 두지 않고 프로세스만 격리하여 구현되기 때문에 성능이 VM보다 뛰어나다.
- 하지만 VM은 멀티 OS로 호스트의 OS와 같지 않은 OS도 구성할 수 있다.
[출처 : 인프런 대세는 Kubernetes 강좌]
3.Kubernetes Overview
- Cluster - Master(전반적인 기능 컨트롤)와 Node(자원)로 구성됨 (1:N 구성).
- namespace
- service -> 외부로부터 접속할수 있도록 해줌.
- pod - namespace가 다른 pod끼리는 통신불가.
- namespace -> ResourceQuota/ LimitRange로 자원의 양을 한정시킴.
- ConfigMap, Secret
- service
- Controller Replication Controller, ReplicaSet(파드의 개수 조정), Deployment(파드 내용 업데이트), DaemonSet(한노드에 pod가 하나씩만 할당되게 해줌.),Cronjob(Pod에서 주기적으로 배치성 작업이 필요하면 배치를 스케줄링해줌.)
- pod
- Pod 가죽으면 데이터가 소실되기 때문에 물리적인 Volume과 연결 가능.
- 아래는 내가 강좌를 듣고 정리한 Kubernetes의 구성도이다.(틀릴수도 있음.)
4.Kubernetes 오브젝트 정리
Pod
- Pod는 여러개의 Container를 가질 수 있지만 Pod 내의 Container는 같은 port를 가질수는 없음.
- Pod는 하나의 Host 개념으로 이해하면 됨 ex) 한 Pod 내에서 다른 컨테이너의 8080포트의 컨테이너를 접근할 때 localhost:8080으로 접근 가능.
- Pod 생성시 IP가 할당되는데 Kubernetes Cluster내에서만 접근 가능하며 Pod가 문제가 발생하여 재생성되면 IP도 재할당됨.
- Pod 생성시 최대 사용 메모리를 정할수 있음. -> 정하지 않으면 부하가 발생하는 상황에서 해당 Node에 Pod가 모두 다운되는 현상이 발생할 수 있음.
Label
- Pod뿐만 아니라 모든 오브젝트에 부여 가능.
- 목적에 따라 오브젝트들을 분류하기 위해 사용됨.
- Key:Value 구조.
- 한 Pod에는 여러개의 Label 부여 가능.
Node Schedule
- Pod 생성시 직접선택하여 생성 : Node에 Label을 부여하고 Pod 생성시 부여한 Label을 선택하여 생성.
- Pod 생성을 스케줄러가 선택하여 생성 : Node의 자원사용량에 따라 스케줄러가 자동으로 할당.
- Pod가 할당된 메모리를 초과하여 사용하면 Pod를 종료시키지만 Cpu는 초과시 종료되지는 않고 사용량을 줄임. -> Cpu는 스케줄링하여 대기할 수있지만 메모리는 다른 프로세스의 영역을 침범하여 사용하면 프로세스의 문제를 야기시키기 때문.