728x90

분류 전체보기 67

AWS Fluent Bit error 수정

AWS Fluent Bit error 수정 AWS EKS에서 AWS CloudWatch로 로그를 전송하기 위해 AWS-Fluent-Bit Daemonset을 사용하고 있습니다. 어느 날 확인해 보니 AWS-Fluent-Bit POD에서 아래의 로그와 같이 caught signal (SIGSEGV) 에러가 나오고 POD 재시작이 되는 현상이 생각보다 자주 발생하고 있었습니다. 2023-01-10T07:01:14.243917003Z [2023/01/10 07:01:14] [ info] [filter:kubernetes:kubernetes.0] token updated 2023-01-10T07:01:14.341788933Z [2023/01/10 07:01:14] [ info] [input:tail:tail.0..

Kubernetes 2023.03.14

AWS EKS 클러스터 버전 업그레이드

AWS EKS 클러스터 버전 업그레이드 AWS EKS 클러스터 버전 업그레이드 방법을 설명합니다. AWS는 일반적으로 Kubernetes 버전을 출시한 후 14개월 동안 해당 버전에 대한 지원을 보장합니다. EOS가 지나면 자동으로 업그레이드를 진행하고, 자동으로 진행 시 kubernetes로 운영 중인 애플리케이션에 장애가 발생할 수 있으므로 EOS가 되기 전에 업그레이드를 진행해야 합니다. AWS EKS 클러스터 버전 업그레이드 방법에는 크게 두 가지 방법이 있습니다. 1. 현재 사용 중인 클러스터의 버전을 업그레이드하는 방법 현재 사용 중인 클러스터를 버전업그레이드하는 방법이 가장 깔끔하지만 업그레이드 도중 애플리케이션에 장애가 발생할 수 있고, 업그레이드 중 문제가 생기면 운영 중인 애플리케이션에..

Kubernetes 2023.03.09

terraform count vs for_each

terraform count vs for_each Terraform에서 count와 for_each는 모두 리소스 반복 생성을 위한 기능입니다. 하지만 둘은 다른 방식으로 동작합니다. count는 반복 횟수를 지정하는 숫자 형태의 값이며, 각 리소스에 인덱스가 자동으로 할당됩니다. 이 방식은 생성하려는 리소스 수가 고정되어 있을 때 유용합니다. for_each는 객체 형태의 값(맵)을 받으며, 각 맵 요소에 대해 리소스를 생성합니다. 이 방식은 동적으로 생성해야 하는 리소스 수가 있을 때 유용합니다. 리소스의 추가/삭제 없이 고정된 리소스를 사용하려면 count를 사용하고, 리소스 추가/삭제가 빈번하면 for_each를 사용하세요. 자세한 설명은 아래의 예제코드를 확인해보세요. count count를 사..

Terraform 2023.03.07

Kubernetes RuntimeClass 사용하여 gVisor로 컨테이너 실행

Kubernetes RuntimeClass 사용하여 gVisor로 컨테이너 실행 gVisor 란 gVisor는 Google에서 개발한 컨테이너 런타임으로, 샌드박스(Sandbox)라는 기술을 기반으로 합니다. 컨테이너 안에서 실행되는 프로세스는 호스트 시스템과 격리되며, 시스템 호출은 gVisor 커널을 통해 중개됩니다. 이를 통해 컨테이너가 안전하게 실행되고, 컨테이너 간의 간섭을 방지할 수 있습니다. gVisor는 커널 단위의 격리 기술인 네임스페이스와 cgroup을 사용하여 컨테이너를 격리합니다. 또한, gVisor는 기본적으로 제공되는 Linux 커널을 사용하지 않고, 고유한 가상 커널을 사용하여 컨테이너를 격리합니다. 이 가상 커널은 Linux 시스템 호출을 에뮬레이션 하며, 이를 통해 컨테이너..

Kubernetes 2023.03.03

Prometheus 메모리 튜닝

Prometheus 메모리 튜닝 Prometheus를 운영하다 보면 많은 메트릭 저장으로 인해 메트릭 보관주기를 짧게 설정해도 메모리를 많이 사용합니다. 과도한 메모리 사용 시 아래의 방법으로 메모리 사용율을 낮출 수 있습니다. TSDB analyze Prometheus와 함께 제공되는 promtool 명령어를 사용합니다. promtool tsdb analyze 사용하여 분석하고, 분석한 결과에서 Highest cardinality labels 목록에서 사용하지 않은 label을 골라 삭제하면 메모리 사용율을 낮출 수 있습니다. # promtool tsdb analyze [data path] $ promtool tsdb analyze /data Duration: 2h0m0s Series: 5547383 ..

Kubernetes 2023.02.22

containerd 로그 수집을 위한 AWS Fluent Bit 설정

containerd 로그 수집을 위한 AWS Fluent Bit 설정 Kubernetes 1.24부터 기본 container rumtime이 변경되었습니다. EKS도 1.24부터 container rumtime이 docker에서 containerd로 변경되었습니다. Fluent Bit를 통해서 로그를 수집하고 있었다면 containerd 설정으로 인해 로그 포맷이 변경되어 Fluent Bit 설정을 수정해야합니다. 로그 포맷 container rumtime - docker에서는 기본적으로 json 형식으로 로그를 출력합니다. { "log":"ts=2022-11-30T09:49:46.292Z caller=node_exporter.go:199 level=info msg=\"Listening on\" addr..

Kubernetes 2022.12.02

Go 파일 읽기

Go 파일 읽기 Go 프로그램을 사용하여 파일을 라인 단위로 읽는 코드입니다. bufio 패키지를 사용해서 파일을 라인 단위로 읽어서 가져올 수 있습니다. bufio의 NewReader를 사용해도 되지만 아래의 코드에서는 편의성을 위해 NewScanner를 사용하였습니다. package main import ( "bufio" "fmt" "log" "os" ) func main() { f, err := os.Open("./file.txt") if err != nil { log.Fatal(err) } defer f.Close() fileScanner := bufio.NewScanner(f) fileScanner.Split(bufio.ScanLines) for fileScanner.Scan() { fmt.Pr..

Go 2022.11.24

AWS Aurora MySQL에서 Lambda 함수 호출하기

AWS Aurora MySQL에서 Lambda 함수 호출하기 AWS Aurora MySQL에서 lambda_sync, lambda_async 함수를 사용하여 lambda 함수를 실행할 수 있습니다. stored procedure를 통해 lambda 함수를 호출하는 건 더 이상 지원하지 않으므로 설명하지 않습니다. AWS Aurora MySQL에서 lambda_sync, lambda_async 함수를 사용하기 위해서는 IAM Role 설정 및 MySQL 권한 설정을 해야 합니다. IAM Role IAM Role 생성 아래의 내용을 trust-policy.json 파일로 저장하고, aws cli 명령어를 실행합니다. { "Version": "2012-10-17", "Statement": [ { "Effect..

AWS 2022.11.08

Grafana Mimir

Grafana Mimir Grafana Mimir는 Prometheus를 위한 스케일러블 장기 스토리지입니다. 확장성과 성능이 뛰어난 오픈 소스 시계열 데이터베이스입니다. Cortex보다 최대 40배 빠른 쿼리 성능을 자랑하며, Prometheus 100% 호환하여 사용할 수 있습니다. 장기 스토리지로 AWS S3, Google Cloud Storage, Azure Blob Storage, OpenStack Swift 선택하여 사용할 수 있습니다. Prometheus 사용 시 HA(High Availability) 구성을 할 수 없고, 시계열 데이터를 장기적으로 보관이 안되다 보니 Prometheus운영 시 많은 아쉬움이 있었는데, Grafana Mimir를 사용하게 되면 아쉬움을 해결할 수 있습니다. ..

Kubernetes 2022.10.28
728x90