CKA Study Day 1

김건호·2023년 3월 26일
1

오늘의 범위 1-17, 273

쿠버네티스 공인 과정 자격증을 따보자!

CKA란?

Certified Kubernetes Administrator의 약자로 Linux Foundation에서 제공하는 시험

  • 온라인 시험 방식 -> 네트워크 중요
  • 객관식이 아님 -> 기술이 어떻게 아는지 중요
  • 3시간의 시험시간
  • 공식문서 페이지 참조 가능

kubernetes란?

컨테이너를 관리하는 오케스트레이션

클러스터 아키텍쳐

배, 컨테이너, 호스트로 예시를 들자면,

여러가지 함께 작용해야 가능한 일

컨테이너를 싣는 배 = 노드는 온프렘, 가상, 클라우드로 가능

화물선 =워커노드, 마스터 노드드 적재하고 적재하기 위한 관리

관제선 = 마스터노드 컨테이너 관리하고 정보 저장, 스케쥴링, 모니터링

control-plain

etcd

컨테이너의 정보를 저장하는 key-value형식의 database

scheduler

배가 도착하면 크레인을 이용해 컨테이너 배치 = 스케쥴러

controller-manager

컨테이너 손상 시 새 컨테이너 준비 -> 컨트롤러 노드, 컨트롤러 매니저, 레플리케이션 컨트롤러 레플리카 컨테이너 생성

kube-apiserver

컨트롤 타워 같은 역할, 위의 모든 요소들은 api-server를 통해 통신해서 작동

container runtime

컨테이너를 실행할 sw
EX) 도커

  • 모든 노드에설치
  • 도커외에 다른 엔진도 지원

kubelet

배의 선장 역할
모든 활동 관리책임 -> kubelet이 api통신하여 노드에서 컨테이너 배포
주기적으로 상태보고서 가져옴 -> 모니터링

kube-porxy

워커노드의 정책을 세팅하는 역할


ETCD

분산 key-value storage

관계형 DB

  • 행과 열의 테이블 형 관계형 DB가 아닌 빈 컬럼이 있을 수 있음
  • 열과 행을 추가하는 과정에서새로운 정보 추가시 테이블 전체 영향이 생김

etcd는 key-value❗

문서와 페이지 형태
다른 문서 업데이트 없이 추가사항 업데이트 가능

  • json, yaml형식 ETCD 사용하여
  • 디비 생성
etcdctl etcd set key1 value1 
  • 값 조회
etcdctl get ke1 -> value

etcd version

  • 0버전 2013 8월
  • 0.5 2014
  • 2.0 2015
  • 3.1 2017
  • 2018 CNCF 등록

2에서 3으로의 번화

API 버전의 변화로 인해 etcdctl 변화가 있음

etcdctl 기본 설치 시, v2 v3동시에 작동

버전 확인

etcdctl --version (on v2)
etcdctl version (on v2)

etcd 버전과 API 버전이 있음
APi version 2 -> 2버전과 통신

❗ 명령 실행전 API 버전 확인 필요 ❗

How❓

ETCDCTL_API 사용하여 3버전으로 환경변수 설정
export ETCDCTL_API=3

v3에서 데이터를 저장 및 조회하는 법

etcdctl put key1 value1
etcdctl get key1

역할

클러스터에 관한 정보 저장
node, pod, config, secret, account, role, bindding, others...

클러스터에 변화를 줄때마다 모든 정보 etcd서버에 저장
etcd에 전송되어야만 완료 된 것으로 인식

구성방법

  1. 직접 마스터노드에서 서비스로 설치
  2. kubeadm 클러스터로 구성
    advertise-client-urls 서버 IP 2379 설정을 kube-apiserver.yaml에 지정해야함

kubeadm 클러스터로 구성 시, 파드로 etcd 생성함

모든 키 열거 방법

kubectl exec etcd-master -n kube-system -- sh -c "ETCDCTL_API=3 etcdctl get / 
--prefix --keys-only --limit=10 
--cacert /etc/kubernetes/pki/etcd/ca.crt 
--cert /etc/kubernetes/pki/etcd/server.crt  
--key /etc/kubernetes/pki/etcd/server.key" 

특징

고가용성 보장을 위해 클러스터 내에 마스터노드 여러개 생성 -> 여러개의 etcd

서로에 대해 통신을 위해 inital-cluster 옵션을 통해 ectd 인스턴스 지정

etcdctl 사용시 인증서 파일 지정 필수

--cacert /etc/kubernetes/pki/etcd/ca.crt     
--cert /etc/kubernetes/pki/etcd/server.crt     
--key /etc/kubernetes/pki/etcd/server.key

kube-apiserver

kubectl 명령어 사용시 apiserver 에 요청 -> etcd로 정보 요청 및 응답
직접 api 호출도 가능

파드 생성 과정

  1. 생성 요청 (인증 후, 유효성 확인 후에)
    api 접근 없이 파드 생성 생성된 사용자 업데이트

  2. 스케쥴러 새로운 파드 스케쥴링 api server 로 통해

  3. 노드 kubelet에 전송 kubelet 컨테이너 러ㄴ타임 이미지 배포

  4. 다시 api로 업데이트 - etcd로 업데이트
    모든 요소는 apiserver를 통해 업데이트

구성방법

  1. 바이너리를 활용한 서비스로 생성
    다른 컴포넌트들이 어디있어야 하는지 알아야함 -> 인증, 승인, 암호화, 보안
  2. kubeadm을 활용한 파드로 배포

인증 파일들

etcd server 정보 저장

  • 1의 구성방법 시,
/etc/systemd/system/kube-apiserver
ps -aux | grep kube-apiserver
  • 2의 구성방법 시,
/etc/kubernetes/manifest/kube-apiserver.yaml

kube controller manager

컨트롤러를 관리하는 배의 예시에서 책임자 부서
함선을 감시 상황마다 필요한 조치를 취함(새 배 도착 떠날때마다 -> 파드 생성/삭제 될 때마다)

상태를 항상 확인하여 재조정 함

컨트롤러 상태 지속적 모니터링하여 시스템을 구축, 원하는 기능, 상태로 만듬

EX)
1. 노드 컨트롤러는 apiserver 통해 노드 상태 모니터링

Node Monitor Period = 5s
--> ready notReady node Monitor Grace Period =40s
다시 뜰때까지 5분 걸림 POD Eviction Timeout =5m

  1. replica controller
    원ㄴ하는 수의 파드가 생성 되도록 조정하는 컨트롤러
    pod 죽으면 다른 파드 생김

이외에도 쿠버네티스에는 컨트롤러가 많음.. pvc.. namespace.. 등
이 모든 것을 관리하는 요소가 kube-controller-manager 로 구성됨

구성방법

  1. 서비스로 생성
  2. kubeadm을 통한 파드로 생성

인증 및 구성파일

1의 경우

/etc/systemc/system/kube-controller-manager
ps -aux | grep kube-controller-manager

2의 경우

/etc/kubernetes/manifest/kube-controller-manager.yaml

컨트롤러 추가옵션 컨트롤러 활성화/비활성화, 서버 옵션 지정 가능


kube-scheduler

어떤 파드가 어떤 노드에 둘 지만 결정 ->파드를 노드에 생성하는 건 아님(kubelet) ->

어떻게 ?

스케쥴러 왜 필요한가

알맞은 컨테이너를 알맞은 배에 실어야함
크기가 다를 수 있고, 충분히 수용할 수 있는 지확인
목적지가 다를 수 있음 배마다 컨테이너가 올바른 목적지로 갈수 있게

리소스 요구사항이 다른 파드가 있을 수 있고, 특정 노드에만 배치될 수 있는 파드가 있음

파드 확인 후, 최적 노드를 찾으려함
EX) cpu memory 요구사항 필터링 함 노드에 대해 리소스 모자라면 걸러짐

노드에 ranked 하여 점수를 매김 노드에 남을 리소스양을 계산함 많은쪽이 순위가 높음

리소스 요구사항

  • taint/untaint
  • nodeSelector/affinity

구성방법

1.서비스로 실행가능

ps -aux | grep kube-scheduler

2.kubeadm 클러스터링

/etc/kubernetes/manifest/kube-scheduler.yaml

실습환경 구성


스터디 인증용


Below are some references:

Certified Kubernetes Administrator: https://www.cncf.io/certification/cka/

Exam Curriculum (Topics): https://github.com/cncf/curriculum

Candidate Handbook: https://www.cncf.io/certification/candidate-handbook

Exam Tips: http://training.linuxfoundation.org/go//Important-Tips-CKA-CKAD

Git hub: https://github.com/kodekloudhub/certified-kubernetes-administrator-course


profile
Ken, 🔽🔽 거노밥 유튜브(house icon) 🔽🔽

0개의 댓글