DEVOPS · K8S
쿠버네티스 기본기와 배포 도구 학습 기록. 외부 노출 작업(API Gateway 제거)을 계기로 정리한 시리즈.
Argo CD
- "k8s를 제어하는 컨트롤러" ArgoCD는 웹 UI가 있는 툴처럼 보이지만, 기술적으로는 K8s Custom Controller이다. - CRD(Custom Resource Definition): K8s에는 기본적으로 Pod, Deployment같은 리소스가 있다. - ArgoCD를 설치하면 Application과 AppProject라는 새로운 리소스...
Deployment와 Pod
- 계속해서, ArgoCD를 하향식으로 학습해 나가본다. - 다음으로는 Deployment(전략) -> ReplicaSet(관리) -> Pod(실체) 순서로 내려가게 된다. - 백엔드 개발자에게 익숙한 개념으로 비유해보자. - Deployment : 배포 전략서 (Blue/Green을 할지, Rolling을 할지, 버전은 뭔지) - ReplicaSet :...
Helm — 쿠버네티스 YAML의 패키지 매니저이자 템플릿 엔진
- k8s의 Gradle. - Gradle이 .jar 파일을 관리한다면, Helm은 k8s YAML 파일 뭉치(Chart)를 관리한다. - 개발자 입장에서 Helm이 해결해 주는 핵심은 하드코딩 제거(템플릿)와 재사용성(패키지)이다. GitOps(ArgoCD)와 함께 쓰는 실전 흐름은 Helm과 ArgoCD로 GitOps 하기에 따로 정리했고, 이 글은 H...
Helm과 ArgoCD로 GitOps 하기 — chart, Application, 그리고 새 컴포넌트 추가 흐름
쿠버네티스에 새 컴포넌트(ingress controller 하나)를 추가하는 작업을 맡고 나서야, 그동안 "어딘가에서 알아서 배포되던" 그 과정의 구조를 처음 들여다봤다. Helm 차트가 뭐고, ArgoCD가 뭘 하고, Application이라는 게 왜 또 따로 있는지. 막상 정리해보니 큰 그림은 단순했다. 그 구조와, 실제로 새 컴포넌트를 추가하려면 어디...
ingress-nginx 운영에서 부딪힌 디테일들 — webhook, whitelist, affinity, 리소스 사양
ingress controller를 하나 추가하는 작업은 "차트 만들고 배포하면 끝"일 줄 알았다. 그런데 실제로는 그 과정에서 처음 보는 개념들에 계속 걸렸다. annotation으로 설정을 관리하는 방식, admission webhook이 만드는 self-lock 위험, whitelist, Pod 분산 배치, 그리고 리소스 사양까지. 하나하나는 작지만,...
Kubernetes 공부 시작
컨테이너 : 어떤 애플리케이션을 어디서 돌리든 동일하게 돌도록 만드는 격리된 실행 환경 - 1. 컨테이너의 핵심 특징 - 이미지(Image): 실행 환경 + 코드 + 라이브러리가 통째로 들어있는 스냅샷 - (예) openjdk:17-alpine + jar파일 - 컨테이너 : 이미지를 실행한 상태 (프로세스) - 불변성 : 한 번 빌드한 이미지는 어떤 서버에...
관리형 클러스터는 누구의 권한으로 클라우드를 만지는가 — trust 단절과 service user 전환
> 선언한 LoadBalancer가 안 만들어질 때의 후속 편이다. 그 글에서 "클러스터 내부 인증 경로가 죽었다"까지 격리해 놓고 플랫폼 문의로 넘겼는데, 답이 왔고 원인은 예상보다 훨씬 사람 냄새 나는 것이었다. 클러스터를 만든 사람의 권한이 사라져 있었다. 관리형 쿠버네티스에서 LB 발급, 볼륨 생성, 클러스터 업그레이드가 몇 달에 걸쳐 하나씩 죽어...
선언한 LoadBalancer가 안 만들어질 때 — cloud-controller-manager 장애 격리 진단기
> 외부 트래픽은 어떻게 Pod까지 닿는가를 먼저 읽으면 좋다. 그 글이 "LoadBalancer 타입 Service를 선언하면 클라우드가 LB를 만들어준다"까지 다뤘다면, 이 글은 선언했는데 안 만들어질 때 어디서부터 파고드는지를 다룬다. 공인 진입점 전환 작업에서 외부 전용 ingress-nginx controller를 배포했다. controller P...
외부 트래픽은 어떻게 Pod까지 닿는가 — LoadBalancer, Ingress Controller, 내부와 외부 분리
회사에서 "API Gateway를 걷어내고, 쿠버네티스 앞에 LoadBalancer를 직접 붙여서 외부로 노출하자"는 작업을 맡게 됐다. 그런데 막상 들여다보니 나는 Ingress가 뭔지도 제대로 몰랐다. "외부 요청이 들어와서 서버가 응답한다" 정도로만 알고 있었지, 그 사이에 LoadBalancer니 Ingress Controller니 하는 것들이 몇...
쿠버네티스 핵심 객체 4종 — Pod, Service, Ingress, Namespace의 관계
쿠버네티스에서 외부 노출 작업을 하다가, Pod니 Service니 Ingress니 하는 단어들이 머릿속에서 자꾸 섞였다. 각각 뉘앙스는 알겠는데 "그래서 이것들이 서로 어떤 관계냐"가 안 잡혔다. 그래서 이 네 가지를 한 번에 정리하기로 했다. 이 네 개의 관계만 잡으면 쿠버네티스의 절반은 이해한 거라고 봐도 된다. 한 문장으로 시작하면 빠르다 — Pod는...