전체 글

전체 글

    왜 Docker Driver + Minikube에선 안되는 게 많을까

    📍 Epilogue CSP의 K8s 서비스를 사용하기 전에 Minikube를 사용하여 프로젝트를 진행하였다. 노드에 올려놓은 파드에 대해서 여러 가지 타입으로 서비스를 배포하고자 하였다. 그런데 NodePort, LoadBalancer 타입은 Minikube에서 Docker Driver 특성상 완벽하게 동작하지 않는 것이었다. NodePort → Container IP로 접속 불가능 LoadBalancer → External IP 제공 불가능 MetalLB addon으로 External IP 제공 가능하지만 접속 불가능 minikube service 명령어로 tunneling을 이용해서 접속 가능 그래서 여기서 의문점 ❗️ Docker Driver의 특성이 뭐길래? 일단 소프트웨어 드라이버에 대하여 알아..

    컨테이너에서 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 클래..

    K8S Service Network - 실습

    ▪ 실습 ClusterIP NodePort • ClusterIP 3pod.yaml (목적지 파드) apiVersion: v1 kind: Pod metadata: name: webpod1 labels: app: webpod spec: nodeName: w1-k8s containers: - name: container image: traefik/whoami terminationGracePeriodSeconds: 0 --- apiVersion: v1 kind: Pod metadata: name: webpod2 labels: app: webpod spec: nodeName: w2-k8s containers: - name: container image: traefik/whoami terminationGracePe..

    K8S Service Network

    ▪︎ Service(서비스)란? 파드 집합에서 실행중인 애플리케이션을 네트워크 서비스로 노출하는 추상화 방법 ▪ ServiceTypes(서비스 퍼블리싱) ClusterIP : 서비스를 클러스터-내부 IP에 노출시킨다. (ServiceTypes → default value) NodePort : 고정 포트(NodePort)로 각 노드의 IP에 서비스를 노출시킨다. LoadBalancer : 클라우드 공급자의 로드 밸런서를 사용하여 서비스를 외부에 노출시킨다. ExternalName : 해당 DNS Name에 대한 CNAME 레코드 반환 ▪ ClusterIP 클러스터 내부의 파드가 클러스터 내부의 다른 파드에 통신할 수 있는 서비스 제공 외부에서의 접근 불가능 모든 노드에 iptables rule 설정 파드에..

    안녕하세요

    2021.08.18 공부 기록하는 블로그 시작합니다. - A1409 연구실에서.. -