전체 글
DevOps engineer interested in Kubernetes and AWS
-
Terraform이 작업을 수행하면서 인프라의 현재 상태를 추적하기 위한 상태 파일 (terraform.tfstate)을 생성하게 되는데, 이 상태 파일의 관리 방식에 따라 로컬 상태(Locate State)와 원격 상태(Remote State)로 구분됩니다. Locate State, Remote State 차이점 Local State 정의: Terraform이 리소스를 관리할 때 기본적으로 사용하는 상태 저장 방식입니다. 파일: terraform.tfstate - 이 파일은 Terraform이 관리하는 리소스의 현재 상태를 JSON 형식으로 저장합니다. 특징: - 로컬 시스템에 상태 정보가 저장됩니다. - 팀원 간 상태 공유가 어려울 수 있습니다. - 로컬 저장소가 손실될 경우 상태 정보도 손실될 위험..
[Terraform]상태 저장소 설정하는 방법(Backend)Terraform이 작업을 수행하면서 인프라의 현재 상태를 추적하기 위한 상태 파일 (terraform.tfstate)을 생성하게 되는데, 이 상태 파일의 관리 방식에 따라 로컬 상태(Locate State)와 원격 상태(Remote State)로 구분됩니다. Locate State, Remote State 차이점 Local State 정의: Terraform이 리소스를 관리할 때 기본적으로 사용하는 상태 저장 방식입니다. 파일: terraform.tfstate - 이 파일은 Terraform이 관리하는 리소스의 현재 상태를 JSON 형식으로 저장합니다. 특징: - 로컬 시스템에 상태 정보가 저장됩니다. - 팀원 간 상태 공유가 어려울 수 있습니다. - 로컬 저장소가 손실될 경우 상태 정보도 손실될 위험..
2023.08.27 -
이번 글에서는 Kubernetes의 안정성을 향상시키는 주요 설정과 구성요소에 대해 다룹니다. 이러한 설정과 구성요소는 파드의 생명주기 관리, 자원 할당 및 사용, 스케줄링 전략, 노드 관리 등 여러 범주에 걸쳐 있습니다. 특히 다음 주제에 초점을 맞춥니다. 파드의 생명주기 및 상태 관리: 파드의 정상 작동을 지속적으로 확인하고 필요에 따라 복구 또는 재시작하는 메커니즘. 스케줄링 전략: 파드가 클러스터 내에서 어떻게 배치되며, 고가용성과 효율성을 동시에 달성하기 위한 전략. 리소스 관리: 클러스터의 리소스를 효율적으로 할당하고 사용하는 방법. 노드 관리 및 안정성: 노드의 상태를 모니터링하고, 장애 발생 시 자동 복구를 위한 전략. Pod Lifecycle Probe 개요: Kubernetes에서 Po..
[Kubernetes]클러스터의 안정성을 최대화할 수 있는 여러 설정과 구성요소이번 글에서는 Kubernetes의 안정성을 향상시키는 주요 설정과 구성요소에 대해 다룹니다. 이러한 설정과 구성요소는 파드의 생명주기 관리, 자원 할당 및 사용, 스케줄링 전략, 노드 관리 등 여러 범주에 걸쳐 있습니다. 특히 다음 주제에 초점을 맞춥니다. 파드의 생명주기 및 상태 관리: 파드의 정상 작동을 지속적으로 확인하고 필요에 따라 복구 또는 재시작하는 메커니즘. 스케줄링 전략: 파드가 클러스터 내에서 어떻게 배치되며, 고가용성과 효율성을 동시에 달성하기 위한 전략. 리소스 관리: 클러스터의 리소스를 효율적으로 할당하고 사용하는 방법. 노드 관리 및 안정성: 노드의 상태를 모니터링하고, 장애 발생 시 자동 복구를 위한 전략. Pod Lifecycle Probe 개요: Kubernetes에서 Po..
2023.08.27 -
Terraform의 반복문(Loops) 기능은 기본적인 코드 구성을 최소화하면서 다양한 리소스를 생성하거나 관리할 때 유용합니다. 기본 문법 핵심 개념 Input Collection: for 키워드 뒤에 오는 컬렉션은 반복을 수행할 대상이 됩니다. Output Expression: 콜론(:) 뒤의 표현식은 각 반복마다의 결과를 결정합니다. Condition: if 키워드를 사용하여 조건을 지정할 수 있습니다. 이 조건에 맞는 항목만 결과로 포함됩니다. Input Types A for expression's input (given after the in keyword) can be a list a set a tuple a map an object. Lists & Sets [for in : if ] Exam..
[Terraform]반복문(For)을 사용하여 resource 작성하는 방법Terraform의 반복문(Loops) 기능은 기본적인 코드 구성을 최소화하면서 다양한 리소스를 생성하거나 관리할 때 유용합니다. 기본 문법 핵심 개념 Input Collection: for 키워드 뒤에 오는 컬렉션은 반복을 수행할 대상이 됩니다. Output Expression: 콜론(:) 뒤의 표현식은 각 반복마다의 결과를 결정합니다. Condition: if 키워드를 사용하여 조건을 지정할 수 있습니다. 이 조건에 맞는 항목만 결과로 포함됩니다. Input Types A for expression's input (given after the in keyword) can be a list a set a tuple a map an object. Lists & Sets [for in : if ] Exam..
2023.08.20 -
조건부 표현식(Conditional Expression)의 이해 조건부 표현식은 "조건 ? 참일 경우의 값 : 거짓일 경우의 값"의 형태로 사용됩니다. 이는 프로그래밍 언어에서 자주 볼 수 있는 삼항 연산자와 동일한 형태입니다. 이런 식으로 Terraform에서는 변수나 리소스의 값을 동적으로 결정할 수 있습니다. 왜 조건부 표현식이 필요한가? 인프라의 설정이나 배포 과정에서 모든 상황에 동일한 설정을 사용하는 것은 비효율적입니다. 예를 들면, 개발 환경과 실제 환경에서는 다른 설정이 필요할 수 있습니다. 이런 다양한 상황에 대응하기 위해 동적으로 리소스나 출력 값을 결정하는 것이 필요하고, 이때 조건부 표현식이 유용하게 사용됩니다. var 옵션으로 변수 재정의 tf apply -var="변수명=값" 형..
[Terraform]조건문(Conditional)을 사용하여 resource 작성하는 방법조건부 표현식(Conditional Expression)의 이해 조건부 표현식은 "조건 ? 참일 경우의 값 : 거짓일 경우의 값"의 형태로 사용됩니다. 이는 프로그래밍 언어에서 자주 볼 수 있는 삼항 연산자와 동일한 형태입니다. 이런 식으로 Terraform에서는 변수나 리소스의 값을 동적으로 결정할 수 있습니다. 왜 조건부 표현식이 필요한가? 인프라의 설정이나 배포 과정에서 모든 상황에 동일한 설정을 사용하는 것은 비효율적입니다. 예를 들면, 개발 환경과 실제 환경에서는 다른 설정이 필요할 수 있습니다. 이런 다양한 상황에 대응하기 위해 동적으로 리소스나 출력 값을 결정하는 것이 필요하고, 이때 조건부 표현식이 유용하게 사용됩니다. var 옵션으로 변수 재정의 tf apply -var="변수명=값" 형..
2023.08.20 -
count와 for_each와 같은 Terraform의 반복 구문을 사용하면 코드의 반복을 줄이고, 관리를 용이하게 할 수 있습니다. 단순 반복하여 작성한 Terraform resource code # provider provider "aws" { region = "ap-northeast-2" } # resource resource "aws_iam_user" "user_1" { name = "user-1" } resource "aws_iam_user" "user_2" { name = "user-2" } resource "aws_iam_user" "user_3" { name = "user-3" } # output output "user_arns" { value = [ aws_iam_user.user_1.a..
[Terraform]count와 for_each를 사용하여 반복되는 resource 작성하는 방법count와 for_each와 같은 Terraform의 반복 구문을 사용하면 코드의 반복을 줄이고, 관리를 용이하게 할 수 있습니다. 단순 반복하여 작성한 Terraform resource code # provider provider "aws" { region = "ap-northeast-2" } # resource resource "aws_iam_user" "user_1" { name = "user-1" } resource "aws_iam_user" "user_2" { name = "user-2" } resource "aws_iam_user" "user_3" { name = "user-3" } # output output "user_arns" { value = [ aws_iam_user.user_1.a..
2023.08.20 -
Terraform에는 명명된 값을 요청하거나 게시하기 위한 몇 가지 종류의 블록이 포함되어 있습니다. Input Variables 는 Terraform 모듈의 매개변수 역할을 하므로 사용자는 소스를 편집하지 않고도 동작을 커스터마이징할 수 있습니다. Output Values 은 Terraform 모듈의 반환(return) 값과 같습니다. Local Values 은 표현식에 간단한 이름을 지정할 수 있는 편리한 기능입니다. 2023.02.07 - [IaC/Terraform] - [Terraform]테라폼 Input Variables 사용법 2023.02.09 - [IaC/Terraform] - [Terraform]테라폼 Local Values 사용법 Output Values doc Link Output V..
[Terraform]테라폼 Output Values 사용법Terraform에는 명명된 값을 요청하거나 게시하기 위한 몇 가지 종류의 블록이 포함되어 있습니다. Input Variables 는 Terraform 모듈의 매개변수 역할을 하므로 사용자는 소스를 편집하지 않고도 동작을 커스터마이징할 수 있습니다. Output Values 은 Terraform 모듈의 반환(return) 값과 같습니다. Local Values 은 표현식에 간단한 이름을 지정할 수 있는 편리한 기능입니다. 2023.02.07 - [IaC/Terraform] - [Terraform]테라폼 Input Variables 사용법 2023.02.09 - [IaC/Terraform] - [Terraform]테라폼 Local Values 사용법 Output Values doc Link Output V..
2023.08.14 -
https://github.com/bitnami-labs/sealed-secrets 개요 kubernetes secrets config를 git에 저장하려고 한다. 문제는 secrets config는 base64 decode를 이용해 쉽게 해독이 가능하다. SealedSecret를 이용하면 이 대상 클러스터에서 실행되는 컨트롤러에 의해서만 secrets이 해독될 수 있고 다른 누구도(심지어 원래 작성자도) SealedSecret에서 원래 비밀을 얻을 수 없다. 방법 SealedSecret 를 이용하여 암호된 SealedSecret.yaml을 생성한다. SealedSecret.yaml를 배포하여 kubernetes secrets을 생성한다. 주기적으로 Sealed secrets, secrets(e.g. d..
[Kubernetes]Sealed secrets - A Kubernetes controller and tool for one-way encrypted Secretshttps://github.com/bitnami-labs/sealed-secrets 개요 kubernetes secrets config를 git에 저장하려고 한다. 문제는 secrets config는 base64 decode를 이용해 쉽게 해독이 가능하다. SealedSecret를 이용하면 이 대상 클러스터에서 실행되는 컨트롤러에 의해서만 secrets이 해독될 수 있고 다른 누구도(심지어 원래 작성자도) SealedSecret에서 원래 비밀을 얻을 수 없다. 방법 SealedSecret 를 이용하여 암호된 SealedSecret.yaml을 생성한다. SealedSecret.yaml를 배포하여 kubernetes secrets을 생성한다. 주기적으로 Sealed secrets, secrets(e.g. d..
2023.07.23 -
Architecture Grafana Mimir는 개별적으로 또는 병렬로 실행할 수 있는 수평 확장 가능한 여러 개의 마이크로서비스로 구성됩니다. 그리고 이러한 마이크로서비스를 컴포넌트라고 합니다. Grafana Mimir 스토리지 format은 Prometheus TSDB 스토리지를 기반으로 합니다. 그리고 스토리지 format은 각 테넌트의 시계열을 자체 TSDB에 저장하여 온디스크 블록에 지속시킵니다. 기본적으로 각 블록의 범위는 2시간이며, 각 온디스크 블록 디렉터리에는 인덱스 파일, 메타데이터 파일, 시계열 청크가 포함되어 있습니다. TSDB 블록 파일에는 여러 시리즈에 대한 샘플이 포함되어 있습니다. 블록 내부의 시리즈는 블록별 인덱스로 색인되며, 이 인덱스는 메트릭 이름과 레이블을 모두 블록..
[Mimir]Grafana Mimir ArchitectureArchitecture Grafana Mimir는 개별적으로 또는 병렬로 실행할 수 있는 수평 확장 가능한 여러 개의 마이크로서비스로 구성됩니다. 그리고 이러한 마이크로서비스를 컴포넌트라고 합니다. Grafana Mimir 스토리지 format은 Prometheus TSDB 스토리지를 기반으로 합니다. 그리고 스토리지 format은 각 테넌트의 시계열을 자체 TSDB에 저장하여 온디스크 블록에 지속시킵니다. 기본적으로 각 블록의 범위는 2시간이며, 각 온디스크 블록 디렉터리에는 인덱스 파일, 메타데이터 파일, 시계열 청크가 포함되어 있습니다. TSDB 블록 파일에는 여러 시리즈에 대한 샘플이 포함되어 있습니다. 블록 내부의 시리즈는 블록별 인덱스로 색인되며, 이 인덱스는 메트릭 이름과 레이블을 모두 블록..
2023.06.04 -
Service Account 설정 AWS EKS에서 S3를 사용할 수 있도록 Kubernetes의 Service Account 생성하고 AWS IAM Role을 설정하여 Kubernetes Service Account + AWS IAM Policy + Trust Relationship를 연결합니다. 아래 설명에 따라 Role을 생성한 뒤 helm chart의 `serviceAccount.annotations` 에 내용을 작성하여 사용할 수 있습니다. IAM Policy 생성 cat >Loki-S3-policy.json trust-relationship.json
[Loki]Install Grafana loki-distributed with helm chartService Account 설정 AWS EKS에서 S3를 사용할 수 있도록 Kubernetes의 Service Account 생성하고 AWS IAM Role을 설정하여 Kubernetes Service Account + AWS IAM Policy + Trust Relationship를 연결합니다. 아래 설명에 따라 Role을 생성한 뒤 helm chart의 `serviceAccount.annotations` 에 내용을 작성하여 사용할 수 있습니다. IAM Policy 생성 cat >Loki-S3-policy.json trust-relationship.json
2023.06.03 -
Architecture Architecture에서는 아래의 핵심 개념에 대하여 자세히 설명합니다. 핵심 개념 Read Path와 Write Path: Loki는 로그 데이터 처리를 위한 읽기 경로(Read Path)와 쓰기 경로(Write Path)를 구분합니다. 이러한 분리는 데이터 처리의 효율성을 극대화하며, 각 경로는 특정 작업에 최적화된 컴포넌트로 구성됩니다. Consistent Hash Rings: 클러스터 내에서 데이터를 균등하게 분배하고 고가용성을 보장하는 메커니즘입니다. 이는 클러스터의 스케일링을 용이하게 하며, 데이터 샤딩과 복제를 통한 안정성을 제공합니다. Multi-tenancy: Loki는 다중 테넌시를 지원하여, 하나의 Loki 인스턴스를 여러 사용자나 팀이 공유할 수 있게 합니다..
[Loki]Grafana Loki ArchitectureArchitecture Architecture에서는 아래의 핵심 개념에 대하여 자세히 설명합니다. 핵심 개념 Read Path와 Write Path: Loki는 로그 데이터 처리를 위한 읽기 경로(Read Path)와 쓰기 경로(Write Path)를 구분합니다. 이러한 분리는 데이터 처리의 효율성을 극대화하며, 각 경로는 특정 작업에 최적화된 컴포넌트로 구성됩니다. Consistent Hash Rings: 클러스터 내에서 데이터를 균등하게 분배하고 고가용성을 보장하는 메커니즘입니다. 이는 클러스터의 스케일링을 용이하게 하며, 데이터 샤딩과 복제를 통한 안정성을 제공합니다. Multi-tenancy: Loki는 다중 테넌시를 지원하여, 하나의 Loki 인스턴스를 여러 사용자나 팀이 공유할 수 있게 합니다..
2023.06.02 -
Concept Grafana Loki는 로그 집계 도구로, 모든 기능을 갖춘 로깅 컴포넌트 집합입니다. Indexed Loki는 다른 로깅 시스템과 달리 아래와 같이 로그 스트림의 메타데이터인 레이블(Prometheus의 레이블과 같은)만 인덱싱한다는 개념에 기반해 구축되므로 원본 로그 메시지는 색인되지 않습니다. 그런 다음 로그 데이터 자체는 압축되어 S3나 GCS와 같은 object stores에 chunks로 저장되거나 파일 시스템에 저장됩니다. 작은 인덱스와 압축된 chunks는 간결하면서도 효율적인 쿼리 실행을 가능하게하고 Loki의 비용을 크게 낮추게 됩니다. Agent 에이전트(클라이언트)는 로그를 수집하고, 로그를 스트림으로 변환한 다음, HTTP API를 통해 스트림을 Loki로 푸시합니..
[Loki]What is Grafana Loki?Concept Grafana Loki는 로그 집계 도구로, 모든 기능을 갖춘 로깅 컴포넌트 집합입니다. Indexed Loki는 다른 로깅 시스템과 달리 아래와 같이 로그 스트림의 메타데이터인 레이블(Prometheus의 레이블과 같은)만 인덱싱한다는 개념에 기반해 구축되므로 원본 로그 메시지는 색인되지 않습니다. 그런 다음 로그 데이터 자체는 압축되어 S3나 GCS와 같은 object stores에 chunks로 저장되거나 파일 시스템에 저장됩니다. 작은 인덱스와 압축된 chunks는 간결하면서도 효율적인 쿼리 실행을 가능하게하고 Loki의 비용을 크게 낮추게 됩니다. Agent 에이전트(클라이언트)는 로그를 수집하고, 로그를 스트림으로 변환한 다음, HTTP API를 통해 스트림을 Loki로 푸시합니..
2023.06.01 -
Architecture Grafana Tempo는 Distributor, Ingester, Query Frontend, Querier, Compactor, Metrics Generator(option)를 포함합니다. 각 컴포넌트는 트레이스 수집, 처리, 조회, 그리고 메트릭스 생성 등의 역할을 담당하며, 이들은 전체 trace 데이터의 라이프사이클을 관리합니다. Distributor Distributor는 Jaeger, OpenTelemetry, Zipkin을 포함한 여러 형식의 스팬을 허용합니다. traceID를 해싱하고 분산되고 일관된 해시 링을 사용하여 스팬을 Ingester로 라우팅합니다. 최상의 성능을 위해 OTel Proto를 수집하는 것이 권장됩니다. 스팬(span): 시작 시간과 종료 시간..
[Tempo]What is Grafana Tempo?Architecture Grafana Tempo는 Distributor, Ingester, Query Frontend, Querier, Compactor, Metrics Generator(option)를 포함합니다. 각 컴포넌트는 트레이스 수집, 처리, 조회, 그리고 메트릭스 생성 등의 역할을 담당하며, 이들은 전체 trace 데이터의 라이프사이클을 관리합니다. Distributor Distributor는 Jaeger, OpenTelemetry, Zipkin을 포함한 여러 형식의 스팬을 허용합니다. traceID를 해싱하고 분산되고 일관된 해시 링을 사용하여 스팬을 Ingester로 라우팅합니다. 최상의 성능을 위해 OTel Proto를 수집하는 것이 권장됩니다. 스팬(span): 시작 시간과 종료 시간..
2023.06.01