Kubernetes 137

서비스 메쉬(Service Mesh) 란

Service Mesh 서비스 메쉬(Service Mesh)란 애플리케이션의 서비스 간 통신을 처리하는 소프트웨어 계층이다. 애플리케이션의 여러 부분이 서로 데이터를 공유하는 방식을 제어하여 애플리케이션 수명주기 전반에 걸쳐 데이터의 일관성을 유지하며 통신할 수 있도록 한다. 컨테이너화된 마이크로서비스로 구성되며, 서비스 간 연결, 트래픽을 관리하고 추적 및 보안성을 강화하기 위해 모니터링, 로깅, 추적, 트래픽 제어와 같은 기능을 제공한다. 기능 트래픽 관리 트래픽 라우팅 규칙을 사용하여 서비스 간 트래픽 흐름과 API 호출을 쉽게 제어할 수 있으며, 더 나은 배포 전략을 가능하게 한다. 타임아웃, 재시도와 같은 서비스 수준 속성의 구성을 단순화할 수 있고, Canary 배포나 퍼센트 기반 트래픽 분할..

Kubernetes 2024.02.23

[Helm] Release 정보 확인

개요 Kubernetes 환경에서 Helm Release로 애플리케이션을 배포했는데, Release가 어떤 value로 배포되었는지 등의 정보를 확인하고 싶다. 방법을 적어둔다. helm get Helm Release의 정보를 확인하고 싶을 떄는helm get 명령어를 사용할 수 있다. get 명령어에 정보를 확인할 release를 지정하여 사용한다. helm get values 확인 Helm release를 배포할 때 사용한 value 값을 확인한다. helm get values 배포 리소스 확인 Helm Release로 인해 생성된 쿠버네티스 객체 정의를 확인한다. helm get manifest Helm Chart templete과 values.yaml이 결합된 yaml 정의 문서를 확인할 수 있다..

Kubernetes 2024.01.23

[k8s/Trino] Unrecognized VM option 'UseBiasedLocking' 현상

현상 AWS EKS환경에서 Apache Superset을 통해 AWS S3 데이터를 쿼리 하기 위해 Trino, Hive Metastore를 설치해 사용 중인데, 어느 날부터 Trino Worker Pod 1개에 아래와 같은 에러 로그와 함께 동작하지 않았다. 원인을 파악하고 해결한 방법을 적어둔다. 원인 에러 로그에서 확인되는 VM 옵션 UseBiasedLocking은 멀티스레딩 성능 관련 옵션으로 Java 5에 추가되고 Java 15에서 deprecated 된 후, 삭제되었다. 즉, 새로운 trino-worker pod가 동작하면서 사용하는 Java 버전에서 UseBiasedLocking 옵션이 지원되지 않아 서비스가 동작하지 않았다. trino 버전에 따라 Java 버전을 고정해두지는 않은 모양이다..

Kubernetes/삽질 2024.01.03

[k8s/DB] k8s 환경에서 동작하는 DB 백업

개요 AWS EKS의 쿠버네티스 버전 업그레이드 작업을 앞두고, 예기치 않게 문제 상황이 발생할 경우를 대비해 클러스터 내에서 동작하고 있는 DB를 백업해두려고 한다. 방법을 적어둔다. 사용 데이터베이스 엔진은 PostgreSQL이다. 방법 1. DB 포드 컨테이너 접속 kubectl exec -it -- bash # 예시 kubectl exec -it superset-postgresql-0 -- bash 2. 데이터베이스 Dump 수행 pg_dumpall > pg_dumpall -U > # 예시 pg_dumpall -U postgres > backup.sql Pod Container에서 psql, pg_dump, pg_dumpall 등 postgres에 작업할 수 있는 명령어를 옵션 없이 실행하면, 경..

Kubernetes 2024.01.02

[k8s] kubectl cp - 클라이언트/포드 간 파일 복사

개요 쿠버네티스를 사용하다 보면 클라이언트에서 포드 내 디렉터리로 파일을 전달하거나, 포드에 저장된 파일을 클라이언트로 가져오고 싶을 때가 있다. 이런 경우, kubectl cp 명령어를 사용할 수 있다. 사용법을 적어둔다. kubectl cp kubectl cp 명령어는 컨테이너 간 파일 및 디렉터리를 복사한다. 명령어가 동작하기 위해서는 포드 컨테이너에서 tar를 실행할 수 있어야 한다. 만약 tar 명령이 없다면 exec 명령으로 대체할 수 있다. kubectl cp 경로 지정 시 절대 경로로 지정하되, pod의 경로는 루트를 의미하는 최상의 /는 없이 지정한다. 예시 로컬(클라이언트) -> 포드 복사 만약 포드가 멀티 컨테이너로 구성되어 있고, 복사할 컨테이너를 지정하고 싶다면 -c 옵션을 사용한..

Kubernetes 2024.01.01

[k8s] node-shell - node 접근하기

개요 AWS EKS 환경에서 서비스를 운영하면서 간혹 문제상황이 발생한 경우 Pod 뿐만 아니라 Worker Node에 직접 접속해 상태를 확인할 필요가 있었다. 하지만 Worker Node에서 SSH 접속을 허용하고 있지 않아 접속할 수 있는 방법이 없었는데, Worker node 접속 기능을 제공하는 kubectl 플러그인을 확인하여 사용 방법을 정리해두려고 한다. node-shell로 EKS 클러스터 노드에 접속할 수 있는지는 확인해봐야 한다! 이 글에서는 사용 방법 정도만 정리해둔다. node-shell kubectl-enter로도 알려진 kubectl node-shell은 node의 호스트 OS에서 root shell을 시작한다. 간단히 말해 node에 명령어를 실행할 수 있는 shell을 제공..

Kubernetes 2023.12.27

[k8s] HorizontalPodAutoscaler - 수평적 오토스케일링

HPA (HorizontalPodAutoscaler) Kubernetes에서 HorizontalPodAutoscaler는 Deployment나 ReplicaSet의 리소스 수요에 맞춰 Pod의 수를 자동으로 Scale-up/down 하는 기능을 제공한다. 보통 컴퓨팅 리소스를 추가로 확보할 때는 더 많은 리소스가 있는 자원을 사용하거나, 적당한 리소스가 있는 자원을 여러 대 사용하는 방법을 사용하는데 HorizontalPodAutoscaler는 후자에 해당한다. 때문에 DaemonSet과 같은 복제본 수를 지정할 수 없는 객체를 대상으로 동작하지 않는다. HorizontalPodAutoscaler는 Kubernetes 리소스와 컨트롤러로 구현되어 있다. 리소스는 컨트롤러의 동작을 지정하고, 컨트롤러는 주..

Kubernetes 2023.12.26

[k8s] kubectl - 여러 레이블 값을 가진 객체 한 번에 찾기

개요 어떤 레이블을 가진 객체를 확인할 때는 kubectl get -l 옵션으로 조건으로 줄 레이블 키-값을 지정한다. kubectl get pods -l app=web-server 그렿다면 여러 값을 OR 조건으로 주어야 할 때는 어떻게 할 수 있을까? 적절한 방법인지는 모르겠지만 나의 경우에는 다음과 같이 확인하곤 했다. 하지만 최근에 -l 옵션을 이용해 조회하는 방법을 알게 되어 정리한다. -l 'KEY in (VAL1,VAL2)' kubectl 명령으로 특정 레이블 키-값을 가진 객체를 조회하는 -l 옵션을 사용할 때 여러 값 중 하나라도 만족하는 객체를 찾고 싶다면 조회 조건을 아래와 같이 지정하면 된다. kubectl get RESOURCE -l 'KEY in (VAL1,VAl2,VAL3.....

Kubernetes 2023.12.13

[k8s] kubectl annotate - 어노테이션 추가/삭제

Annotation 2021.08.06 - Labels, Selectors and Annotation에서 간단히 정의했는데 쿠버네티스에서 어노테이션은 키-값 형식으로 객체에 대한 정보를 제공하는 임의의 비식별 메타데이터, 간단히 말해 주석을 의미한다. "metadata": { "annotations": { "key1" : "value1", "key2" : "value2" } } yaml 정의 파일에서 spec.metadata.annotations로 정의한다. 어노테이션으로 지정하는 정보는 다음과 같을 수 있다. 이미지 정보 : 빌드, 릴리즈, 타임스탬프, 릴리즈 아이디, Git 브랜치, 이미지 해시, 레지스트리 주소 등 로깅, 모니터링, 분석 또는 감사 리포지터리에 대한 포인터 디버깅 목적으로 사용하는 ..

Kubernetes 2023.12.12

[k8s] logs - 이미 종료된 컨테이너 로그 확인

개요 Kubernetes 환경에서 서비스를 운영하다 보면 동작하던 Pod가 예기치 않은 문제로 재시작하는 상황이 발생할 수 있다. 다만 기본적으로 컨테이너 공간은 휘발성이기 때문에 로그 저장 공간을 따로 마운트 하지 않았다면 재시작 이후에는 로그를 확인할 수 없었다. 즉, 문제가 생긴 원인을 확인할 수 없었다. 하지만 logs 명령어로 이미 종료된 컨테이너의 로그를 확인하는 방법이 있다는 것을 알게되어 적어둔다. logs -p logs 명령여 -p 옵션을 사용하면 Pod 내 컨테이너의 이전 인스턴스 로그를 확인할 수 있다. kubectl logs [-f] [-p] (POD | TYPE/NAME) [-c CONTAINER] # -f, --follow : 로그를 실시간으로 출력한다. # -p. --previ..

Kubernetes 2023.12.07