본문 바로가기

쿠버네티스

[K8S] Affinity & antiAffinity Node Affinity는 Kubernetes에서 Pod의 스케줄링 제약 조건을 정의하는 메커니즘 특정 조건을 가진 노드에만 Pod가 스케줄링되도록 설정한다. 노드의 특정 집합에만 pod를 스케줄하도록 지시.nodeSelector: selector filed에 명시된 모든 LABEL이 포함되어야 배치됨nodeAffinity: 특정 노드에만 Pod가 실행되도록 유도 spec.affinity.nodeAffinity 필드에서 설정된다.요구조건: 조건이 맞는 파드에 가중치를 줘서 가중치가 가장 높은 파드에 배치필수 조건: requiredDuringSchedulingIgnoredDuringExecution 조건이 만족되지 않으면 Pod는 해당 노드에 스케줄링되지 않음 노드 조건이 나중에 바뀌더라도 Pod는 계속 .. 더보기
[K8S] Secret ✔️ ConfigMap: 컨테이너 구성 정보를 한 곳에 모아서 관리 ✔️ Secret: 컨테이너가 사용하는 민감한 데이터(ex: password, auth token, ssh key)와 같은 중요한 정보를 안전하게 저장하기 위한 리소스. 애플리케이션 코드와 민감한 데이터를 분리하고, base64로 인코딩하여 보안을 강화할 수 있다. Secrets의 주요 특징보안 데이터 저장: 비밀번호, API 토큰, SSH 키와 같은 민감한 데이터를 저장하고 관리즉, 민감하지 않은 일반 설정파일은 configMap을 사용하고, 민감한 데이터는 secret을 사용한다. 민감한 데이터를 저장할 때 Encryption at Rest를 활성화 권장 Base64 인코딩: 데이터는 Base64로 인코딩되어 저장된다. ( base6.. 더보기
[K8S] 쿠버네티스 레이블 https://kubernetes.io/ko/docs/concepts/overview/working-with-objects/labels/ 레이블과 셀렉터 레이블 은 파드와 같은 오브젝트에 첨부된 키와 값의 쌍이다. 레이블은 오브젝트의 특성을 식별하는 데 사용되어 사용자에게 중요하지만, 코어 시스템에 직접적인 의미는 없다. 레이블로 오브 kubernetes.io Label Node를 포함하여 Pod, deployment 등 모든 리소스에 할당 리소스의 특성을 분류하고, Selector를 이용해서 선택 오브젝트에 첨부된 key-value 한 쌍으로 적용 오브젝트의 특성을 식별하는 데 사용 레이블로 오브젝트의 하위 집합을 선택하고, 구성하는데 사용 레이블은 오브젝트를 생성할 때에 붙이거나 생성 이후에 붙이거나.. 더보기
[K8S] Pod 환경 변수 설정 환경 변수 Pod 내의 컨테이너가 실행될 때 필요로 하는 변수 컨테이너 제작 시 미리 정의 NGINX Dockerfile 예 ENV NGINX_VERSION 1.19.2 ENV NJS_VERSION 0.4.3 Pod 실행 시 미리 정의된 컨테이너 환경변수를 변경할 수 있다. # kubeconfig 환경 변수 kubectl은 기본적으로 $HOME/.kube/config 파일에서 클러스터, 인증, 컨텍스트 정보로 읽어 들인다. ✔️ 이러한 클러스터 구성 정보 => kubeconfig root@master:~# kubectl api-resources NAME SHORTNAMES APIVERSION NAMESPACED KIND bindings v1 true Binding componentstatuses cs v.. 더보기
[K8S] Pod Resource 할당 Default로는 container는 리소스 할당에 대한 제한이 없다.No limit, No request : 하나의 파드가 모든 리소스를 사용할 수 있고, 2번째 Pod가 필요한 리소스를 할당받는데 방해한다.Resource Request 어느 노드가 실행해주면 좋을 지를 scheduler가 판단한다. 컨테이너가 실행되기 위해 최소한으로 필요한 메모리의 양을 정의한다.Kubernetes 스케줄러는 이 값을 기반으로 Pod을 스케줄링할 노드를 결정한다.Request는 보장된 자원으로, 다른 컨테이너가 이 메모리를 빼앗아 사용할 수 없다. Pod가 실행되려면 노드에 Request 값 이상의 사용 가능한 메모리가 있어야 한다.노드가 과부하 상태가 되면, Request가 낮은 Pod가 우선적으로 제거될 수 있음.. 더보기
[K8S] pause container / Static container # Pause container Infra(pause) container : In a Kubernetes Pod, an infrastructure or “pause” container is first created to host the container. pod에 대한 infra(IP, hostname 등,.)을 관리 및 생성해주는 컨테이너 infra를 만들어주지만, 어떤 작업을 수행하지는 않는다. # Static container 기존의 Pod 생성은 'kubectl run ~'을 API server에 전달하면, etcd 정보를 가져다가 scheduler에게 보내주고 가장 적절한 노드를 선택해서 API에게 응답하면, API가 해당 Pod를 실행해주는 구조였다. Static Pod는 API에게 요청을 보.. 더보기
[K8S] init container https://kubernetes.io/ko/docs/concepts/workloads/pods/init-containers/ 초기화 컨테이너이 페이지는 초기화 컨테이너에 대한 개요를 제공한다. 초기화 컨테이너는 파드의 앱 컨테이너들이 실행되기 전에 실행되는 특수한 컨테이너이다. 초기화 컨테이너는 앱 이미지에는 없는 유틸kubernetes.io앱(main) 컨테이너 실행 전에 미리 동작시킬 컨테이너컨테이너에서 완료까지 실행되는 프로세스를 실행하기를 원할 때.main Container가 실행되기 전에 사전 작업이 필요한 경우 사용Pod가 처음 생성될 때 한 번만 실행된다. (실제 application이 시작되기 전에 외부 서비스나 데이터베이스가 작동하기를 기다리는 프로세스)초기화 컨테이너는 앱 이미지에는 .. 더보기
[K8S] Liveness Probe (Self-healing) Pod Self-healingRestarts containers that fail, replaces and reschedules containers when nodes die, kills containers that don't respond to your user-defined health check, and doesn't advertise them to clients until they are ready to serve. # kubelet 으로 컨테이너 진단하기# Liveness Probe ✔ Pod가 계속 실행할 수 있음을 보장 (=self healing)✔ Pod의 spec에 정의 # LivenessProbe 매커니즘httpGet probe : 지정한 IP주소, port, path에 HTTP GET 요청을.. 더보기