Node Scheduling Pod를 생성할 때 해당 파드가 어떠한 노드에 배치되어야할지 유저가 지정하거나 쿠버네티스 스케줄러가 지정할 때 사용되는 기능이 스케줄링이며 쿠버네티스는 다양한 스케줄링 방법을 지원한다. 특정 Node 선택 NodeName, NodeSelector, NodeAffinity의 방법이 있는데. 하나하나 알아보면 다음과 같다. NodeName: 노드의 이름을 지정하여 할당한다. NodeSelector: Node의 label을 지정하여(key value가 같은 값) 할당한다. NodeAffinity: 노드의 label을 지정하는 것은 같지만 key를 지정하여 더욱 유연하게 할당이 가능하다. NodeName은 지정하기 간단하다는 장점이 있지만 파드 특성상 파드 이름이 자주 바뀌며 적용하..
전체 글
개발만 하기는 심심하니 기록 또 기록..쿠버네티스에서 노드의 메모리 자원이 부족해지면 어떤 파드나 프로세스를 종료해서 다른 파드에 재할당하는 작업과 같은 것들을 진행해야한다. 그럼 어떤 기준으로 재할당을 진행하는 것일까? 한 번 이 기준에 대해서 알아보도록 하자. Kubernetes OOM 그 전에 쿠버네티스 OOM(Out of Memory)에 대해서 알아보도록 하자. kubectl describe nodes {node_name} | grep -A9 Conditions 쿠버네티스의 각 노드에는 노드의 이상 상태 정보를 포함하는 conditions라는 것이 있다 MemoryPressure는 기본적으로 가용 메모리가 100Mi 이하일 때 발생하도록 Kubelet에 설계되어있다. MemoryPressure가 발생하게 되면 기본적으로 해당 노드에서 ..
지난 글에서 Pod 생명 주기, 재시작 정책에서 컨테이너 상태, 정책이 존재한다는 것을 알았다. 그렇다면 쿠버네티스는 어떻게 이 컨테이너들의 상태를 분석하고 처리할 수 있는 것일까? 바로 kubelet의 Probe가 이 역할을 해준다. Probe는 파드 안에 컨테이너의 상태를 진단하고 분석하여 재시작, 종료가 필요한지에 여부를 확인할 수 있게 도와준다. Probe 동작 방식 Probe는 총 세 가지의 방식으로 컨테이너의 상태를 진단한다. HTTP 방식: HTTP GET요청을 보내서 2xx, 3xx 응답이 오는지 체크한다. TCP 방식: 3-way-handshake가 잘 맺어져 있는지 확인한다. Exec 방식: 컨테이너 특정 명령어를 실행해서 종료코드가 0인지 확인한다. 이러한 진단 결과는 크게 Succe..
Pod의 생명주기와 재시작 정책 그리고 컨테이너 다음글에선 상태 진단을 위한 Probe에 대해서 알아보겠다. Pod의 생명주기 pod의 생명주기는 네 가지의 단계로 구분이 되어진다. PENDING: 클러스터 내 파드가 승인이 되었지만 아직 컨테이너 내부가 시작되기 전이며 노드에 배치되지 않은 상태다. RUNNING: 클러스터 내 파드가 승인되고 컨테이너가 시작되어 노드에 배치되어있는 상태다. SUCCEEDED: 노드에 대한 유한한(정적인) 작업이 완료되었을때 나타내는 상태다. 노드를 종료할 때 나타내는 상태이며, 해당 작업을 정상적으로 마쳤다는 뜻이다. FAILED: 노드에 대한 유한한(정적인) 작업이 완료되었을때 나타내는 상태다. 노드를 종료할 때 나타내는 상태이며, 해당 작업이 비정상 종료되었음을 의..
Pod은 쿠버네티스의 가장 기본적인 배포 단위다. 마스터 노드에서는 워커노드로 Pod을 전달하고 워커노드에서는 Pod을 수행하는 구조다. 파드는 1개 이상의 컨테이너가 캡슐화 되어 클러스터 안에서 배포되는 가장 작은 단위라고 생각하면 된다. 파드는 다음과 같은 특징들을 가지고 있다. 기본적으로 하나의 파드에는 하나 이상의 컨테이너가 포함된다. 필요에 따라 여러개가 표함될 수도 있다. 파드는 노드IP와 별개 고유 IP를 할당 받으며, 파드 안에 컨테이너들이 공유한다. 파드 자체는 일반적으로 1개의 IP만을 가질 수 있다.(단, Multus CNI 이용 등 특정 조건에 한해 2개를 가질 수도 있긴하다.) 파드 안에 컨테이너들은 동일한 볼륨을 연결할 수 있다. 파드는 클러스터내에 배포 최소 단위이고 특정 네임..
지난글 쿠버네티스 클러스터에서 노드 컴포넌트들에 대해 대강 알아보았는데 이번에 더 자세히 알아보겠다. 노드 컴포넌트는 각 노드에서 파드와 컨테이너를 구동시키고 관리하기 위해 필요한 요소들을 의미한다. 이들은 워커 노드 뿐만 아니라 마스터 노드에도 존재한다. 클러스터 제어에 필요한 컨트롤 플래인 컴포넌트 역시 개별 파드로 구동되므로 이들을 관리할 수 있는 도구가 필요하다고 볼 수 있다. kubelet 클러스터의 각 노드에서 파드 안에 컨테이너들이 정상 구동되도록 조율하는 에이전트다. 마스터 노드의 스케줄러가 파드를 노드에 할당하면 kubelet이 최종적으로 해당 파드에 컨테이너를 배치하게 된다. 또한 파드와 컨테이너의 상태를 주기적으로 체크하여 그 결과를 API 서버에 전송하는 역할도 맡는다. kubead..
지난 글 Kubernetes Cluster에서 Master Node는 클러스터의 Control Plane이라 했으며, 구성 요소들도 대강 함께 알아보았는데 이번에는 각 구성요소들을 더 자세히 알아보겠다. etcd: 키-값 형태의 데이터베이스로 클러스터 안의 구성정보들을 저장한다. scheduler(kube-scheduler): 애플리케이션 구동에 필요한 각 컨테이너들에대해 클러스터 내 최적의 배포를 수행하는 스케쥴러 controller-manager: Node, Deployment, Service Account 등 클러스터에 구동되는 리소스들을 유지 관리하는 프로세스들의 집합 kube-dns: 클러스터 안에 특정 DNS를 찾는데 사용되는 네임 서버 (구성도에는 kube-dns라 되어 있으나, 쿠버네티스 ..
쿠버네티스의 클러스터는 컨테이너 형태의 애플리케이션을 호스팅하는 물리/가상 환경의 노드들의 집합을 의미한다. 쿠버네티스의 호스트에는 여러개의 클러스터 단위로 자원들이 구성되어 관리되어지며 컨트롤 플래인 역할을 수행하는 마스터 노드를 두고, 관리자는 이 마스터노드를 통해 클러스터 전체를 제어하는 구성을 따른다. 쿠버네티스의 클러스트는 용도에 따라 마스터 노드 Master Node, 워커 노드 Worker Node로 나눌 수 있다. 역할은 다음과 같다. 마스터 노드: 컨테이너 선단을 지휘하는 역할을 한다. 각 워커노드들의 가용 리소스 현황을 고려하여 최적의 배치와 모니터링, 그리고 각 컨테이너에 대해 효율적인 추적 관리가 필요하다. 쿠버네티스 클러스터에서 이 역할을 수행하는 노드를 마스터 노드라고 한다. 워..
반성하기 인간이 가장 성장하는 시점은 단연코 반성하는 시점일 것이다. 반성을 통해 나의 문제를 인지하고 고쳐나가야한다. 그러나 많은 사람들은 반성하기를 하지 않는다. 자신이 맞고 상대방이 틀렸다고 생각하고 자기위로를 하게 된다. 나도 그랬다. 그러나 반성을 하지 않은 사람들이 갖고있는 행동과 신념이 과연 올바른 것일지 생각해보자 대부분 아니라고 생각한다. 사람은 자신의 가치관과 틀린 일을 겪게 된다면 반성보다는 스스로 타협하고 타인으로부터 위로를 받는다. 그리고 내가 틀리지 않았음을 증명하려 애쓴다. 이상하지 않는가? 자신의 가치관에 확신이 있다면 그 가치관을 왜 누군가에게 증명하려 하는가 그것부터가 자신에 가치관에 대한 신뢰가 흔들리고 있다는 뜻이다. 반성하는 것은 혼자 남았을때 시작된다. 혼자 생각하..