전체 글

IT 엔지니어링에 대해 알고 싶은 분 모두 환영합니다.
Observability

Opentelemetry로 Kubernetes Observability 확보하기 : Logging

Observability를 확보하는 것은 시스템 및 소프트웨어를 유지하는데 필수적인 행위입니다. Three pilars of Observability로 불리는 Log, Metric, Trace 3가지 Telemetry 데이터를 수집하고 관리하는 것이 Observability를 잘 확보한 것이라 할 수 있는데요. 이렇게 3개의 요소들을 바탕으로 Observability를 확보하고자 할때 허들이 되는 요소 중 하나는, Telemetry 데이터의 프로토콜이 Observability 서비스 및 플랫폼마다 다르다는 것입니다. 이 때문에 Corrleation이라고 하는, Telemetry 데이터 간 연동이 힘들고 수집한 데이터들을 한 곳에서 가공 및 관리하는 것이 불가능했었습니다. 이러한 문제를 해결하기 위해 벤더..

잡담

지난 1년을 돌아보며 - 2023년 회고

이번에도 어김없이 찾아온 2024년에 작년 한해를 돌아보고자 합니다. 엔지니어로써 저는 매년 많은 일을 겪고 다양한 경험을 쌓고 있습니다. 이 귀중한 메모리들을 바탕으로 좋았던 경험은 기억해두고, 아쉬웠던 경험은 반성하기 위해 매년 회고를 작성하고 있습니다. 작년은 만족스러운 것도, 아쉬웠던 것도 많았던 복합적인 한 해였던 것 같습니다. 2023년에는 어떤 일이 있었는지 제 경험을 바탕으로 적어보고자 합니다. 1. Google Kubernetes Engine 강의 촬영 2023년 7월 중순 경에 M사로부터 Google Kubernetes Engine을 기반으로 입문자를 위한 강의를 촬영해달라는 요청이 있었습니다. 강의 촬영은 요청받을 때마다 흥분되는 일이지만 동시에 부담도 많이 느낍니다. 제 말과 핸즈온..

Devops

Terraform을 GitOps 방식으로 사용하기 위한 도구 선택하기(With TACOS)

Terraform은 IaC(Infrastucture as Code)를 위한 인프라 관리 도구입니다. 현재 Terraform은 Plumi, ARM 등 많은 IaC 관련 도구들을 제치고 가장 많은 사용자와 Reference를 가지고 있으며, 따라서 가장 대중화된 도구가 되었습니다. 이제는 단순히 Terraform을 Local에서 사용하는 것을 넘어서, 다수의 이용자와 협업하기 위해 GItOps 방식의 Workflow를 도입하는 경우도 많아지고 있는데요. 이는 Github, Gitlab 등의 Git 제품들이 제공하는 CI 도구와 Terraform을 결합해서 코드 커밋에서 시작해 인프라 배포까지 이어지는 하나의 단일한 Workflow를 이용하는 것을 말합니다. 이 같은 방식을 사용하면 Git 코드를 기반으로 단..

Devops

Kubernetes 환경에서 발생하는 DNS Query Failed 이슈와 NodeLocal DNSCache를 이용한 해결

Kubernetes 환경에서 서비스를 운영하다보면 예상치 못한 이슈를 종종 발견하게 됩니다. 특히 대규모의 트래픽을 부담해야 하거나 구동 중인 애플리케이션이 많은 경우처럼 Cluster의 크기가 거대해질수록 다양한 이슈를 만나게 되는데요. 이 경우 단순히 리소스의 부족 문제 뿐만이 아니라 여러 방면에서의 문제를 해결해야 하는 상황이 오기도 합니다. 이번 포스팅에서는 클러스터를 운영하면서 DNS Query Failed 이슈를 해결했던 사례를 공유하고자 합니다. 1. Issue 해당 이슈를 발견하게 된 계기는, 트래픽이 몰리던 시간대에 평소와 다른 Error Log가 확인됐던 것이었습니다. "io.netty.resolver.dns.DnsResolveContext$SearchDomainUnknownHostEx..

Azure

AKS(Azure Kubernetes Service)에서 Application Gateway로 Ingress 구성하기

많은 애플리케이션들이 Kubernetes 환경에 배포되고 있는 요즈음 AWS, GCP 등.. 많은 CSP(Cloud Service Provider)가 Managed Kubernetes 서비스를 제공하고 있습니다. CSP가 제공하는 Managed Kubernetes 서비스의 장점 중 하나는 기반이 되는 클라우드 서비스와 연계되는 기능을 제공한다는 점인데요. 특히 Kubernetes의 Ingress를 CSP의 L7 Loadbalancer 서비스와 연계해 생성하는 기능이 널리 사용되고 있습니다. 많은 CSP 이용자들이 Managed Kubernetes 서비스를 사용하며 이러한 이점을 활용하고 있는데요. 만약 Microsoft의 CSP인 Azure를 사용한다면 AKS(Azure Kubernetes Service..

Devops

EKS Kubernetes의 롤링 업데이트 시 일시적인 500 에러의 원인과 해결

EKS(Elastic Kubernetes Service)는 AWS에서 제공하는 Managed Kubernetes 서비스입니다. EKS는 "aws-loadbalancer-controller"를 제공해 AWS ALB(Application Load Balancer)를 Ingress로 사용할 수 있게끔 하고 있는데요. ALB 기반의 Ingress로 Deployment를 배포할시 AWS와 통합된 환경을 활용해 서비스를 노출시킬 수 있다는 장점이 존재합니다. 하지만 위와 같은 환경에서 롤링 업데이트 시 일시적으로 500 에러가 발생하는 현상을 종종 발견할 수 있는데요. 이번 포스팅에서는 이 500에러의 원인이 무엇인지, 해결 방법에는 무엇이 있는지 알아보도록 하겠습니다. 1. 증상 이슈가 되는 에러를 재구현해 어..

Devops

Kubecost로 Kubernetes 환경의 FinOps를 구현해보자

IT 부서에서 비용 관리는 매우 중요한 부분을 차지하고 있습니다. IT 리소스는 보통 공유되는 자원이고, 부서 비용에 큰 부분을 차지하며, 비즈니스 우선순위에 영향을 미치기 때문이죠. 그래서 이 IT 리소스 비용을 효율적으로 관리하는 것이 IT 리소스를 잘 사용하는 것 만큼이나 중요합니다. 그렇다면 Kubernetes 환경에서의 비용 관리는 어떻게 할 수 있을까요? 이번 포스팅에서는 IT 환경에서 비용을 관리하는 방법에서 시작해 Kubernetes의 비용 관리 도구인 Kubecost를 사용하는 방법까지 알아보도록 하겠습니다. 1. IT 비용을 어떻게 관리할 수 있을까? 1-1. Chargeback, Showback FinOps 관점에서 IT 리소스 비용을 관리하는 방법은 크게 2가지로 구분할 수 있습니다..

Devops

Clean Code를 구현하기 위해 Sonarqube로 정적 코드 분석을 해보자

Sonarqube는 Clean Code를 구현하기 위한 정적 코드 분석 도구입니다. Clean Code란 안전하고, 유지보수가 용이하며, 믿을 수 있는 코드를 뜻하는 Sonarqube에서 정의한 용어입니다. 즉 Sonarqube를 통해서 모범적인 소프트웨어를 만들기 위한 높은 수준의 코드 품질을 유지할 수 있다는 뜻입니다. 게다가 CI 파이프라인과의 통합으로 자동화된 코드 리뷰를 수행할 수 있으며, 스크립트나 IaC코드 또한 분석이 가능합니다. 이번 포스팅에서는 Sonarqube가 무엇인지, 그리고 Sonarqube의 구축 및 사용 방법을 알아보도록 하겠습니다. 1. 정적 코드 분석 vs 동적 코드 분석 앞서 Sonarqube는 정적 코드 분석을 위한 도구라고 말씀드렸습니다. 정적 코드 분석이란 어떠한 ..

행사 및 세미나 활동

Google Developer Expert(GDE) 프로세스 후기 및 회고

Google Developer Experts가 되기 위한 과정을 모두 밟은 후, 이 과정에 대한 후기와 회고를 글로 남기기 위해 이 글을 포스팅합니다. 결과와 관계 없이 제 자신을 뒤돌아볼 수 있었던 좋은 경험이었으며, GDE 및 Googler와 소통할 수 있었던 귀중한 시간이었습니다. 이 글을 통해서 GDE가 되려는 분들께 도움이 되었으면 합니다. 1. GDE란? GDE는 Google Developer Expert의 약자로 특정 분야에 전문성을 가지고 있으며, 지식을 함께 공유하고자 하는 전문가를 말합니다. 자신이 가진 전문 분야에 따라 그 분야의 GDE로 활동할 수 있는데요. 현재는 Android, Firebase, Machine learning, Go, Flutter, GCP 등의 18개 전문 분야..

Devops

SealedSecret & Reloader를 활용한 Gitops 방식의 Kubernetes Secret 관리 및 배포

Kubernetes의 Secret은 Container의 구동에 필요한 민감 정보를 저장하기 위한 오브젝트입니다. 그래서 Secret 오브젝트는 DB Password 등의 민감 정보를 담고 있지만 데이터를 base64로 인코딩하기 때문에 정보가 누출될 수 있다는 위험이 존재합니다. 이 때문에 Kubernetes Secret은 Gitops 기반의 배포 방식을 사용할 경우에도 Secret manager 등 별개의 저장소에 따로 저장해서 사용해야 하는 불편점이 있었습니다. AWS ASM, Hashicorp Vault 등의 Secret manager 서비스를 사용하지 못하는 환경이라면 Kubernetes Secret을 관리할 수 있는 선택지가 더 좁아지는 셈입니다. 그래서 Kubernetes Secret을 Sec..

Seungwoo Lee
Seungwoo Lee와 About IT 엔지니어링