kubernetes

    NKS 클러스터 구축을 위한 준비

    🐤 NCP : Naver Cloud Platform NKS : Naver Kubernetes Service ▪︎ NKS 클러스터 구축을 위한 필요한 것 및 준비 Subnet 대역 설정 주의사항 Docker Bridge 대역의 충돌을 방지하기 위해 172.17.0.0/16 범위 내의 Private Subnet, 로드 밸런서 전용 Subnet 사용 불가 VPC Kubernetes 클러스터를 생성하기 위한 가상 클라우드 공간 Private Subnet 가상 클라우드 공간 내의 Private 서브넷 Private 대역(10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16) 내에서 /17~/26 범위에 해당되는 서브넷만 사용 가능 Load Balancer Subnet 클러스터와 연동할 Loa..

    [Minikube] LoadBalancer Type 서비스 생성

    ⚠️ Local Minikube 환경에서 진행하였습니다. ⚠️ ▪︎ LoadBalancer cn-app-svc-l.yaml apiVersion: v1 kind: Service metadata: name: cn-app-svc-l spec: selector: name: cn-app ports: - port: 9002 targetPort: 8080 type: LoadBalancer 1️⃣ 매니페스트 파일로 서비스 배포하는 방법 kubectl apply -f cn-app-svc-l.yaml 2️⃣ 명령어로 서비스 배포하는 방법 kubectl expose deployment cn-app-dpy --type=LoadBalancer --name cn-app-svc-l 서비스 배포 후 확인해 보니 EXTERNAL-IP..

    [Minikube] NodePort Type 서비스 생성

    ⚠️ Local Minikube 환경에서 진행하였습니다. ⚠️ ▪︎ NodePort apiVersion: v1 kind: Service metadata: name: cn-app-svc-n spec: selector: app: cn-app ports: - port: 9001 targetPort: 8080 # 기본적으로 그리고 편의상 `targetPort` 는 `port` 필드와 동일한 값으로 설정 type: NodePort 1️⃣ 매니페스트 파일로 서비스 배포하는 방법 kubectl apply -f cn-app-svc-n.yaml 2️⃣ 명령어로 서비스 배포하는 방법 kubectl expose deployment cn-app-dpy --type=NodePort --name cn-app-svc-n NodeP..

    [Minikube] ClusterIP Type 서비스 생성

    ⚠️ Local Minikube 환경에서 진행하였습니다. ⚠️ ▪︎ ClusterIP apiVersion: v1 kind: Service metadata: name: cn-app-svc-c spec: selector: app: cn-app ports: - port: 9000 targetPort: 80 1️⃣ 매니페스트 파일로 서비스 배포하는 방법 kubectl apply -f cn-app-svc-c.yaml 2️⃣ 명령어로 서비스 배포하는 방법 kubectl expose deployment cn-app-dpy --type=ClusterIP --name cn-app-svc-c 대신 파드 생성 선언 시 or 명령어 뒤에 포트 설정(--port=**)을 해줘야 함 ClusterIP 타입으로 서비스를 배포한다...

    [Minikube] ReplicaSet 생성

    ⚠️ Local Minikube 환경에서 진행하였습니다. ⚠️ ▪︎ Replicaset으로 생성 apiVersion: apps/v1 kind: ReplicaSet metadata: name: cn-app-rs spec: replicas: 3 selector: matchLabels: app: cn-app template: metadata: labels: app: cn-app spec: containers: - name: cn-app image: uh2959/cn-action resources: limits: memory: "256Mi" cpu: "500m" ReplicaSet 생성 시에는 resources의 request 선언 에러가 뜸.. 정상적으로 생성 및 확인 인줄 알았으나.. 또 OOMKilled...

    YAML 문법 알아보기

    ▪ YAML이란? 💡 YAML ⇒ YAML ain’t markup language / yet another markup language 데이터 표현 양식의 한 종류 사람이 읽을 수 있고 이해하기 쉬운 프로그래밍 언어 JSON의 상위 집합으로 YAML에서 JSON 사용 가능 .yml / .yaml 확장자 사용 Map(key - value), List 구조 들여 쓰기로 계층 구조 표현 ▪ 들여쓰기 (Indent) 2칸(추천), 4칸 들여 쓰기를 지원한다. 2칸 들여쓰기 apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deployment labels: app: nginx 4칸 들여쓰기 apiVersion: apps/v1 kind: Deployment m..

    컨테이너에서 JVM은 왜 메모리 먹는 하마였을까?

    📍 Epilogue 간단한 JAR 애플리케이션을 가지고 쿠버네티스 파드 배포를 시도하였다 ! 그런데 컨테이너 상태가.. 엄청난 메모리 부족.. OOM Killed.. CrashLoopBackOff 상태 반복.. 파드 스펙 늘리고 다시 배포하니 정상 상태 ! 그래서 여기서 의문점 ❗️ JVM은 원래 메모리를 많이 잡아 먹는가? → 구조 때문? → 한 번 파헤쳐보자! ▪︎ JVM이란 ? 💡 JVM : 자바 가상 머신 (Java Virtual Machine) OS에 상관없이 자바 바이트 코드를 실행 시킬 수 있는 자바 가상 머신 자바 코드를 컴파일해서 얻은 바이트 코드를 OS가 이해할 수 있는 기계어로 바꿔 실행 ▪︎ 컴파일 과정 💡 .java → 소스 코드 (Source Code) .class → 바이트 코..

    리소스의 메모리와 CPU 자원 관리

    📍 Epilogue NCP의 NKS에서 프로젝트를 진행 중에 각자 팀원들에게 namespace를 할당해주었다. 어느 날 간단한 파드에 대한 스펙을 정해주고 생성을 시도하였더니 스케줄링 에러가 발생 원인을 확인해 보니 팀원 한 분께서 생성하신 파드에 어마 무시하게 자원을 할당해 놓으신 것.. 결국 노드에 남아있는 자원이 없어서 파드 배포 스케줄링 에러가 발생한 것이었다. 그래서 여기서 의문점 ❗️ 사용자 개인이 할당 가능한 자원에 제한을 걸어둘 수 있을까? → 개인 별로 리소스 관리가 가능한 네임스페이스에? ▪︎ Plan namespace에 대하여 자원 관리를 수행해보자 💡 Limit Range : 네임스페이스 내에 파드나 컨테이너당 리소스 소비를 한정하는 제약 조건을 제공 ▪︎ Namespace에 대한 ..

    Pod의 우선 순위

    ▪︎ Priority Class 파드 배포시 보류 상태가 되어지는 여러가지 요인들이 존재한다. Node에 충분한 리소스가 존재하지 않는 경우 배포하고자 하는 파드의 port를 실행 중인 어떤 파드가 사용 중인 경우 이러한 경우에도 중요한 파드는 배포되어져야만 하는 상황이 발생한다. 파드는 우선 순위를 통해 스케줄러가 스케줄링 할 수 있다. 🚨 리소스를 매우 많이 사용하는 파드를 악의적으로 생성하여 높은 우선 순위 설정을 통해 기존 파드의 동작을 모두 멈춰버리는 공격이 가능하다. 따라서 관리자는 ResourceQuota나 RangeLimit의 조합을 통해 사전에 위와 같은 공격을 방지해야 한다. 아래와 같은 매니페스트를 통해 high, medium, low의 PriorityClass를 생성하였다. apiV..

    Pod 안전하게 생성/배포 및 QoS 정책 설정

    📍 Epilogue 간단한 JAR 애플리케이션을 가지고 쿠버네티스 파드 배포를 시도하였다 ! 그런데 파드 상태가.. 엄청난 메모리 부족.. OOM Killed.. CrashLoopBackOff 상태 반복.. 파드 스펙 늘리고 다시 배포하니 정상 상태 ! 그래서 여기서 의문점 ❗️ 컨테이너 자원 스펙을 정할 때 어떤 기준/전략 또는 옵션이 있을까? 또는 Stable한 배포 전략이 있을까? ▪︎ Plan 파드에 적절한 자원 할당을 통해 안정된 서비스 품질(QoS) 구성하기 Probe 기능을 통해 안정적인 Pod Life-Cycle 보장하기 ▪︎ 서비스 품질 (QoS) 파드에 특정한 서비스 품질(QoS) 클래스를 할당해 줄 수 있다. Guaranteed Burstable BestEffort 파드의 QoS 클래..