DevOps/Kubernetes

    permission denied, mkdir in container on openshift

    permission denied, mkdir in container on openshift

    문제 상황 로컬에서는 문제없이 작동하는 Container가 Redhat OpenShift에 올리니까 Permission Deny 에러가 발생했다. Error: EACCES: permission denied, mkdir '/home/node/app/.pm2' 사용한 Dockerfile은 아래와 같다. FROM node:16.14-alpine WORKDIR /home/node COPY . . RUN npm install USER 1000 EXPOSE 8080 CMD node server.js 에러 원인 By default, OpenShift Container Platform runs containers using an arbitrarily assigned user ID. This provides additi..

    Kubernetes Pod Security Admission - Namespace Level

    Kubernetes Pod Security Admission - Namespace Level

    개요 일반 Kubernetes Cluster를 사용할 때는 PSP, PSA를 고려하지 않았지만.. Redhat OpenShift를 사용하면서 Namespace를 생성하면 자동으로 PSA가 붙어서 Pod에 대한 보안이 적용되고 동작이 제한되었다. OCP를 잘 사용하기 위해 PSA에 대한 개념을 정리한다. Pod Security Policy가 kubernetes v1.21부터 Deprecated 되면서, 이보다 더욱 향상된 기능으로 Pod Security Admission을 제공한다. Pod Security Admission Controller는 Pod Security Standards를 사용하며, 이는 정확하게 사전 정의된 세 가지 Pod Security Policies(Privileged, Baselin..

    AWS EKS Node 인스턴스 타입의 최대 Pod 개수 (Too many pods 해결 방법)

    AWS EKS Node 인스턴스 타입의 최대 Pod 개수 (Too many pods 해결 방법)

    개요 AWS EKS는 AWS VPC CNI 플러그인을 통해 ENI를 EC2 노드에 연결한다. 이 추가 기능은 프라이빗 IP를 VPC에서 각 Pod 및 서비스에 할당한다. EC2 Node의 인스턴스 타입에 따라서 ENI 개수와 각 ENI당 붙을 수 있는 보조 프라이빗 IP의 개수가 다르다. 즉, 노드의 인스턴스 타입에 따라서 할당 가능한 Pod의 개수가 다르다. 참고: https://docs.aws.amazon.com/ko_kr/eks/latest/userguide/managing-vpc-cni.html 노드 유형 확인 및 Pod 개수 제한 확인 명령어 kubectl get nodes -o jsonpath="{range .items[*]}{.metadata.labels['beta\.kubernetes\.i..

    Kubernetes Deprecated API Version Check 방법 (클러스터 버전 업그레이드 사전 작업)

    Kubernetes Deprecated API Version Check 방법 (클러스터 버전 업그레이드 사전 작업)

    개요Kubernetes Version을 업그레이드하기 전에 현재 사용 중인 API Version이 Deprecated 되지 않는지 확인해야 한다.Deprecated 된다면 클러스터를 업그레이드 하기 전에 해당 워크로드를 업그레이드해야 한다.  1.  공식 문서 확인Deprecation Guide 확인https://kubernetes.io/docs/reference/using-api/deprecation-guide/ Deprecated API Migration GuideAs the Kubernetes API evolves, APIs are periodically reorganized or upgraded. When APIs evolve, the old API is deprecated ..

    Kubernetes QoS(Qualitu Of Service)와 Pod Eviction의 상관 관계

    Kubernetes QoS(Qualitu Of Service)와 Pod Eviction의 상관 관계

    QoS(Qualitu Of Service) 클래스 타입 Kubernetes는 노드에 리소스가 부족할 때 Pod의 우선순위에 따라서 Pod를 Eviction 한다. 이때 Pod의 우선순위는 QoS 클래스 타입에 따라 정해진다. QoS 클래스 타입에는 아래 3가지가 있다. Guaranteed: Resources 항목에서 Request와 Limit의 값이 완전히 동일한 경우 Burstable: Guaranteed, BestEffort에 속하지 않는 모든 경우 ( e.g. Resources 항목에서 Limit이 Request보다 클 경우) BestEffort: Resources 항목을 아예 사용하지 않을 경우 노드에 리소스가 부족해지면 우선순위가 가장 낮은 Pod나 프로세스가 먼저 종료된다. 우선순위는 Guar..

    [K8S] 쿠버네티스를 사용해야하는 이유

    [K8S] 쿠버네티스를 사용해야하는 이유

    Kubernetes 개념 Kubernetes는 컨테이너 오케스트레이션 플랫폼으로, 컨테이너화된 애플리케이션을 배포, 확장 및 관리하는 데 사용됩니다. Kubernetes는 Google에서 개발되었으며, 현재는 Cloud Native Computing Foundation(CNCF)에서 관리하고 있습니다. Kubernetes는 애플리케이션을 여러 개의 컨테이너로 분할하고, 이를 여러 대의 호스트에 배치하며, 컨테이너들이 서로 통신할 수 있도록 네트워크 구성을 자동으로 수행합니다. 또한, 컨테이너의 스케일링, 롤링 업데이트, 로드 밸런싱, 자가 치유 등의 기능을 제공하여, 애플리케이션 운영 및 관리를 보다 쉽게 할 수 있도록 돕습니다. Kubernetes는 클라우드 서비스 제공자들의 지원을 받아서, 대부분의 ..

    [EKS] Karpenter + KEDA를 사용해서 특정 시간에 Auto Scaling 하는 방법

    [EKS] Karpenter + KEDA를 사용해서 특정 시간에 Auto Scaling 하는 방법

    개요 Karpenter + KEDA를 사용해서 이벤트 시간 전에 Node Scale Out 하고 일정 시간 지난 후 Scale In 되도록 테스트를 해보겠습니다. Karpenter가 Node를 프로비저닝 할 때 1~2분 정도 시간이 걸립니다. 이벤트 시간 전에 특정 개수의 노드 여유분을 확정적으로 늘려놓고 싶을 때 사용합니다. 아래 영상을 보고 내용을 정리했습니다. https://www.youtube.com/watch?v=FPlCVVrCD64 Karpenter 사용 팁 Karpenter는 CA와 마찬가지로 Pod Request를 기준으로 노드를 증설하기 때문에 사용량 최대치를 Request로 잡거나 Limit과 차이를 적게 하는 것을 추천한다. 노드 타입을 작은 것으로 정의하는 것이 항상 유리한 것은 아..

    [EKS] Karpenter - Groupless Node AutoScaling 사용법

    [EKS] Karpenter - Groupless Node AutoScaling 사용법

    K8S Auto Scaling Pod 기반 Kubernetes Event-driven Autoscaling - 이벤트 기반 파드 오토스케일링을 지원합니다. Horizontal Pod Autoscaler - 필요에 따라 배포에 더 많은 파드를 추가하거나 제거합니다. Vertical Pod Autoscaler - 파드의 CPU 및 메모리 요청 크기를 조정하고 부하에 맞게 제한합니다. Node 기반 Karpenter (현재는 AWS EKS만 가능) Cluster Autoscaler Karpenter 개요 Karpenter는 AWS로 구축된 유연한 오픈 소스의 고성능 Kubernetes 클러스터 오토스케일러입니다. 애플리케이션 로드의 변화에 대응하여 적절한 크기의 컴퓨팅 리소스를 신속하게 실행함으로써 애플리케이..

    K8S에서 Kong API Gateway 사용하기

    K8S에서 Kong API Gateway 사용하기

    개요 Kong Ingress Controller는 k8s 리소스를 kong 리소스로 변환시키는 역할을 합니다. 아래 그림처럼 K8S Ingress는 Kong Route로 매핑이 되는데, 이를 이용하여 Express 어플리케이션을 Kong API Gateway을 사용해서 외부로 노출 시키겠습니다. 참고: https://docs.konghq.com/kubernetes-ingress-controller/latest/concepts/design/#translation pod, service 확인 Express 어플리케이션의 pod, service를 올렸습니다. port-forward 어플리케이션 화면을 확인하기 위해 포트 포워딩을 하겠습니다. $ kubectl port-forward svc/web 3000:30..

    K8S에 Kong API Gateway 설치 하는 방법 (Helm Charts)

    K8S에 Kong API Gateway 설치 하는 방법 (Helm Charts)

    helm charts (v2.8.2) https://github.com/Kong/charts values.yaml 커스터마이징 - 원본 values로 설치하면 에러가 많이 나서 커스터마이징을 했습니다. - Postgres subcharts 설치 --- deployment: kong: enabled: true serviceAccount: create: true env: nginx_worker_processes: "2" anonymous_reports: "off" database: "postgres" admin: enabled: true type: NodePort annotations: {} http: enabled: true tls: enabled: true parameters: [] proxy: enab..