분류 전체보기

    (TIL) Kubernetes Static Pods

    Static PodStatic Pod란 kubelet이 직접 관리하는 Pod로 API Server 없이 kubelet 단독으로 실행이 가능하다.kubernetes control plane 없이도 작동이 가능하며 주로 Kubernetes의 자체 구성요소(API server, etcd)등을 실행할 때 사용한다. 작동 구조kubelet 설정에서 `--pod-manifest` 혹은 `--config` 경로를 지정하고 해당 경로에 yaml 파일을 넣으면 자동으로 kubelet이 읽고 pod를 생성한다. 예를들어, /etc/kubernetes/manifests/위 경로에apiVersion: v1kind: Podmetadata: name: my-static-podspec: containers: - name:..

    (TIL) Kubernetes DaemonSet

    DaemonSetDaemonSet이란 각 노드마다 단 하나의 Pod을 배포하고 관리하는 Kubernetes 리소스이다.노드가 추가되면 자동으로 Pod도 추가되며, 노드가 삭제되면 Pod도 삭제된다. DaemonSet의 용도DaemonSet은 일반적으로 모니터링 에이전트, 로그 수집기, 네트워크 컴포넌트, 보안 에이전트등에 사용된다.ex) Prometheus Node Exporter, Datadog, Fluentd, Logstash DaemonSet의 구조apiVersion: apps/v1kind: DaemonSetmetadata: name: monitoring-daemonspec: selector: matchLabels: app: monitoring-agent template: ..

    (TIL) Kubernetes에서의 Resource Request & Limits

    IntroPod는 기본적으로 노드의 자원을 사용하며, 여기서 자원은 주로 CPU와 메모리를 말한다.스케줄러는 요청된 자원양을 기준으로 Pod의 배치를 결정하며, 해당 조건을 yaml파일에 명시할 때는 pod가 아니라 각 container 단위로 설정된다. Requestrequest는 최소 보장 자원을 의마한다. resources: requests: memory: "512Mi" cpu: "0.5" 위와 같이 설정하였을 때, 스케줄러는 이 값을 기준으로 노드를 선택하며, 최소한으로 보장되는 값이다.여기서 cpu에 0.5라고 설정하는 것은 500m이라고 설정하는 것과 같다. Limitslimits는 최대 허용 자원을 의미하며, 해당 컨테이너는 이 값을 넘을 수 없다. resources: limi..

    (TIL) Kubernetes Taints & Toleration 와 Node Affinity

    Intro앞서 Kubernetes에서 파드의 스케줄링 노드 제한조건으로 사용할 수 있는 Taints & Toleration과 Node Affinity의 개념에 대해서 알아보았다. 동일한 역할을 하는 다른 두 개념이 존재한다는 것은 당연하게도, 두 개념이 필요에 따라 선택적으로 사용되거나 함께 사용되어야 하기 때문이다. Example다음과 같은 시나리오를 상정한다. Red, Blue, Green 이라는 세 가지 노드가 존재한다.Red, Blue, Green 이라는 세 가지 Pod가 존재한다. 우리는 이 상황에서 같은 색의 파드가 같은 색의 노드에만 배치될 수 있도록 하려고한다고 하자.Taints & Toleration 만 사용한 경우각 노드에 다음과 같은 Taints를 설정한다.Red : key = col..

    (TIL)Kubernetes의 Node Selector와 Node Affinity

    Intro쿠버네티스 클러스터 내부에는 다양한 성능의 노드들이 혼재하여 존재할 수 있다. 우리는 데이터 처리를 위한 파드는 특정한 고사양 노드에서만 실행되기를 원할 수 있는데, 기본 스케줄러는 이러한 사항을 고려하지 않고 랜덤한 노드에 파드를 배치하게된다. 이러한 상황에서 선택할 수 있는 해결책이 `Node Selector`이다. Labeling다음과 같은 명령어를 사용해서 간단하게 node에 label을 붙일 수 있다.kubectl label nodes node1 size=large 위 명령어를 사용하면, node1이라는 노드에 size=large라는 라벨을 가지게 할 수 있다. Node Selector 적용apiVersion: v1kind: Podmetadata: name: dataproc-podsp..

    (TIL) Taints and Tolerations

    Taints and TolerationTaints는 벌레 퇴치제, Toleration은 내성을 말한다.Kubernetes에서 이 두 개념은 특정 파드가 어떤 노드에 배치되지 않도록 하거나 특정한 파드만 배치될 수 있도록 노드의 수준을 제한하는 설정에 사용되는 개념이다. Taint는 노드에 설정되며 Toleration은 파드에 설정된다. 동작 예시node1, node2, node3 세 노드가 존재하고pod1,pod2,pod3,pod4 네 pod이 존재한다고 가정하자 node1에 `taint: app=blue:NoSchedule` 로 설정하고 pod에 아무런 설정도 하지 않는 경우 어떤 pod도 node1에 배치될 수 없다. tolerations: - key: "app" operator: "Equal..

    (TIL) Kubernetes Labels & Selectors

    Labels란Key-Value 형식의 메타데이터로 Kubernetes 객체에 붙일 수 있는 정보이다.객체를 분류하고 그룹화하기위한 용도로 사용된다. Selector란Labels 기반으로 필터링을 진행하기 위한 도구로 특정 조건을 기준으로 Kubernetes 객체를 선택한다.kubectl get pods --selector="app=frontend" 사용 예시apiVersion: v1kind: Podmetadata: name: mypod labels: app: app1 tier: frontendspec: containers: - name: nginx image: nginx kubectl get pods --selectors="app=app1" 이라는 명령어를 통해 위 객체를 ..

    (TIL) Kubernetes Manual Scheduling

    Scheduler 없이 파드가 동작하는 방식Kubernetes에서 Scheduler가 따로 설정되어있지 않는 경우, 기본적으로 kube-scheduler라는 컴포넌트가 파드를 어떤 노드에 배치할지 결정한다.만약 클러스터에 스케줄러가 아예 없거나 비활성화 되어있는 경우, 파드는 Pending 상태로 멈춰있게된다.Kubernetes 스케줄러의 내부 동작 방식 1. 파드가 생성된다. (처음 생성된 파드는 spec.nodeName이 비어있음)2. kube-scheduler는 nodeName이 없는 파드를 감지3. 스케줄링 알고리즘을 통해 적절한 노드를 선택4. spec.nodeName에 선택된 노드의 이름을 설정5. 내부적으로 Binding 객체를 생성하여 할당한다. 수동 스케줄링 방법nodeName 필드를 직..