728x90
반응형
Certified Kubernetes Administrator (CKA) with Practice Tests 1-17
- 기업에서 Kubernetes Engineer를 영입하는 경우가 늘 것이다. -> Googel Trends 지표에서만 확인해도 알 수 있다.
- Kubernetes 기술 요구가 173% 향상되었다.
- CKA 자격증은 Kubernetes Cluster 를 설계, 빌드, 관리할 자격을 얻게된다.
- Kubernetes 시험은 객관식이 아니다.
- Kubernetes 는 아키텍쳐, 네트워크 부하 분산, 다양한 모니터링, 도구 자동배율 ,보안 저장소 등의 역할을 한다.
Kubernetes Cluster란?
** 쿠버네티스 클러스터는 애플리케이션 컨테이너를 실행하기 위한 일련의 노드 머신입니다. 쿠버네티스를 실행 중이라면 클러스터를 실행하고 있는 것입니다.
728x90
Kubernetes Cluster Architecture ?
- Kubernetes 의 목적은 응용 프로그램을 컨테이너 형식으로 자동적으로 호스트하는 것이다. => 프로그램의 많은 Instance 를 쉽게 배포 할 수 있고 응용 프로그램 내 다양한 서비스 간의 통신이 쉽게 가능하다.
- Kubernetes Cluster는 노드 세트로 구성되는데 물리적, 가상, 온-프로미스, 클라우드, 컨테이너 형태의 응용프로그램 호스트일 수 있다.
- Worker Nodes : 컨테이너를 로딩 할 수 있다.
- Master Node : 클러스터를 관리하고 서로 다른 노드에 대한 정보를 저장하고 식별, 감시, 추적, 전적인 적재 과정을 관리한다.
- ETCD : 고가용 키 값 스토어 키 값 형식으로 정보를 저장하는 데이터베이스이다.
- kube-scheduler : 적재 용량 및 기타 조건을 기준으로 선박의 목적지와 컨테이너 종류를 결정한다.
- 일정 관리자는 컨테이너를 설치하기 위해 올바른 노드를 식별합니다. 컨테이너 리소스 요구 사항이나 워커 노드 용량 혹은 다른 정책이나 제약 조건들, 테인트와 관용 또는 노드 친화성 규칙에 근거해서요.
- Node-Controller : Kubernetes 내부에 존재하는 컨트롤러로 노드를 관리한다. 새로운 Node 를 클러스터에 Onboarding 하고 Node 가 사용 불가능하거나 파괴되는 상황을 처리한다.
- Replication-Controller : Kubernetes 내부에 존재하는 컨트롤러로 원하는 컨테이너 수가 복제 그룹에서 항상 실행되도록 보장한다.
- Kubernetes 내에는 서로 다른 역할을 하는 부서들 , 데이터 저장소, 크레인 등이 존재한다.
Kube API Server?
- Kubernetes 의 주요 관리 구성 요소이다.
- 클러스터에서 관리 작업을 수행하는 데 외부 사용자가 사용하는 것이다.
- 요구에 따라 필요한 변경을 하고 작업자 노드가 서버와 통신한다.
- Application은 컨테이너 형태이다.
- Master Node 에서는 전체 관리를 한다.
- DNS 서비스 네트워킹 솔루션은 컨테이너 형태로 배포될 수 있다. -> 컨테이너를 실행할 이런 소프트웨어가 필요하다. 이런 소프트웨어 -> Container Runtime Engine;
- 대표적인 Container Runtime Engine 은 Docker 이다.
- 클러스터 내의 모든 노드에 설치되어 있다.
- 서버는 주기적으로 Kubelet으로부터 컨테이너 상태 보고서를 가져온다.
- 모든 작업을 Orchestrating 하는 역할이다.
Kubelet?
- 컨테이너에 대한 정보를 받고 필요한 만큼 적재하고 컨테이너 상태와 Kubernetes 에 있는 컨테이너 상태들을 보고한다.
- 클러스터의 각 노드에서 실행되는 에이전트이다.
- Kube API 서버의 지시를 듣고 필요한 대로 노드에서 컨테이너를 배포하거나 파괴한다. 즉, 컨테이너와 Kube-proxy 를 관리하는 역할이다. 클러스터 내부의 서비스 간 통신을 가능하게 한다.
Kube-proxy ?
- Worker Node 간의 통신을 가능하도록 만들어준다.
- Worker Node에 필요한 규칙이 시행되도록 한다. -> proxy 위에서 실행되는 컨테이너들 간에 통신이 가능하도록한다.
ETCD ?
- 마스터 노드에 존재한다.
- 클러스터에 관한 정보를 저장한다.
- 분산되고 신뢰할 수 있는 Key value store 로 간단하고 안전하며 신속하다.
- Key-value store?
- 전통적인 관계형 데이터베이스와는 달리 문서나 페이지의 형태로 정보를 저장한다.
- .
- 수정사항이 있을 때 다른 비슷한 문서를 업데이트 하지 않고 문서에 추가적인 세부 사항을 추가 할 수 있다.
- 단순한 키와 값을 저장하고 회수할 수 있는 반면 데이터가 복잡해지면 일반적으로 JSON 같은 데이터 포맷을 이용한다.
- Install ETCD
- Download Binaries -> Extract -> Run ETCD Service
- ETCD 를 실행시키면 기본 포트 2379의 서비스가 시작된다.
- 어떤 클라이언트든 이 ETCD 서비스에 연결해 정보를 저장하고 검색할 수 있다.
- ETCD Controll Client = ETCD commend line client
- v2 키 값 쌍을 저장하는 방법 = ./etcdctl set key1 value1
- v2 저장된 데이터 검색 = ./etcdctl get key1
- ETCD v2 와 v3 의 명령어가 다르기 때문에 버전을 정확히 알아야한다. -> ./etcdctl --version
- ETCDCTL 을 api v3으로 작업하도록 바꿀라면 ETCDCTL_API 환경 변수를 3으로 바꿔줘야한다
- v3 키 값 쌍을 저장하는 방법 = ./etcdctl put key1 value1
- v4 저장된 데이터 검색 = ./etcdctl get key
- 클러스터에 관한 정보를 저장한다. -> Nodes, PODs, Configs, Secrets,Accounts,Roles,Bindings,Others
- 클러스터에 노드를 추가한다던가 PODS 배포나 복제본을 서버에 업데이트 할 때 ETCD 서버에 업데이트 되어야지만 완료된 것으로 간주한다.
- ETCD 배포 유형
- Setup - Manual (Scratche)
- 바이너리를 직접 다운해서 배포한다.
- 마스터 노드에 직접 바이너리를 설치하고 서비스를 구성한다.
- advertise-client-urls 는 ETCD가 리스닝 하는 주소이다.
- advertise-client-urls -> kube API 서버에서 구성해야한다.
- Setup - kubeadm
- kubectl get pods -n kube-system
- 고가용성 환경에선 클러스터에 마스터 노드가 여러개이다.
- 마스터 노드 전체에 여러 개의 ETCD 인스턴스가 퍼지게 된다. -> 이런 경우 ETCD 서비스 구성에 맞는 매개 변수를 설정하여 ETCD 인스턴스가 서로에 대해 알도록 한다.
- initial-cluster 는 기타 서비스의 다양한 인스턴스를 지정하는 곳이다.
- kubectl get nodes 명령어를 실행하면 kubectl이 kube-apiserver에 도달하여 요청인증 및 유효성 체크를 한다.
- Kubernetes Master Node 에서 바이너리를 서비스로 실행되도록 다운하고 구성한다.
- kube-apiserver 는 많은 매개 변수로 실행된다.
- kubeadmin 툴로 설정하면 kubeadmin은 kube-apiserver를 배포한다. -> Master Node의 kube-syption namespace POD
- cat /etc/kubernetes/manifests/kube-apiserver.yaml -> 포드 정의파일
- kubeadmin 툴이 아닌 걸로 설정하면 kube-apiserver service를 보면서 옵션을 검사할 수 있다. -> cat /etc/systemd/system/kube-apiserver.service
계속 언급되는 POD가 뭐지?
쿠버네티스 포드는 Linux® 컨테이너를 하나 이상 모아 놓은 것으로, 쿠버네티스 애플리케이션의 최소 단위입니다.
Kube Controller Manager?
- 사무실의 부서같은 역할을 한다.각 맡은 책임이 있다.
- 컨테이너들을 관리하는 부분도 있고 전체적인 상태를 살피는 부분도 있다.
- 시스템 내 다양한 구성 요소 상태를 지속적으로 모니터링하고 시스템 전체를 원하는 기능 상태로 만든다.
- Node Controller 는 nodes의 상태를 모니터링하고 응용 프로그램이 Kube API를 통해 계속 실행되도록 한다.
- Replication-Controller 복제품의 상태를 모니터링하고 원하는 수의 PODS가 세트 내에서 항상 사용가능하도록 유지한다.
- 여러 역할을 하는 Controller 들은 Kube Controller Manager 를 통해서 관리된다.
- 설치를 위해서는 Kube Controller Manager 를 다운로드해서 실행한다.
- cat /etc/kubernetes/manifests/kube-controller-manager.yaml -> 포드 정의 파일에서 옵션을 볼 수있다.
- cat /etc/kubernetes/manifests/kube-controller-manager.service
Kube Scheduler?
- 어떤 PODS 가 어떤 Node 에 들어갈지만 결정하는 방향성에만 관여하고 PODS를 Node에 두지는 않는다.
- PODS를 Node에 두는 것은 Kublet의 일이다.
- 알맞은 컨테이너를 올바른 목적지로 전달해야하기 때문에 올바르게 배에 실렸는지 확인해야 한다.
- kube-scheduler는 특정 기준에 따라 포드를 어느 노드에 놓을지 결정한다. -> 리소스 요구 사항이 다른 포드가 있을 수 있기 때문이다.
- kube-scheduler는 각 POD를 보고 최고의 Node를 찾으려한다.
위의 사진과 같이 cpu 같은 사양에서 맞지 않는 것을 먼저 거른다
- 그 다음 우선순위 함수를 이용해서 0부터 10까지의 점수로 남은 노드에 점수를 매긴다.
- POD 를 넣은다음 노드에 자유로워지는 리소스 양이 많은 것을 순위를 높게 준다.
728x90
반응형
'Kubernetes (k8s)' 카테고리의 다른 글
CKA 준비 Node affinity, Resources Limit, Demon Sets, Static Pod (0) | 2023.02.19 |
---|---|
CKA 준비 Scheduler, Label & Selector, Taints And Tolerations, Node Affinity (0) | 2023.02.17 |
CKA 준비 Cluster IP,Namespace,Imperative vs Declarative (0) | 2023.02.16 |
CKA 준비 Replication Controller, Service, Deployment, ReplicaSet (0) | 2023.02.13 |
CKA 준비 Kubelet, POD, Kube Proxy, YAML (0) | 2023.02.12 |