Daniel Kim 의 기술 블로그

4년차 DevOps 엔지니어의 기록

S3 다운로드 작업시 동기, 비동기, 멀티스레드, 멀티프로세스 성능 비교 (python)
S3 Featured

S3 다운로드 작업시 동기, 비동기, 멀티스레드, 멀티프로세스 성능 비교 (python)

최근 많은 파일들 (버킷 자체로 따지면 천만개 이상, Prefix 나 날짜별로 분리해도 수천~수만 이상)들을 다운로드받고 그것을 tar.gz 으로 아카이브 및 압축을 해서 특정 버킷에 glacier 클래스로 밀어넣어야 하는 요구사항을 처리하게 되었다. 이 때 파일을 다운로드 받아야 아카이브 및 압축을 할 수 있기 때문에 처음에는 aws cli 를
14 min read
Istio Sidecar 설정을 통한 Pod 의 egress 제어
Istio Featured

Istio Sidecar 설정을 통한 Pod 의 egress 제어

💡Istio 의 Sidecar 설정을 통해 각 워크로드에 붙어있는 사이드카 프록시의 구성 설정을 변경 할 수 있습니다. 이 포스트에서는 이 설정을 통해 특정 서비스가, 지정된 서비스만 호출 할 수 있도록 제어하는 방법을 소개합니다. Network Policy 기본적으로 쿠버네티스에서 파드 - 파드 , 파드 - 서비스 등의 모든 통신은 기본적으로 허용이 되어있다. 이 때
10 min read
kubelet "서버" 를 위한 인증서 (kubelet.crt, kubelet.key) (feat: Metrics-Server TLS 인증서 오류 조치)
Kubelet Featured

kubelet "서버" 를 위한 인증서 (kubelet.crt, kubelet.key) (feat: Metrics-Server TLS 인증서 오류 조치)

Kubelet 은 kube-apiserver 를 호출하는 그저 클라이언트 아니였나요? kubelet 은 컨트롤플레인 노드, 워커 노드 관계없이 쿠버네티스의 노드라면 무조건 실행되어야 하는 컴포넌트로, 컨테이너 런타임과 통신하여 컨테이너를 실행하고 관리하는데 이는 static pod 뿐 아니라 API 서버로부터 받은 PodSpec 에 기반해서 컨테이너를 실행하기도 합니다. 이 kubelet 은 기본적으로 kube-apiserver 를 호출하여 노드의 상태를
16 min read
kubeadm 은 CoreDNS 를 어떻게 설치할까요? 파드는 서비스 도메인을 어떻게 처리할까요? 그리고 설정은 어떻게 할까요? (feat: NodeLocal DNSCache)
kubeadm Featured

kubeadm 은 CoreDNS 를 어떻게 설치할까요? 파드는 서비스 도메인을 어떻게 처리할까요? 그리고 설정은 어떻게 할까요? (feat: NodeLocal DNSCache)

💡CoreDNS 는 쿠버네티스 “서비스 디스커버리”를 위한 핵심 애드온입니다. kubeadm 에서는 CoreDNS , kube-proxy 두가지의 애드온을 설치합니다. 만약 바닐라 쿠버네티스 클러스터를 프로비저닝 하고 있다면 이러한 애드온은 수동으로 설치해야 합니다. 들어가며 Kubeadm 의 경우 CoreDNS 및 kube-proxy 를 addon 으로 부르며, 클러스터 프로비저닝 시점에서 자동으로 설치합니다. Kubeadm 을 wrapping 한 Kubespray 또한
17 min read
kubelet 이 원하는 커널 파라미터
Kubelet Featured

kubelet 이 원하는 커널 파라미터

Kubelet 은 실행하는 머신의 커널 파라미터가 특정 값이 제대로 설정되어있지 않다면 동작하지 않고 오류가 발생하게 됩니다. 이 때 kubelet에 --protect-kernel-defaults=false 라는 실행 인자를 념겨주면 정상 동작을 하게 됩니다. 이런 단순한 오류 해결을 넘어서 실제로 kubelet 은 어떤 커널 파라미터가 세팅되어있기를 원하는지, 그리고 어떤 코드에서 그런 내용을 볼 수 있는지 등에 대해서 다루는 글입니다.
13 min read
Raft 알고리즘 알아보기
Raft Featured

Raft 알고리즘 알아보기

💡온프레미스 쿠버네티스 클러스터를 구축하기 위해 준비하면서 etcd에 대해서 자세히 알아보고자 etcd 의 근간이 되는 Raft 합의 알고리즘을 자세하게 알아보게 되었습니다. 전반적으로 Raft 알고리즘 문서를 번역하고 그것을 조금 더 쉽게 풀어내기 위해서 Raftscope 라는 Raft 알고리즘 시각화 오픈소스를 통해 실제 동작을 보기쉽도록 내용을 추가하였습니다. Raft 알고리즘 논문 : https://raft.github.io/
66 min read
etcd 의 snapshot 과 WAL이 무엇일까요? (etcd backup snapshot이 아닌)
etcd Featured

etcd 의 snapshot 과 WAL이 무엇일까요? (etcd backup snapshot이 아닌)

etcd 의 snapshot 그리고 WAL 에 대해서 알아봅니다. etcd 는 raft 합의 알고리즘을 기반으로 구현된 key-values 저장소로. raft 알고리즘에서 snapshot 에 대한 내용이 존재합니다. 그것을 etcd 는 어떻게 구현했는지 알아봅니다. (etcdctl snapshot save 를 통해 생성하는 스냅샷과는 조금은 다른 내용입니다)
9 min read
K8s 오퍼레이터
Kubernetes

K8s 오퍼레이터

쿠버네티스 오퍼레이터가 무엇인지에 대해서 알아봅니다. 우선 오퍼레이터라는 말 자체는 소프트웨어 디자인 패턴에서 나오는 하나의 용어로 이해를 하면 됩니다. 오퍼레이터 패턴이란 운영 노하우, 도메인 지식등을 갖고있는 운영자의 역할을 소프트웨어에 새긴 개념으로 볼 수 있습니다. 쿠버네티스의 오퍼레이터도 그런 관점에서 동일한 컨셉을 갖고 있습니다.
8 min read
gRPC transcoder in Istio 테스트
Istio

gRPC transcoder in Istio 테스트

💡gRPC transcoder 를 envoy가 아닌 istio 레벨에서 사용해보는 예제입니다. gRPC transcoder 는 gRPC 서버에서 기존 RESTful API 혹은 HTTP API라고 불리는 json 기반의 API 호출을 gRPC로 변환해주는 일종의 프록시라고 할 수 있습니다. 이것을 통해 우리는 gRPC 엔드포인트와 HTTP 엔드포인트를 동시에 제공 할 수 있습니다. 테스트 코드들 GitHub - kimsehwan96/gRPC-python-example
11 min read
etcd 의 WAL 이 무엇인가요?
etcd

etcd 의 WAL 이 무엇인가요?

💡WAL (Write Ahead Log)는 etcd 가 데이터베이스에 적용되기 전에 모든 변경 사항을 기록하는 곳으로, 미리 쓰기 라는 측면에서 반영될 작업이 미리 기록되어 데이터 무결성과 시스템 일관성을 보장한다는것을 의미합니다. 각 파일은 WAL 의 세그먼트를 의미하고, 이 파일은 etcd 클러스터의 트랜잭션 스냅샷을 캡처해서, 필요한 경우 etcd 상태를 재 구축하는데 사용 할
5 min read
kube-apiserver 와 etcd 는 어떻게 통신하는가?
ControlPlane Featured

kube-apiserver 와 etcd 는 어떻게 통신하는가?

kube-apiserver 의 백엔드 스토리지이자, kubernetes 의 백엔드 스토리지인 etcd 에 대해서 kube-apiserver 가 어떻게 etcd 클러스터에 요청을 보내고 그 부하 분산을 어떻게 하는지 실제 kube-apiserver 및 etcd 클라이언트 분석을 토대로 정리한 글입니다. kube-apiserver 는 etcd v3 client 를 추상화한 별도의 계층을 사용해서 etcd 클러스터에 라운드로빈 형태로 트래픽을 분산해서 요청합니다. 이것은 gRPC 클라이언트 사이드 로드밸런싱과도 관련이 있는 내용입니다.
14 min read
Keel 을 이용한 컨테이너 이미지 태그 업데이트 자동 감지 및 쿠버네티스 파드 재배포 자동화
K8s Featured

Keel 을 이용한 컨테이너 이미지 태그 업데이트 자동 감지 및 쿠버네티스 파드 재배포 자동화

Keel ? Keel 은 Helm, DaemonSet, StatefulSet, Deployment 를 통해 생성된 파드의 컨테이너 이미지 업데이트를 자동화하는 쿠버네티스 오퍼레이터입니다. GitHub - keel-hq/keel: Kubernetes Operator to automate Helm, DaemonSet, StatefulSet & Deployment updatesKubernetes Operator to automate Helm, DaemonSet, StatefulSet & Deployment updates - keel-hq/keelGitHubkeel-hqKeelKubernetes Operator to automate Helm, DaemonSet, StatefulSet &
5 min read
kube-apiserver 를 컨트롤 플레인 외부에 설치해서 사용하기
K8s Featured

kube-apiserver 를 컨트롤 플레인 외부에 설치해서 사용하기

Kube-apiserver 를 컨트롤플레인 외부에 설치해서 사용할 수 도 있다는 내용을 openai 의 기술블로그를 통해 영감을 얻고 직접 테스트해본 글입니다. Dedicated Node(전용 노드) 에서 kube-apiserver 를 사용하는 상황에서 유용하게 쓰일 방법입니다. 프로덕션에서 사용하기에는 적절하지 않은 테스트이지만 그럼에도 PoC (개념검증) 수준에서 실제 코드, 설정, 인증서를 수정해가면서 직접 테스트 가능하도록 작성한 글입니다.
10 min read