Table of Contents |
---|
...
지원하는 애플리케이션의 유형을 제약하지 않는다.
소스 코드를 배포하지 않으며 애플리케이션을 빌드하지 않는다.
애플리케이션 레벨의 서비스를 제공하지 않는다.
로깅, 모니터링 또는 경보 솔루션을 포함하지 않는다. 즉, 메트릭을 수집하고 노출하는 메커니즘을 제공한다.
K8s는 단순한 오케스트레이션 시스템이 아니다. 사실, K8s는 오케스트레이션의 필요성을 없애준다. 오케스트레이션의 기술적인 정의는 A를 먼저 한 다음, B를 하고, C를 하는 것과 같이 정의된 워크플로우를 수행하는 것이다. 반면에, K8s는 독립적이고 조합 가능한 제어 프로세스들로 구성되어 있다. 이 프로세스는 지속적으로 현재 상태를 입력받은 의도한 상태로 나아가도록 한다. A에서 C로 어떻게 갔는지는 상관이 없다. 중앙화된 제어도 필요치 않다. 이로써 시스템이 보다 더 사용하기 쉬워지고, 강력해지며, 견고하고, 회복력을 갖추게 되며, 확장 가능해진다.
...
kubelet
cluster의 각 노드에서 실행되는 에이전트.
Kubelet은 파드에서 컨테이너가 확실하게 동작하도록 관리.Kubelet은 8s를 통해 생성되지 않는 컨테이너는 관리하지 않는다.
kube-proxy
kube-proxy는 cluster의 각 노드에서 실행되는 네트워크 프록시로, K8s의 서비스 개념의 구현부
kube-proxy는 노드의 네트워크 규칙을 유지 관리한다. 이 네트워크 규칙이 내부 네트워크 세션이나 cluster 바깥에서 파드로 네트워크 통신을 할 수 있도록 해준다.
kube-proxy는 운영 체제에 가용한 패킷 필터링 계층이 있는 경우, 이를 사용한다. 그렇지 않으면, kube-proxy는 트래픽 자체를 포워드(forward)한다.
Container runtime
컨테이너 실행을 담당하는 소프트웨어
도커(Docker), containerd, CRI-O 그리고 Kubernetes CRI (컨테이너 런타임 인터페이스)를 구현한 모든 소프트웨어 지원.
...
DNS
K8s에 의해 구동되는 컨테이너는 DNS 검색에서 이 DNS 서버를 자동으로 포함한다
웹 UI (대시보드)
컨테이너 resource 모니터링
컨테이너 resource 모니터링은 중앙 데이터베이스 내의 컨테이너들에 대한 포괄적인 시계열 매트릭스를 기록하고 그 데이터를 열람하기 위한 UI를 제공해 준다.
cluster-레벨 로깅
cluster-레벨 로깅 메커니즘은 검색/열람 인터페이스와 함께 중앙 로그 저장소에 컨테이너 로그를 저장하는 책임을 진다.
Understanding Terms(중요)
Info |
---|
여기서는 아래 블로그를 포함하여 각종 관련 사이트 및 K8s 공식 사이트 문서를 참고하여, 보다 간략히 k8s에 대한 이해에 반드시 필요한 개념 위주로 추려서 기술한다. 내용 中 일부 출처: https://bcho.tistory.com/1256?category=731548 [조대협의 블로그] |
...
참고로 Pod에 cpu, memory 사용에 대한 limit을 지정할 수 있으며, Linux CGroup(Control Group)을 사용하여 관리된다.
Note |
---|
Pod는 단독으로 yaml 파일로 정의하거나 kubectl 명령 등으로 생성할 수도 있으나, 따라서, Production 환경에서 Pod는 테스트 목적이 아니라면 단독으로 생성하지 않고, |
[Workload] Controller
사용자 application workload model에 따라 - 예를 들어, 대게 Webserver와 DB는 배포 방식을 달리한다. - 아래와 같은 대표적인 배포 방식들이 있으며, 이를 보다 편리하게 관리하기 위해 Controller라는 개념을 사용한다.
Job
Cron Job
Daemon Set
...
Workload model에서 batch나 한번 실행되고 끝나는 형태의 작업이 있을 수 있다.
예를 들어 원타임으로 파일 변환 작업을 하거나, 또는 주기적으로 ETL 배치 작업을 하는 경우에는 웹서버 처럼 계속 Pod가 떠 있을 필요 없이 작업을 할 때만 Pod를 띄우면 된다.
이러한 형태의 workload model을 지원하는 Controller를 Job이라고 한다.
...
Restart policy 지정
만일, Job이 끝나기 전에 만약에 비정상적으로 종료된다면?
아래 그림과 같이 job에 적절한 restart policy를 부여할 수 있다.
...
Completions 횟수 및 parallelism 개수 지정
또한, spec에 completions
횟수를 지정하여, 하나의 작업을 여러 차례 수행하도록 할 수도 있다.(데이타가 클 경우 범위를 나눠서 작업하는 경우 등)
...
만일 parallelism
개수와 함께 적용한다면, parallelism
개수만큼 동시에 실행되며, completions
횟수만큼 모두 수행되면 종료될 것이다.
...
Cron Job
특정 날짜/시간마다 주기적으로 실행되어야 하는 작업일 경우, unix cron에 설정하듯이 설정하면 된다.
개념 및 방식 또한 unix cron과 같다.
Daemon Set
DaemonSet (이하 DS) 은 Pod가 각각의 노드에서 하나씩만 돌게 하는 형태로 Pod를 관리하는 컨트롤러이다.
아래 그림과 같이, RC나 RS에 의해서 관리되는 Pod 는 여러 노드의 상황에 따라서 일반적으로 비균등적으로 배포가 되지만, DS에 의해 관리되는 Pod는 모든 노드에 균등하게 하나씩만 배포 된다.
이런 형태의 워크로드는 서버의 모니터링이나 로그 수집 용도로 많이 사용된다.
...
또한, node selector(label)를 지정하여, 특정 노드에만 하나씩 배포할 수도 있다.
예를 들어 아래 그림과 같이 GPU를 포함하고 있는 서버에만 배포할 수 있다.
...
Stateful Set
RS/RC나 다른 controller로는 DB와 같이 상태를 가지는 애플리케이션을 관리하기가 어렵다.
그래서 이렇게 DB등과 같이 상태를 가지고 있는 Pod를 지원하기 위해서 StatefulSet 이라는 것이 새로 소개되었는데, 이를 이해하기 위해서는 K8s의 디스크 볼륨에 대한 이해가 필요하다.
Stateful Set은 다음 중 하나 또는 이상이 필요한 애플리케이션에 유용하다.
안정된, 고유한 네트워크 식별자.
안정된, 지속성을 갖는 스토리지.
순차적인, 정상 배포(graceful deployment)와 스케일링.
순차적인, 자동 롤링 업데이트.
Replication controller or Replica Set
Deployment
Volume
Service
Secret
Service Account
...