본문 바로가기

About/Kubernetes

(37)
[k8s] Kubernetes 명령어 비교: kubectl apply vs kubectl create Kubernetes에서 자원을 관리하고 배포하는 데는 다양한 명령어가 사용됩니다. 이 글에서는 Kubernetes의 핵심 명령어인 kubectl apply와 kubectl create의 차이점을 살펴보고, 언제 어느 명령어를 사용해야 하는지를 알아보겠습니다. kubectl apply의 특징 및 사용법 kubectl apply 명령어는 Kubernetes 리소스의 구성을 선언적으로 관리하는 데 사용됩니다. 이 명령어는 리소스의 현재 상태를 JSON 또는 YAML 파일 형식으로 지정된 원하는 상태와 비교하여, 필요한 변경사항을 적용합니다. 주요 특징 변경사항만 적용: 기존 리소스의 설정을 수정하거나 추가할 때 유용합니다. 선언적 업데이트: 리소스의 전체 정의를 제공하고 Kubernetes가 필요한 변경을 파..
[k8s] 쿠버네티스 파드 CPU 및 메모리 체크 방법 쿠버네티스 파드 CPU 및 메모리 체크 방법 소개 쿠버네티스(Kubernetes)는 대규모 컨테이너 관리 플랫폼으로, 파드(Pod)는 쿠버네티스에서 가장 작은 배포 단위입니다. 파드는 하나 이상의 컨테이너를 포함하고, 동일한 호스트에서 실행될 수 있습니다. 이 때문에 파드의 CPU 및 메모리 상태를 모니터링하는 것은 매우 중요합니다. 이번에는 파드의 CPU 및 메모리 상태를 체크하는 방법에 대해서 알아보겠습니다. 방법 1. kubectl top 명령어 kubectl top 명령어를 사용하면 쿠버네티스 클러스터에서 실행 중인 파드의 CPU 및 메모리 사용량을 쉽게 확인할 수 있습니다. # 파드의 CPU 및 메모리 사용량 확인 kubectl top pod # 파드가 실행되는 노드의 CPU 및 메모리 사용량 ..
[k8s][Error] Arm-AMD CPU 사이 문제 해결 - 파드 생성 시 CrashLoopBackOff, exec user process caused: exec format error 문제 에러 상황 Docker를 이용해서 개발한 서비스를 컨테이너로 빌드하였고, 레포지토리에도 push하였습니다. 이 이미지를 이용해서 쿠버네티스로 Deployment를 배포하였고 계속해서 CrashLoopBackOff -> Error -> CrashLoopBackOff 가 반복되는 상황 파드의 로그를 확인해보면 다음과 같습니다. standard_init_linux.go:228: exec user process caused: exec format error exec format error? 보통은 Dockerfile의 ENTRYPOINT, CMD 가 잘못 선언되었거나, 실행할 스크립트의 권한이 없는 등 도커 이미지를 컨테이너로 실행할 때 잘못 설정해서 생기는 문제라고 합니다. 하지만 local에서 해당 이미지를..
[k8s][따배쿠] 쿠버네티스 아키텍처 - yaml 템플릿과 API Version https://www.youtube.com/watch?v=9kk_C4nUmWc&list=PLApuRlvrZKohaBHvXAOhUD-RxD0uQ3z0c&index=9 본 포스팅은 따배쿠(따라하면서 배우는 쿠버네티스) 4-2. 쿠버네티스 아키텍처 - yaml 템플릿과 API 편을 보고 정리한 내용입니다. YAML 템플릿 YAML 템플릿이란 https://ko.wikipedia.org/wiki/YAML YAML - 위키백과, 우리 모두의 백과사전 YAML은 XML, C, 파이썬, 펄, RFC2822에서 정의된 e-mail 양식에서 개념을 얻어 만들어진 '사람이 쉽게 읽을 수 있는' 데이터 직렬화 양식이다. 2001년에 클라크 에반스가 고안했고, Ingy dot Net 및 Oren Ben-Kiki ko.wiki..
[k8s][따배쿠] 쿠버네티스 아키텍처 - namespace https://www.youtube.com/watch?v=pfkx8KDAZyk&list=PLApuRlvrZKohaBHvXAOhUD-RxD0uQ3z0c&index=8 본 포스팅은 따배쿠(따라하면서 배우는 쿠버네티스) 4-2. 쿠버네티스 아키텍처 - namespace 편을 보고 정리한 내용입니다. 쿠버네티스 namespace 쿠버네티스에서 namespace란 - 클러스터 하나를 여러 개의 논리 적인 단위로 사용할 수 있게 해주는 k8s API - 쿠버네티스 클러스터 하나를 여러 팀이나 사용자가 공유하게 됩니다. - 용도에 따라 실행해야 하는 앱을 구분할 때 사용할 수 있습니다. 위의 그림 처럼 클러스터가 하나여도 그 안에서 논리적으로 구분하고자 할 때 namspace를 사용합니다. 위의 예시에서는 실행할 애..
[k8s][따배쿠] 쿠버네티스 아키텍처 - Kubernetes 동작 원리 https://www.youtube.com/watch?v=Iue9TC13vPQ&list=PLApuRlvrZKohaBHvXAOhUD-RxD0uQ3z0c&index=7 본 포스팅은 따배쿠(따라하면서 배우는 쿠버네티스) 4-1. 쿠버네티스 아키텍처 - Kubernetes 동작 원리 편을 보고 정리한 내용입니다. 쿠버네티스에서 컨테이너 동작 Flow 쿠버네티스에서 서비스를 운영하기 위한 전체 동작 Flow는 다음과 같습니다. 하나하나씩 살펴보도록 하겠습니다. 1. Docker push hub.example.com/nginx 개발자 혹은 운영자는 컨테이너를 쿠버네티스 플랫폼에 올려 사용하는 것이 목적입니다. 이 경우 우선 Docker를 이용하여 컨테이너를 빌드(생성)합니다. 컨테이너는 main UI를 만드는 컨테..
[k8s] 파드를 수평으로 Scale Out 하기(HorizontalPodAutoscaler, HPA) HorizontalPodAutoscaler(HPA) 쿠버네티스에서는 CPU 사용량 이나 기타 메트릭을 체크하여 파드의 개수를 스케일하는 기능을 가지고 있습니다. Horizontal Pod Autoscaler로 지정한 메트릭을 컨트롤러가 체크하여 부하에 따라 필요한 파드의 레플리카수가 되도록 자동으로 파드를 늘리거나 줄입니다. Horizontal Pod Autoscaler는 쿠버네티스 API 리소스 및 컨트롤러로 구현됩니다. 리소스는 컨트롤러의 동작을 결정한다. 컨트롤러는 평균 CPU 사용률, 평균 메모리 사용률 또는 다른 커스텀 메트릭과 같은 관찰 대상 메트릭이 사용자가 지정한 목표값과 일치하도록 레플리케이션 컨트롤러 또는 디플로이먼트에서 레플리카 개수를 주기적으로 조정합니다. HPA(Horizontal..
[k8s] 쿠버네티스의 Autoscaler (HPA, VPA, CA 개념) HPA(Horizontal Pod Autoscaler) Horizontal Pod Autoscaler는 파드의 리소스를 감시하여, 리소스가 부족한 경우 Controller의 replicas를 증가시켜, 파드의 수를 늘리도록 합니다. 위의 그림 처럼 Pod가 수평적으로 증가하는 것을 Scale Out, 수평적으로 감소하는 것을 Scale In 이라고 합니다. 파드가 증가하였기 때문에 기존의 트래픽이 분산되어 서비스를 더 안정적으로 유지할 수 있게 합니다. HPA는 다음과 같은 경우에 사용이 권장됩니다. - 기동이 빠르게 되는 App 파드의 장애가 났을 때 대응하기 위한 용도로 사용되기 때문에 파드의 생성이 빠르게 되어야 합니다. 따라서 기동이 빠르게 되는 애플리케이션에 더 적합합니다. - Stateless..
[k8s] 인그레스(Ingress) 인그레스(Ingress) 인그레스(Ingress)는 주로 클러스터 외부에서 안에 있는 파드에 접근할 때 사용하는 방법입니다. 서비스와의 차이점은 주로 L7 영역의 통신을 담당해서 처리한다는 것입니다. 인그레스는 클러스터 외부에서 안으로 접근하는 요청들을 어떻게 처리할지 정의해둔 규칙에 대한 모음입니다. 클러스터 외부에서 접근해야 할 URL을 사용할 수 있도록 하고, 트래픽 로드밸런싱, SSL 인증서 처리, 도메인 기반 가상 호스팅도 제공합니다. 인그레스 자체는 이런 규칙들을 정의해둔 자원이고, 실제로 동작시키는 것은 인그레스 컨트롤러(Ingress Controller)입니다. 클라우드 서비스(AWS EKS 등..)를 사용하면 별다른 설정없이 자체 로드밸런서 서비스와 연동해서 인그레스를 사용할 수 있습니다..
[k8s] StatefulSet(스테이트풀셋) Stateless Application vs Stateful Application Stateless Application 클라이언트와 서버 관계에서, 서버가 클라이언트의 상태를 보존하지 않는 형태의 서비스입니다. 말 그대로 상태가 없는 애플리케이션으로 대표적으로 Apache, Nginx와 같은 Web server가 있습니다. Stateless 애플리케이션은 쿠버네티스에서 삭제/생성 시 같은 역할을 하는 애플리케이션을 생성하면됩니다. 이 때 앱의 이름은 중요하지 않습니다. Stateless 애플리케이션은 Volume이 반드시 필요하진 않지만 하나의 볼륨에 모든 애플리케이션이 연결되어 사용할 수 있습니다. 쿠버네티스에서는 Replication Controller, Replicaset, Deployment와 ..