# Daniel Kim 의 기술 블로그 > Kubernetes 내부 구조, Istio, etcd, AWS 인프라 운영과 MCP·AI 인프라 구축 경험을 깊이 있게 기록하는 DevOps 엔지니어의 기술 블로그입니다. Public Ghost content for AI and LLM tooling. Use `/llms-full.txt` for consolidated page and post context. Append `.md` to any post or page URL to get the content in Markdown (for example, `/example-post.md`). ## Pages - [About](https://www.kimsehwan96.com/about.md) - 6년차 DevOps Engineer 김세환입니다. 현재는 ABLY corporation 에서 근무중입니다. 저는 현재 DevOps Engineering, AI Agent(platform), MCP, K8s, CI/CD, Data platform(Trino, Starrocks, Spark/EMR)등에 관심을 갖고, 관련 업무도 진행하고 있습니다. ## Posts - [Trino 에 접근제어 붙이기 : Apache Ranger 는 무엇이고 어떻게 동작하는가](https://www.kimsehwan96.com/trino-access-control-with-apache-ranger-1.md) - Trino 에 Apache Ranger 를 붙여 인가 계층을 구성한 기록. Ranger 의 구조와 정책 평가 방식, LDAP UserSync, 그리고 Google Workspace Secure LDAP 조합에서 만난 문제들. - [간헐적인 502 는 어디서 오는가? (feat: NLB draining 과 istio 의 terminationDrainDuration)](https://www.kimsehwan96.com/intermittent-502-nlb-istio-draining.md) - 클라이언트는 502 를 받았는데 백엔드는 정상 처리했다. NLB draining 과 istio 의 terminationDrainDuration 이 만드는 간헐 502 를 실측으로 추적하고 커넥션 수명을 재설계한 기록이다. - [사내 단일 MCP Gateway 도입기 (feat: IBM mcp-context-forge)](https://www.kimsehwan96.com/mcp-context-forge-adoption.md) - IBM mcp-context-forge 로 사내 단일 MCP Gateway 를 구축한 도입기입니다. MCP Federation 패턴, 팀 단위 RBAC 과 OAuth 토큰 위임, 업스트림 기여 과정까지 담았습니다. - [ECR Pull-Through Cache 적용기(feat: Docker Rate Limit 을 피해서)](https://www.kimsehwan96.com/ecr-pull-through-cache.md) - Docker Hub Rate Limit 강화에 대응해 ECR Pull-Through Cache 를 적용한 기록입니다. NAT IP 고정에 스케일 아웃이 잦은 EKS 환경에서의 설정 과정과 주의점을 다룹니다. - [EMR on EKS 환경에서 spark driver 와 executor 가 같은 AZ 에 스케쥴링 되도록 하는 방법 (가용성까지 확보하면서)](https://www.kimsehwan96.com/emr-on-eks-spark-driver-and-executor-same-az.md) - EMR on EKS 에서 Spark driver 와 executor 를 같은 AZ 에 스케줄링해 AZ 간 통신 비용을 줄이는 방법입니다. 가용성을 잃지 않으면서 적용한 설정을 공유합니다. - [Airflow 무중단 이전](https://www.kimsehwan96.com/airflow-mujungdan-ijeon.md) - EKS 버전 업그레이드 과정에서 Airflow 를 새 클러스터로 무중단 이전한 경험을 공유합니다. Scheduler·Webserver·Worker 컴포넌트별 역할 분석과 이전 전략을 담았습니다. - [S3 다운로드 작업시 동기, 비동기, 멀티스레드, 멀티프로세스 성능 비교 (python)](https://www.kimsehwan96.com/s3-donwload-sync-async-thread-process-perfomance-comparision.md) - 수천~수만 개 S3 파일 다운로드를 두고 python 동기, 비동기, 멀티스레드, 멀티프로세스 성능을 직접 비교했습니다. 30Gbps 인스턴스에서도 250MB/s 에 그친 원인을 추적합니다. - [Istio Sidecar 설정을 통한 Pod 의 egress 제어](https://www.kimsehwan96.com/istio-sidecar-egress-control.md) - Istio 의 Sidecar 리소스로 파드의 egress 트래픽을 제어해 지정한 서비스만 호출하도록 제한하는 방법입니다. Network Policy 와의 차이도 비교합니다. - [kubelet "서버" 를 위한 인증서 (kubelet.crt, kubelet.key) (feat: Metrics-Server TLS 인증서 오류 조치)](https://www.kimsehwan96.com/kubelet-server-certificates.md) - kubelet 이 클라이언트가 아닌 '서버'로서 사용하는 인증서(kubelet.crt)를 알아봅니다. Metrics-Server TLS 인증서 오류의 원인과 해결 방법도 함께 다룹니다. - [kubeadm 은 CoreDNS 를 어떻게 설치할까요? 파드는 서비스 도메인을 어떻게 처리할까요? 그리고 설정은 어떻게 할까요? (feat: NodeLocal DNSCache)](https://www.kimsehwan96.com/core-dns-with-kubeadm.md) - kubeadm 이 CoreDNS 를 설치하는 과정과 파드가 서비스 도메인을 해석하는 원리를 파헤칩니다. resolv.conf 설정과 NodeLocal DNSCache 까지 함께 다룹니다. - [kubelet 이 원하는 커널 파라미터](https://www.kimsehwan96.com/kubelet-expected-kernel-parameters.md) - Kubelet 은 실행하는 머신의 커널 파라미터가 특정 값이 제대로 설정되어있지 않다면 동작하지 않고 오류가 발생하게 됩니다. 이 때 kubelet에 --protect-kernel-defaults=false 라는 실행 인자를 념겨주면 정상 동작을 하게 됩니다. 이런 단순한 오류 해결을 넘어서 실제로 kubelet 은 어떤 커널 파라미터가 세팅되어있기를 원하는지, 그리고 어떤 코드에서 그런 내용을 볼 수 있는지 등에 대해서 다루는 글입니다. - [Raft 알고리즘 알아보기](https://www.kimsehwan96.com/raft-consensus-algorithm.md) - etcd 의 근간인 Raft 합의 알고리즘을 논문 번역과 함께 정리했습니다. 리더 선출과 로그 복제 과정을 Raftscope 시각화로 따라가며 이해할 수 있게 구성했습니다. - [etcd 의 snapshot 과 WAL이 무엇일까요? (etcd backup snapshot이 아닌)](https://www.kimsehwan96.com/etcd-snapshot-and-wal.md) - etcd 의 snapshot 그리고 WAL 에 대해서 알아봅니다. etcd 는 raft 합의 알고리즘을 기반으로 구현된 key-values 저장소로. raft 알고리즘에서 snapshot 에 대한 내용이 존재합니다. 그것을 etcd 는 어떻게 구현했는지 알아봅니다. (etcdctl snapshot save 를 통해 생성하는 스냅샷과는 조금은 다른 내용입니다) - [RR DNS 를 통한 kube-apiserver 앞단의 LB 대체 테스트](https://www.kimsehwan96.com/can-rr-dns-replace-load-balancer-in-front-of-kube-apiserver.md) - 이 글에서는 Round Robin DNS 를 통해 HA k8s 클러스터 앞단의 kube-apiserver를 위한 로드밸런서를 대체 할 수 있는지 테스트를 해보는 글입니다. 결론부터 이야기 하면 어느정도는 가능하다입니다. DNS 로는 Route53 을 사용하고, 상태검사등의 기능까지 사용해서 어느정도 구현이 가능합니다. - [K8s 오퍼레이터](https://www.kimsehwan96.com/k8s-operator.md) - 쿠버네티스 오퍼레이터가 무엇인지에 대해서 알아봅니다. 우선 오퍼레이터라는 말 자체는 소프트웨어 디자인 패턴에서 나오는 하나의 용어로 이해를 하면 됩니다. 오퍼레이터 패턴이란 운영 노하우, 도메인 지식등을 갖고있는 운영자의 역할을 소프트웨어에 새긴 개념으로 볼 수 있습니다. 쿠버네티스의 오퍼레이터도 그런 관점에서 동일한 컨셉을 갖고 있습니다. - [How to increase pod number limit in eks (with terraform-aws-modules)](https://www.kimsehwan96.com/how-to-increase-eks-pod-number-limit-with-eks-terraform-module.md) - This article shows how can we increase the limit of pod number in eks cluster by adding some environment variable in terraform-aws-modules. - [Secrets of Running Etcd (번역)](https://www.kimsehwan96.com/secrets-of-running-etcd-korean-translation.md) - 2023 북미 KubeCon 에서 etcd 메인테이너가 발표한 자료를 번역한 글입니다. etcd 를 사용하면서 고려해야 할 점에 대해 자세히 다루고 있습니다. 특히 Kubernetes Event 리소스를 별도의 etcd 클러스터에 저장하는 내용과, Compaction / Defragmentation 자동화 과정에서 권장되는 내용등도 포함되어있습니다. - [gRPC transcoder in Istio 테스트](https://www.kimsehwan96.com/grpc-transcoder-in-istio.md) - Envoy 가 아닌 Istio 레벨에서 gRPC transcoder 를 설정해 HTTP/JSON 호출을 gRPC 로 변환하는 예제입니다. 하나의 서버로 gRPC 와 REST 엔드포인트를 동시에 제공합니다. - [etcd 의 WAL 이 무엇인가요?](https://www.kimsehwan96.com/etcd-wal.md) - etcd 의 WAL(Write Ahead Log)이 무엇인지 알아봅니다. 세그먼트 파일 구조와 이름 규칙, Raft 상태 저장 방식, 데이터 무결성을 보장하는 원리를 정리했습니다. - [K8s logging](https://www.kimsehwan96.com/k8s-logging.md) - Kubernetes 클러스터의 각종 컴포넌트, 그리고 클러스터내 파드등 모든 관련된 구성요소에 대한 로깅과 관련된 정보를 정리한 글입니다. 쿠버네티스 공식 문서의 로깅 아키텍처 글을 토대로 실제 사용 가능한 소프트웨어의 예시와 매칭시켜서 정리하였습니다. - [ArgoCD 란 무엇이고 무엇을 하는가? (with 공식 도큐먼트)](https://www.kimsehwan96.com/what-is-argocd.md) - ArgoCD 가 무엇인지 ArgoCD 공식 문서를 토대로 간단하게 정리한 글입니다. 그와 더불어서 ArgoCD 의 Application 원천으로 사용 가능한 Helm, Kustomize, Plane Kubernetes Manifests 가 무엇인지 설명하고, 그와 더불어서 ArgoCD가 이야기하는 베스트 프렉티스, App of Apps 에 대한 이야기도 간략하게 다룹니다. - [kube-apiserver 와 etcd 는 어떻게 통신하는가?](https://www.kimsehwan96.com/how-to-communicate-between-kube-apiserver-etcd-each-other.md) - kube-apiserver 의 백엔드 스토리지이자, kubernetes 의 백엔드 스토리지인 etcd 에 대해서 kube-apiserver 가 어떻게 etcd 클러스터에 요청을 보내고 그 부하 분산을 어떻게 하는지 실제 kube-apiserver 및 etcd 클라이언트 분석을 토대로 정리한 글입니다. kube-apiserver 는 etcd v3 client 를 추상화한 별도의 계층을 사용해서 etcd 클러스터에 라운드로빈 형태로 트래픽을 분산해서 요청합니다. 이것은 gRPC 클라이언트 사이드 로드밸런싱과도 관련이 있는 내용입니다. - [ARM64 Mac UTM 에서 x86_64 가상머신 실행](https://www.kimsehwan96.com/how-to-run-x86-64-virtualmachine-in-arm64-mac-with-utm.md) - ARM64 맥(M1, M2, M3) 환경에서 UTM 을 사용해서 x86_64 가상머신을 실행하는 방법을 간단하게 설명한 글입니다. UTM 을 통해 ARM 가상머신을 사용하는 예시는 많지만, x86_64 환경의 가상머신을 사용하는 예시는 많지 않아 직접 테스트해보고 작성하였습니다. - [Keel 을 이용한 컨테이너 이미지 태그 업데이트 자동 감지 및 쿠버네티스 파드 재배포 자동화](https://www.kimsehwan96.com/keel-operator.md) - 쿠버네티스 오퍼레이터 Keel 로 컨테이너 이미지 태그 업데이트를 자동 감지하고 파드를 자동 재배포하는 방법을 소개합니다. Helm, Deployment 연동 설정 예제를 담았습니다. - [kube-apiserver 를 컨트롤 플레인 외부에 설치해서 사용하기](https://www.kimsehwan96.com/use-kube-apiserver-in-outside-of-control-plane-for-kube-apiserver-dedicated-node.md) - Kube-apiserver 를 컨트롤플레인 외부에 설치해서 사용할 수 도 있다는 내용을 openai 의 기술블로그를 통해 영감을 얻고 직접 테스트해본 글입니다. Dedicated Node(전용 노드) 에서 kube-apiserver 를 사용하는 상황에서 유용하게 쓰일 방법입니다. 프로덕션에서 사용하기에는 적절하지 않은 테스트이지만 그럼에도 PoC (개념검증) 수준에서 실제 코드, 설정, 인증서를 수정해가면서 직접 테스트 가능하도록 작성한 글입니다. - [Istio 란 무엇이고, 무엇을 할 수 있을까?](https://www.kimsehwan96.com/what-is-istio-and-service-mesh.md) - Istio 가 무엇인지, 서비스 메시가 무엇인지 간단한 설명과 예제를 소개합니다. 그와 더불어서 다양한 기능에 대한 예제도 포함되어있습니다. - [eBPF 에 대해 알아보자 (1)](https://www.kimsehwan96.com/what-is-ebpf-1.md) - eBPF 가 무엇인지 간단하게 설명하고 BCC 를 기반으로 한 간단한 예시까지 테스트해보는 글입니다. 앞으로 더 작성할 eBPF 에 대한 내용중 첫번째 글이며 개념과 관련된 간단한 부분만 정리한 글입니다. - [가상머신과 컨테이너의 비교](https://www.kimsehwan96.com/virtual-machine-vs-container.md) - 가상머신과 컨테이너를 자세히 비교해봅니다. - [안녕하세요](https://www.kimsehwan96.com/annyeonghaseyo.md) - 0219 ## Optional - [RSS Feed](https://www.kimsehwan96.com/rss/) - [Sitemap](https://www.kimsehwan96.com/sitemap.xml) - [Full content of pages and posts](https://www.kimsehwan96.com/llms-full.txt)