오늘의 범위 1-17, 273
쿠버네티스 공인 과정 자격증을 따보자!
Certified Kubernetes Administrator의 약자로 Linux Foundation에서 제공하는 시험
컨테이너를 관리하는 오케스트레이션
배, 컨테이너, 호스트로 예시를 들자면,
여러가지 함께 작용해야 가능한 일
컨테이너를 싣는 배 = 노드는 온프렘, 가상, 클라우드로 가능
화물선 =워커노드, 마스터 노드드 적재하고 적재하기 위한 관리
관제선 = 마스터노드 컨테이너 관리하고 정보 저장, 스케쥴링, 모니터링
컨테이너의 정보를 저장하는 key-value형식의 database
배가 도착하면 크레인을 이용해 컨테이너 배치 = 스케쥴러
컨테이너 손상 시 새 컨테이너 준비 -> 컨트롤러 노드, 컨트롤러 매니저, 레플리케이션 컨트롤러 레플리카 컨테이너 생성
컨트롤 타워 같은 역할, 위의 모든 요소들은 api-server를 통해 통신해서 작동
컨테이너를 실행할 sw
EX) 도커
배의 선장 역할
모든 활동 관리책임 -> kubelet이 api통신하여 노드에서 컨테이너 배포
주기적으로 상태보고서 가져옴 -> 모니터링
워커노드의 정책을 세팅하는 역할
분산 key-value storage
문서와 페이지 형태
다른 문서 업데이트 없이 추가사항 업데이트 가능
etcdctl etcd set key1 value1
etcdctl get ke1 -> value
API 버전의 변화로 인해 etcdctl 변화가 있음
etcdctl 기본 설치 시, v2 v3동시에 작동
etcdctl --version (on v2)
etcdctl version (on v2)
etcd 버전과 API 버전이 있음
APi version 2 -> 2버전과 통신
❗ 명령 실행전 API 버전 확인 필요 ❗
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에 전송되어야만 완료 된 것으로 인식
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
kubectl 명령어 사용시 apiserver 에 요청 -> etcd로 정보 요청 및 응답
직접 api 호출도 가능
생성 요청 (인증 후, 유효성 확인 후에)
api 접근 없이 파드 생성 생성된 사용자 업데이트
스케쥴러 새로운 파드 스케쥴링 api server 로 통해
노드 kubelet에 전송 kubelet 컨테이너 러ㄴ타임 이미지 배포
다시 api로 업데이트 - etcd로 업데이트
모든 요소는 apiserver를 통해 업데이트
etcd server 정보 저장
/etc/systemd/system/kube-apiserver
ps -aux | grep kube-apiserver
/etc/kubernetes/manifest/kube-apiserver.yaml
컨트롤러를 관리하는 배의 예시에서 책임자 부서
함선을 감시 상황마다 필요한 조치를 취함(새 배 도착 떠날때마다 -> 파드 생성/삭제 될 때마다)
상태를 항상 확인하여 재조정 함
컨트롤러 상태 지속적 모니터링하여 시스템을 구축, 원하는 기능, 상태로 만듬
EX)
1. 노드 컨트롤러는 apiserver 통해 노드 상태 모니터링
Node Monitor Period = 5s
--> ready notReady node Monitor Grace Period =40s
다시 뜰때까지 5분 걸림 POD Eviction Timeout =5m
이외에도 쿠버네티스에는 컨트롤러가 많음.. pvc.. namespace.. 등
이 모든 것을 관리하는 요소가 kube-controller-manager 로 구성됨
1의 경우
/etc/systemc/system/kube-controller-manager
ps -aux | grep kube-controller-manager
2의 경우
/etc/kubernetes/manifest/kube-controller-manager.yaml
컨트롤러 추가옵션 컨트롤러 활성화/비활성화, 서버 옵션 지정 가능
어떤 파드가 어떤 노드에 둘 지만 결정 ->파드를 노드에 생성하는 건 아님(kubelet) ->
어떻게 ?
알맞은 컨테이너를 알맞은 배에 실어야함
크기가 다를 수 있고, 충분히 수용할 수 있는 지확인
목적지가 다를 수 있음 배마다 컨테이너가 올바른 목적지로 갈수 있게
리소스 요구사항이 다른 파드가 있을 수 있고, 특정 노드에만 배치될 수 있는 파드가 있음
파드 확인 후, 최적 노드를 찾으려함
EX) cpu memory 요구사항 필터링 함 노드에 대해 리소스 모자라면 걸러짐
노드에 ranked 하여 점수를 매김 노드에 남을 리소스양을 계산함 많은쪽이 순위가 높음
리소스 요구사항
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