라벨이 쿠버네티스인 게시물 표시

[블로그] CrashLoopBackOff 원인 4가지 구분법

  kubectl get pods 를 실행하니 STATUS 칸에 CrashLoopBackOff 가 떠 있습니다. 파드는 떴다가 죽고, 또 떴다가 죽기를 반복합니다. 이럴 때 다음에 무엇을 확인해야 할지 몰라 검색하다 이 글에 도착한 분도 많을 것입니다. 결론부터 말하면, 빠르게 해결하는 길은 명령어를 더 많이 외우는 것이 아니라 원인을 먼저 구분하는 데 있습니다. CrashLoopBackOff는 원인마다 남기는 단서가 다르기 때문입니다. 자세한 내용은 링크 를 통해 확인하여 주세요!

컨테이너화된 자바 애플리케이션 배포하기 - 1편 : Spring Boot 애플리케이션 만들기

이미지
Spring Boot 프로젝트 생성 우선 웹 브라우저를 통해 Spring Initializr 페이지(https://start.spring.io/)로 이동한 후, 다음 단계를 진행합니다. Project Spring Boot : 2.7.14 (버전은 나중에 추후 최신 버전이 나올 수 있으므로 참고용으로만 기재합니다.) Language : Java Group : com.example Artifact : deploy-sample Dependencies Spring Web 프로젝트 설정을 완료했으면 [Generate] 버튼을 클릭합니다. 그러면 다운로드 가능한 프로젝트 아카이브(zip 파일)이 생성됩니다. 컨트롤러 생성 이제 프로젝트를 열어서 Spring Boot 컨트롤러를 생성하겠습니다. deploy-sample/src/main/java/com/example/deploysample/HelloController.java 경로에 새로운 Java 클래스인 HelloController 파일을 생성합니다. 이 클래스에 다음과 같이 코드를 작성합니다. package com.example.deploysample; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; @RestController public class HelloController { @GetMapping("/hello") public String hello() { return "Hello World!"; } } 애플리케이션 빌드 ./gradlew build Gradle을 사용하여 프로젝트를 빌드합니다. build는 프로젝트를 빌드하라는 의미입니다. 그래서 이 명령을 실행하면 프로젝트의 소스 코드를 컴파일하고 빌드하여 jar 파일을 생성합니다.  java -jar build/libs/depl...

YAML 파일을 이용한 쿠버네티스 Pod 생성 방법

이미지
이번에는 Kubernetes의 리소스를 정의하는 YAML 형식의 파일 및 kubectl apply 명령어를 사용하여 Pod 생성 실습을 진행하겠습니다. Pod 생성 YAML 확인 및 생성 리소스의 API 버전을 지정합니다. 이 예제에서는 v1 버전의 API를 사용합니다. apiVersion: v1 생성하려는 리소스의 종류를 지정합니다. 이 경우에는 Pod를 생성하므로 "Pod"로 지정합니다. kind: Pod Pod의 메타데이터를 정의합니다. "name" 필드에는 Pod의 이름을 지정합니다. 이 예제에서는 "nginx-pod"라는 이름을 사용합니다. metadata: name: nginx-pod Pod의 스펙을 정의합니다. "containers" 필드 아래에 컨테이너의 정보를 정의합니다. "name" 필드에는 컨테이너의 이름을 지정합니다. 이 예제에서는 "nginx"라는 이름을 사용합니다. "image" 필드에는 컨테이너가 사용할 이미지를 지정합니다. 이 예제에서는 "nginx:latest" 이미지를 사용합니다. spec: containers: - name: nginx image: nginx:latest 이렇게 정의된 YAML 파일은 kubectl apply 명령어를 사용하여 Kubernetes 클러스터에 해당 리소스를 생성하게 됩니다.  그러면 이제 실제로 Pod를 만들어 보겠습니다. 아래의 명령어를 터미널에 입력합니다. kubectl apply -f - <<EOF apiVersion: v1 kind: Pod metadata: name: nginx-pod spec: containers: - name: nginx image: nginx:latest EOF 위 명령어는 YAML 내용을 Pod 생성 명령어로 직접 입력하는 방법입니다. 여기서 ...

와탭 쿠버네티스 모니터링 3개월 무료체험 프로모션

이미지
지금 가입하면 와탭 쿠버네티스 모니터링 3개월을 무료로 시작하실 수 있습니다. 쿠버네티스 전문가의 지원을 받아보세요.

쿠버네티스 학습을 위한 Minikube 설치 후기

이미지
Minikube란? Minikube는 로컬 환경에서 간편하게 Kubernetes 클러스터를 실행하고 관리하는 도구입니다. Kubernetes는 대규모 컨테이너 오케스트레이션 플랫폼으로, 복잡한 애플리케이션의 배포와 관리를 용이하게 해줍니다. Minikube는 이러한 복잡성을 줄여 개발자가 로컬에서도 Kubernetes 클러스터를 테스트하고 개발할 수 있게 해주며, 실제 환경과 유사한 조건에서 애플리케이션을 검증하고 디버깅할 수 있습니다. 그러면 Minikube의 핵심 장점 5가지를 간략하게 정리해보겠습니다. 로컬 환경에서 Kubernetes 실행 : Minikube를 사용하면 로컬 환경에서도 가상 Kubernetes 클러스터를 실행할 수 있습니다. 간편한 설치 및 설정 : Minikube는 간단한 명령어를 통해 Kubernetes 클러스터를 생성하고 설정할 수 있습니다. 테스트 및 개발 용이성 : Minikube를 통해 애플리케이션을 개발 및 테스트하며, Kubernetes 리소스를 신속하게 실험할 수 있습니다. 클라우드 환경 시뮬레이션 : 로컬 클러스터를 통해 클라우드 환경과 유사한 상황을 시뮬레이션하여 애플리케이션 동작을 확인할 수 있습니다. 다양한 드라이버 지원 : VirtualBox, Hyperkit, Docker Desktop 등 다양한 드라이버를 통해 클러스터를 생성할 수 있습니다. 이렇게 Minikube는 개발자들이 Kubernetes를 효율적으로 활용하며, 로컬 환경에서의 개발과 테스트 과정을 간편하게 수행할 수 있도록 도와줍니다. Minikube 설치 요구사항 1. Docker Desktop Minikube는 로컬 환경에서 Kubernetes 클러스터를 실행하기 위해 가상 머신 내에서 컨테이너를 사용합니다. 이 때 Docker 컨테이너를 관리하기 위해 Docker Engine이 필요한데, Docker Desktop은 이러한 Docker Engine을 제공해줍니다. 따라서 Minikube는 Docker 컨테이너를 사용하여 Kubernetes 클러...

Get 3 Months Free Kubernetes Monitoring

이미지
좋은 정보가 있어 공유합니다.

Pod의 replica 수를 늘이거나 줄이는 방법 (kubectl scale)

kubectl scale 명령어를 사용하면 됩니다. 다음은 Kubernetes 공식 문서 상에 기재된 내용입니다. kubectl scale --replicas=3 rs/foo # Scale a replicaset named 'foo' to 3 kubectl scale --replicas=3 -f foo.yaml # Scale a resource specified in "foo.yaml" to 3 kubectl scale --current-replicas=2 --replicas=3 deployment/mysql # If the deployment named mysql's current size is 2, scale mysql to 3 kubectl scale --replicas=5 rc/foo rc/bar rc/baz # Scale multiple replication controllers 만일 Deployment에 의해 생성된 ReplicaSet이라면 Deployment를 대상으로 scale 합니다. 다음과 같은 느낌입니다. $ kubectl get pods -A aeug                tour-75866547dd-26tkt                  1/1     Running   0                 19h $ kubectl scale deployment/tour -n aeug --replicas=3 deployment.apps/tour scaled $ kubectl get pods -A | grep tour aeug                tour-75866547dd-26tkt...

와탭 쿠버네티스가 Desired pod 수를 계산하는 방법

이미지
와탭 쿠버네티스는 대시보드 화면, 위젯 등을 통해 Desired pod 정보를 제공합니다.  이 Desired pod 수는 다음과 같은 항목들로 구성되어 있습니다. ReplicaSet의 DESIRED 수 StatefulSet의 DESIRED 수 DaemonSet의 DESIRED 수 단독 Pod의 수 Desired pod 수와 함께 제공되는 Available pod 수도 동일한 기준으로 산출됩니다. 지금 바로  와탭 계정을 만들고  15일 동안 무료로 쿠버네티스 모니터링을 시작해보세요. 와탭 쿠버네티스는 어떠한 모니터링 자원없이도 시작할 수 있는 SaaS (Software as a Service) 제품입니다.

kubectl 명령어로 쿠버네티스 클러스터 상의 이벤트를 확인하는 방법

쿠버네티스는 클러스터에서 벌어지는 다양한 이벤트들에 대한 정보를 제공하는 Event 정보를 제공합니다. 이러한 이벤트 정보는 kubectl 명령어를 이용하여 조회할 수 있습니다. kubectl get events 그런데 이렇게만 실행하면 현재 지정된 기본 Namespace에 대한 이벤트가 출력됩니다. 그래서 클러스터의 모든 Namespace에 대한 이벤트 정보를 확인하려면 옵션을 추가해야 합니다. kubectl get events -A 한편 이벤트가 발생한 시간은 정렬되어 있지 않은 상태입니다. 만약 이벤트 시간을 기준으로 데이터를 정렬하여 조회하려면 다음과 같은 옵션을 추가합니다. kubectl get events --sort-by=.metadata.creationTimestamp -A

쿠버네티스의 등장 배경과 주요 특징

최근 IT 업계의 개발자나 운영자라면 쿠버네티스를 직접 사용하고 있거나, 사용하지 않더라도 쿠버네티스라는 단어를 한번 정도는 들어보았을텐데요. 오늘은 쿠버네티스가 왜 등장하게 되었고, 어떤 특징을 가지고 있는지 간단히 알아보겠습니다. 쿠버네티스는 과거 구글 내부에서 사용하던 Borg를 기반으로 발전한 도구입니다. 2015년에 버전 1.0이 발표되었고 이후 지금까지 CNCF(Cloud Native Computing Foundation)에서 관리하고 있습니다. CNCF는 리눅스 재단(Linux Foundation) 및 구글, IBM, 레드햇, 도커, 인텔, 시스코, 트위터, 이베이 등의 기업들이 설립한 비영리 단체로 컨테이너를 포함한 클라우드 네이티브 기술 발전을 목표로 합니다. 현재 CNCF 산하에는 100개가 넘는 프로젝트가 있는데, CNCF의 첫 프로젝트가 바로 쿠버네티스입니다. 또한 컨테이너 이미지 저장소인 하버(Harbor), 쿠버네티스 패키지 매니저인 헬름(Helm), 시스템 모니터링을 위한 프로메테우스(Prometheus) 등도 CNCF 프로젝트입니다.  쿠버네티스는 다음과 같은 특징을 지니고 있습니다. 이 글의 원문(전체보기)은 이곳에서 확인할 수 있습니다.

쿠버네티스 모니터링이 어려운 이유

쿠버네티스를 잘 관찰하기 위해서는 다양한 지점의 모니터링을 동시에 수행해야 합니다. 쿠버네티스 클러스터에 특이한 이벤트가 발생하고 있지 않는가? 노드 컴포넌트의 각 노드(서버)들은 모두 정상상태를 유지하면서 컨트롤 플레인과 통신하고 있는가? 문제가 발생하였거나 CPU, Memory를 과다하게 사용하는 파드는 없는가? 배포는 정상적으로 이루어지고 신규 버전의 파드는 지정한 컨테이너 이미지를 잘 사용하고 있는가? 컨테이너 로그 내용에 특이한 메시지는 없는가? 특히 쿠버네티스 상에서 실행 중인 자바, PHP, Node.js, 파이썬 등의 애플리케이션 상태를 확인하지 않고는 쿠버네티스 모니터링을 하고 있다고 할 수 없습니다. 애플리케이션의 응답시간, TPS, 에러율은 정상적인가? 애플리케이션 로그에 특이사항은 없는가? 애플리케이션의 개별 트랜잭션에 대한 추적은 가능한가? 여러 컨테이너(파드)에 걸쳐 실행되는 멀티 트랜잭션에 대한 추적 및 분석은 가능한가? 단지 데이터의 수집과 저장으로 끝나는 것이 아닙니다. 다양한 경로를 통해 수집한 데이터들을 통합적인 시각에서 바라보아야 합니다. 즉 Observability 측면의 통합 대시보드가 필요합니다.  지금 바로  와탭 계정을 만들고  15일 동안 무료로 쿠버네티스 모니터링을 시작해보세요. 와탭 쿠버네티스는 어떠한 모니터링 자원없이도 시작할 수 있는 SaaS (Software as a Service) 제품입니다.

와탭 쿠버네티스 모니터링이 안될 때 팁 - 에이전트 상태 확인

안녕하세요. 와탭 쿠버네티스입니다. 와탭 쿠버네티스 모니터링은 사용자 환경에 설치된 에이전트에 의해 이루어집니다. 따라서 무언가 모니터링이 안된다면 가장 먼저 확인해봐야 할 것이 모니터링 에이전트의 상태입니다. 와탭 쿠버네티스 에이전트는 마스터 에이전트와 노드 에이전트로 구성되어 있습니다. 마스터 에이전트 (whatap-master-agent) 노드 에이전트 (whatap-node-agent) 1. 마스터 에이전트 상태 확인 마스터 에이전트는 whatap-monitoring 네임스페이스에 디플로이먼트로 배포됩니다. 따라서 kubectl get deployments 명령어로 디플로이먼트 목록을 확인할 수 있습니다. kubectl get deployments -n whatap-monitoring 마스터 에이전트에는 whatap-master-agent 라는 레이블이 달려있습니다. 해당 레이블을 이용하여 마스터 에이전트 파드를 살펴보겠습니다. kubectl get pods -l=name=whatap-master-agent -n whatap-monitoring 2. 노드 에이전트의 상태 확인 노드 에이전트는 마스터와 에이전트와 마찬가지로 whatap-monitoring 네임스페이스에 있지만 데몬셋 형태로 배포된다는 차이점이 있습니다. 따라서 kubectl get daemonsets 명령어로 데몬셋 목록을 확인할 수 있습니다. kubectl get daemonsets -n whatap-monitoring 노드 에이전트에는 whatap-node-agent 라는 레이블이 달려 있습니다. 해당 레이블을 이용하여 노드 에이전트 파드를 살펴보겠습니다. kubectl get pods -l=name=whatap-node-agent -n whatap-monitoring 설치 가이드 영상 을 보면 더욱 쉽게 와탭 쿠버네티스 모니터링을 설치할 수 있습니다.

와탭 쿠버네티스 모니터링 설치 가이드

이미지
안녕하세요. 와탭 쿠버네티스입니다. 오늘은 유튜브 영상을 통해 와탭에 접속하여 모니터링 프로젝트를 생성하고, 사용자 환경에서 와탭 모니터링을 설치하는 방법을 소개하도록 하겠습니다. 와탭 쿠버네티스 모니터링은 와탭 계정 생성 후 바로 시작할 수 있습니다. 계정 생성은 이메일 인증만으로 가능하며, 결제 수단을 등록하지 않아도 15일 간의 트라이얼 사용이 가능합니다.