본문 바로가기

DevOps/kubernetes

[udemy] CKA 과정, 쿠버네티스 아키텍처

CKA 자격증 코스

https://www.udemy.com/course/certified-kubernetes-administrator-with-practice-tests

 

Certified Kubernetes Administrator (CKA) Practice Exam Tests

Prepare for the Certified Kubernetes Administrators Certification with live practice tests right in your browser - CKA

www.udemy.com

 

강의 소개

준비: Docker, 쿠버네티스 기초, YAML, 가상환경

이해가 안 된다면 Kubernetes for the Absolute Beginners 강의 추천

강의 내용: 스케쥴링, 로깅 모니터링, 애플리케이션 라이프사이클 운영, 클러스터 메이넌스, 시큐리티, 스토리지, 네트워킹, 설치와 환경설정, 

쿠버네티스의 사용 증가와 이 자격증이 어디서 만들어졌는지 소개 

300달러로 시험보며 예전에는 3시간이였으나 지금은 2시간동안 시험

떨어졌을 경우 2달 내에 재응시 가능

쿠버네티스 공식 문서는 참고할 수 있음

 

이 강의에서는 CKA  시험에 있는 내용을 모두 다루고 추가적으로 다음의 내용도 다룰 예정

Auto scaling a cluster

Horizontal Pod Autoscalers

Stateful Sets

Kubernetes Federation

Admission Controllers

 

강의 관련 링크: https://github.com/kodekloudhub/certified-kubernetes-administrator-course

 

클러스터 아키텍처

Master: Manage, Plan, Schedule, Monitor Nodes

 - ETCD 클러스터: key-value 포맷으로 정보를 저장하는 데이터 베이스, 클러스터에 대한 정보를 저장 

 - kube-scheduler: 애플리케이션 또는 컨테이너를 스케쥴링

 - Contoller & Manager: 노드, 복제등 다양한 기능을 처리하는 컨트롤러

   - Node-Contoller

   - Replication-Controller

 - kube-apiservier: 워커 노드에 있는 클러스터의 모든 작업을 오케스트레이팅함

 

Worker Nodes: Host Application as Containers

 - kubelet: kube-apiserver의 명령을 듣고 컨테이너를 관리

 - kube-proxy: 클러스터 간 서비스들의 커뮤니케이션을 지원

 

ETCD

CoreOS사가 개발하고 있는 오픈소스 소프트웨어이며 키와 벨류로 값을 저장하고 쉽게 읽을 수 있는 미니 데이터베이스이다.

가용성 확보를 위해 클러스터 구성이 가능하며 etcd 클러스터는 단일 리더가 있고 리더가 동작하지 않으면 새로운 리더가 동작되어 서비스를 지속한다. 

쿠버네티스 클러스터에 등록된 모든 정보가 저장되어 있다. 단일 장애점이 되지 않도록 클러스터를 구성해야하는데 3/5/7 대와 같이 홀수록 구성하는 것을 추천한다. 

etcdctl snapshot 명령어를 사용하여 정기적으로 백업해두면 좋다.

 - 저장항목:  Nodes, Pods, Configs, Secrets, Accounts, Roles, Bindings, Others

Kube-API Server

kubectl 커맨드는 kube-apiserver에 접근하기 위한 유틸리티이다. kubectl get nodes 명령어를 사용하면 kube-apiserver은 etcd cluster에서 요청된 정보를 반환한다. 

사실 커맨드를 모르더라도 API를 이용해 직접적으로 요청을 할수도 있다. API를 통해 팟을 생성하는 요청을 하면 apiserver는 노드를 지정하지 않고 팟을 생성하고 ETCD에 팟이 생성되었다는 정보를 업데이트한다. 스케줄러는 지속적으로 apiserver를 모니터링하다가 새로운 팟이 생성됐음을 알게 되면 팟을 위치시킬 노드를 찾는다. 이러한 apiserver가 ETCD에 업데이트하고 워커노드의 kubelet에게 이러한 정보를 전달한다. kubelet은 노드에 팟을 생성하고 container runtime engine에 어플리케이션 이미지를 배포하도록 지시한다.

 

Kube-Controller Manager

컨트롤러는 시스템 내의 다양한 구성 요소의 상태를 지속적으로 모니터링하고 전체 시스템을 원하는 상태로 만들기 위해 작동하는 프로세스이다. kubernetes 내에는 많은 컨트롤러가 있다. deployments, services, namespaces, persistent volumes  같이 모든 개념들이 다양한 컨트롤러를 통해 구현된다.

예를들어 Node Controller은 kube-api 서버를 통해 노드의 상태를 모니터링하고 애플리케이션을 계속 실행하도록하는 책임이 있다. 5초마다 노드의 상태를 확인하고 heart beat 수신이 중지되면 잠시 연결할 수 없는 것으로 표시하고 40초 동안 대기하고 다시 돌아올 때까지 5분을 준다. 회복이 안 되면 해당 노드에 할당된 POD를 제거하고 정상 노드에 프로비저닝한다.

Replication Contoller은 ReplicaSet Pod에 대해 상태를 모니터링하고 set 내에서 설정된 수만큼 POD을 사용할 수 있는지 확인한다. Pod이 죽으면 다른 Pod을 생성하는 역할을 한다.

이러한 컨트롤러는 kube-controller-manager라고 하는 하나의 프로세스에 패키지되어 있고 모니터링 시간과 같은 값들이 설정되어있다. 

 

Kube-Scheduler

kube-scheduler은 노드의 Pod 스케줄링을 담당하지만 주의해야할 점이 있다. 스케쥴러는 어떤 Pod이 어디 Node에 갈지만 결정한다. 

실제로 노드에 Pod를 배치하지 않고 팟을 배치하는 것은 선장역할을 하는 kubelet이 담당한다.

즉 스케쥴러는 노드마다 CPU, Memory 크기와 상태가 다르므로 적절한 노드에 Pod을 배치하는 결정을 담당한다고 보면 된다.

CPU, Memory 자원에 여유가 있는 노드를 찾고 우선순위를 통해 어느 노드에 배치할지 결정한다. 이 우선순위를 결정하는 방법은 좀 복잡하고 다양하다. 

 

Kubelet

kubelet은 워커노드의 선장역할을 하며 마스터노드의 kube-apiserver와 대화하는 유일한 컨택 포인트이다.

클러스터에 노드를 등록하고 컨테이너 또는 Pod를 로드하라는 지시를 받으면 이미지를 가져와 인스턴스를 실행한다.

이후 Pod과 그 안애 컨테이너 상태를 계속 모니터링하고 틈틈이 kube-apiserver에 상태를 보고한다.

 

 

Kube Proxy

Pod Network는 내부의 가상 네트워크이며 kubernetes 클러스터 내에서 모든 Pod이 다른 모든 Pod에 연결하는 것을 가능하게 한다.
다른 노드에 db 같은 서비스 리소스가 생성 되었을 때 Kube-Proxy를 통해 ClusterIP나 NodePort로 가는 트래픽이 파드에 정상적으로 전달되도록 한다.

전송방식은 3가지 옵션이 있는데 

1) user space: 수신한 트래픽을 사용자 공간에서 처리하고 전송, 낮은 성능

2) Iptables: 수신한 트래픽을 커널 공간의 iptables에서 처리, 높은 성능, 기본 설정, 대규모 환경에 적절하지 않음

3) IPVS(IP Virtual Server): 로드밸런싱이 추가되어 동작

'DevOps > kubernetes' 카테고리의 다른 글

[udemy] 쿠버네티스 기초  (1) 2021.08.23