본문 바로가기

DevOps/쿠버네티스(Kubernetes)

(37)
[CKA] Kubernetes Scheduler Kubernetes Scheduler kubernetes 스케줄러는 노드의 Pod 스케줄을 담당한다. Scheduler는 어떤 Pod가 어떤 노드에서 어떤 Pod 로 이동하는지 결정하는 역할만 담당한다. 이것은 실제로 Pod를 노드에 배치하지 않는다. 실제로 Pod를 노드에 배치하는 것은 kubelet의 일이다. Scheduler는 어떤 Pod 가 어디로 가는지만 결정한다. 스케줄러가 어떻게 하는지 좀 더 자세히 살펴보자 우선 스케줄러가 왜 필요할까? 선박이 많고 컨테이너가 많을 때 올바른 컨테이너가 올바른 선박에 도착하는지 확인하려고 한다. 예를 들어 선박과 컨테이너의 크기가 다를 수 있다. 여러 선박이 다른 목적지로 이동할 수 있는 컨테이너를 수용할 수 있는 충분한 용량이 선박에 있는지 확인하려고 하..
[CKA] Kube Controller-Manager Kube Controller-Manager Kube Controller-Manager 쿠버네티스에서 다양한 컨트롤러를 관리한다. 컨트롤러는 마스터 선박 내의 사무실이나 부서들은 각자의 책임을 가지고 있다. 선박 사무실은 선박을 모니터링하고 필요한 조치를 취한다. 새로운 배가 도착하거나 배가 떠나거나 제거될 때마다 어떤 사무실은 손상되거나 가득 찬 컨테이너를 관리한다. 1. Watch Status 2. Remediate Situation 그 어떤 사무실은 계속해서 선박의 상태를 주시하고 있으며, 상황을 개선하기 위해 필요한 조치를 취한다. kubernetes 용어로 Controller는 시스템 내의 다양한 구성 요소의 상태를 지속적으로 모니터링하여 전체 시스템을 원하는 작동 상태로 만드는 프로세스이다. $..
[CKA] Kubernetes Kube-API Server Kubernetes Kube-API Server $ kubectl get nodes NAME STATUS ROLES AGE VERSION master Ready master 20m v1.11.3 node01 Ready 20m v1.11.3 Kube-api 서버는 kubernetes의 주요 관리 구성 요소이다. kubectl 명령을 실행하면 실제로 kubectl 유틸리티가 kube-apiserver에 도달한다. 1. Authenticate User 2. Validate Request 3. Retrieve data kube-apiserver는 먼저 요청을 인증하고 유효성을 검사한다. 그런 다음 ETCD 클러스터에서 데이터를 검색하고 요청된 정보로 응답한다. $ curl –X POST /api/v1/names..
[CKA] Kubernetes에서의 ETCD의 역할 ETCD란 무엇인가? 1. ETCD란 무엇인가? - 키 값(Key-Value) 저장이 무엇인가, 기존의 데이터베이스와 무엇이 다른가? 2. ETCD를 빠르게 시작하는 방법 3. 클라이언트 도구를 사용하여 ETCD를 운영하는 방법 ETCD란 무엇인가? 간단하고 안전하며 빠른 분산형, 신뢰할 수 있는 키 값 저장소이다. 키 값 저장소는 무엇일까? 전통적으로 데이터베이스는 표 형식이었다. SQL 또는 관계형 데이터베이스, 즉 행과 열의 형태로 저장된 데이터에 대해 들어본 적이 있을 것이다. Name Age Location DaHye Lee 28 Seongnam Seoungsil Sim 28 Seoul Chung Sim 5 Seoul Cherry 6 Gwangju 예를 들어, 여기 몇 명의 개인에 대한 정보를 ..
[CKA] Kubernetes Cluster Architecture 개요 Kubernetes Cluster Architecture 개요 Kubernetes의 목적 1. 자동화된 방식으로 컨테이너 형태로 애플리케이션을 호스팅하는 것 2. 애플리케이션 내의 서로 다른 서비스 간에 필요한 만큼 애플리케이션의 인스턴스를 쉽게 배포하고 통신을 쉽게 활성화 Kubernetes의 아키텍처는 선박에 비유할 수 있다. 예를 들어 두 종류의 배를 가지고 있다. 1. 컨테이너를 바다로 운반하고 제어하는 실제 작업을 수행하는 화물선 2. 화물선의 감시 및 관리를 담당하는 선박 컨테이너 형태로 애플리케이션을 호스팅하는 클라우드는 화물선으로 볼 수 있다. 클러스터의 작업자 노드는 컨테이너를 적재 할 수 있는 선박이다. 여기서 모니터링 장비를 제공하는 제어 선박은 1. 선박에 컨테이너를 적재 2. 적재..
쿠버네티스 Node IP 설정 쿠버네티스 Node IP 설정 현재 INTERNAL-IP가 설정되어 있지 않다. # conf 파일 수정 $ sudo vi /etc/systemd/system/kubelet.service.d/10-kubeadm.conf ExecStart=/usr/bin/kubelet $KUBELET_KUBECONFIG_ARGS $KUBELET_CONFIG_ARGS $KUBELET_KUBEADM_ARGS $KUBELET_EXTRA_ARGS --node-ip 192.168.56.11 # 시스템 재시작 $ sudo systemctl daemon-reload && sudo systemctl restart kubelet control-plane 및 각 node에서 /etc/systemd/system/kubelet.service.d..
스펙을 지정해 오브젝트 생성하기(.yaml) kubectl create deployment 명령으로 디플로이먼트를 생성했지만 한개의 파드만 만들어졌다. 디플로이먼트를 생성하면서 한꺼번에 여러개의 파드를 만들 순 없을까? create 에서는 replicas 옵션을 사용할 수 없고, scale은 이미 만들어진 디플로이먼트에서만 사용할 수 있다. 이런 설정을 적용하려면 필요한 내용을 파일로 작성해야한다. 이때 작성하는 파일을 오브젝트 스펙이라고 한다. 오브젝트 스펙은 일반적으로 야믈 문법으로 작성한다. 3개의 nginx파드를 디플로이먼트 오브젝트로 만들어보자. 명령어로는 3개의 파드를 가진 디플로이먼트를 만들 수 없으므로 오브젝트 스펙을 작성해 디플로이먼트를 만든다. 스펙을 지정해 오브젝트 생성하기 # echo.yaml apiVersion: apps/v..
쿠버네티스 레플리카셋(Replica Set) 레플리카셋 많은 사용자를 대상으로 웹 서비스를 하려면 다수의 파드가 필요한데, 이를 하나씩 생성한다면 매우 비효율 적이다. 그래서 쿠버네티스에서는 다수의 파드를 만드는 레플리카셋 오브젝트를 제공한다. 예를들어 파드를 3개 만들겠다고 레플리카셋에 선언하면 컨트롤러 매니저와 스케줄러가 워커노드에 파드 3개를 만들도록 선언한다. 그러나 레플리카셋은 파드수를 보장하는 기능만 제공하기 때문에 롤링 업데이트 기능등이 추가된 디플로이먼트를 사용해 파드수를 관리하기를 권장한다. 레플리카셋 작동 과정 1. 배포된 파드의 상태 확인 2. nginx-pod를 scale 명령으로 3개로 증가 리소스를 찾을 수 없다는 에러메세지 나옴, nginx는 파드로 생성되었기 때문에 디플로이 오브젝트에 속하지 않아서 리소스를 확인할 수 ..
쿠버네티스 디플로이먼트(Deployment) 디플로이먼트 기본 오브젝트만으로도 쿠버네티스를 사용할 수 있다. 하지만 한계가 있어서 이를 좀 더 효율적으로 작동하도록 기능들을 조합하고 추가해 구현한 것이 디플로이먼트(Deployment)이다. 이외에도 데몬셋(DaemonSet), 컨피그맵(Configmap), 레플리카셋(ReplecaSet), PV(PersistentVolume), PVC(PersistentVolumeClaim), 스테이트풀셋(StatefulSet) 등이 있으며, 앞으로도 요구사항에 따라 목적에 맞는 오브젝트들이 추가될 것이다. 쿠버네티스에서 가장 많이 쓰이는 디플로이먼트 오브젝트는 파드에 기반을 두고 있으며, 레플리카셋 오브젝트를 합쳐놓은 형태이다. API서버와 컨트롤러 매니저는 단순히 파드가 생성되는 것을 감시하는 것이 아니라 디..
쿠버네티스 오브젝트(Object) 보호되어 있는 글입니다.