[Kubernetes] Service 이름이 만든 환경 변수와 앱 설정 변수 충돌 트러블슈팅
매니페스트에 적지도 않은 설정 변수를 kubelet이 채워 넣어 앱이 기동에 실패한 사례를 통해, 서비스 링크 환경 변수가 어떻게 만들어지고 끄면 무엇이 남는지 알아 보자.
매니페스트에 적지도 않은 설정 변수를 kubelet이 채워 넣어 앱이 기동에 실패한 사례를 통해, 서비스 링크 환경 변수가 어떻게 만들어지고 끄면 무엇이 남는지 알아 보자.
클러스터에서 노드를 빼는 작업 중 Node 객체와 호스트 상태가 어긋난 세 사례를 보고, 그 뒤에 있는 heartbeat·RKE2 등록·Rancher 구조와 이관 절차를 정리해 보자.
1주차의 kind 클러스터에 Kubeflow Pipelines standalone을 올리고, SeaweedFS·MLflow·Jupyter를 연결해 MLflow·Feast·KFP 실습이 공유할 환경을 M1 Mac에 구성해 보자.
학습 플랫폼을 운영하는 자리에서 2주차 도구(MLflow, Feast, Kubeflow Pipelines)를 보면 무엇이 보이는지, 비전 AI 데이터의 EDA와 데이터 플라이휠의 빈 구간을 기준으로 생각을 정리해 보자.
Argo CD를 Kustomize로 설치하고 Gitea의 Helm 차트를 동기화해, CI가 올린 이미지 태그가 클러스터 배포로 이어지는 과정을 확인해 보자.
Gitea Actions로 테스트, 이미지 빌드, Helm 차트 갱신을 연결하고, 빈 워크플로와 변수 조회 실패를 로그로 추적해 보자.
Mac IP가 바뀌자 Gitea로의 push가 끊기고, 이를 고치려던 helm upgrade가 멈춘 과정을 주소 설계와 파드 교체 전략으로 정리해 보자.
클러스터에 Gitea와 Actions 러너를 올리고, CI 서버와 러너가 나뉘는 구조와 러너 파드 안 dind의 역할을 해부해 보자.
helm create로 생성한 차트에 hello-joker를 배포하고, values가 이미지와 서비스 포트, 컨테이너와 프로브에 반영되는 과정을 확인해 보자.
kind에서 Service의 세 유형을 적용하고, CoreDNS 설정과 kube-proxy의 iptables 규칙으로 앱에 닿는 요청 경로를 확인해 보자.
hello-joker를 Pod, ReplicaSet, Deployment로 띄워 복제 수 유지와 롤링 업데이트를 관찰하고, port-forward가 파드에 닿는 경로를 확인해 보자.
kind 노드 안에서 kindnet이 만든 veth와 경로를 파드에 연결하고, 리눅스 네임스페이스와 containerd 런타임 계층을 확인해 보자.
kind로 실습 클러스터를 만들고, Mac의 kubectl이 Docker Desktop VM 안 API 서버에 닿는 경로와 인증서를 확인해 보자.
M1 Mac에서 buildx로 amd64와 arm64 이미지를 함께 만들어 Docker Hub에 올리고, manifest list로 결과를 확인해 보자.
GPU 하드웨어 장애와 노드 설정 장애 네 건에서 빠져 있던 단계를 감지부터 편입 게이트까지 나눠 보고, 실제로 만든 자동화와 아직 비어 있는 부분을 정리해 보자.
컨테이너 안에서 켠 관측 도구가 노드 값을 보여 주는 문제를, 다른 도구와 언어 런타임은 어떻게 다뤘는지 찾아보자.
MLflow 원본을 고치지 않고 pod 내 시스템 메트릭 로깅 문제를 해결한 과정에 대해 정리해 보자.
Envoy의 구조와 xDS 동적 설정, ext_proc 확장을 정리하고, llm-d Router가 ext_proc으로 Envoy에 붙는 방식을 살펴 보자.
vLLM Service를 LoadBalancer로 노출했을 때 만들어지는 CLB의 리스너 구조를 확인하고, 추론 요청이 실제로 왕복하는지 검증해 보자.
vLLM Deployment를 init container 패턴으로 올리고, Neuron 컴파일 산출물이 S3 캐시를 거쳐 메인 컨테이너로 전달되는 경로를 확인해 보자.
칩 하나에 리소스가 둘 광고되는 이유를 커널 디바이스 노드와 device plugin 소켓까지 내려가 확인하고, NVIDIA와 갈리는 지점을 정리해 보자.
EKS 컨트롤 플레인만 있는 상태에서 trn1.2xlarge 관리형 노드그룹을 붙이고, 미리 박혀 있던 AMI ID 때문에 막힌 지점을 풀어 보자.
워크샵이 쓰는 Trainium이 어떤 칩인지, Neuron SDK가 어떤 스택인지, NVIDIA 스택과 어디까지 대응되는지 정리해 보자.
EKS와 AWS Trainium 위에 vLLM을 올리는 워크샵의 목적과 클러스터 아키텍처를 살펴보자.
Grafana를 서브패스로 노출하고 Prometheus 데이터소스를 프로비저닝한 뒤, ConfigMap으로 넣은 vLLM 대시보드가 언제 목록에 뜨는지 확인해 보자.
Helm으로 Prometheus를 올려 vLLM의 /metrics를 수집하고, Ingress 서브패스로 웹 UI를 열었을 때 무엇이 함께 바뀌는지 확인해 보자.
ingress-nginx를 올려 URL에서 포트를 떼어내고, CLB가 두 개가 된 구조와 브라우저 인증서 경고가 바뀐 이유를 확인해 보자.
자작 스크립트와 llmperf로 vLLM에 부하를 걸고, 두 도구가 낸 수치를 나란히 놓을 수 있는지 확인해 보자.
노드도 파드도 늘릴 수 없는 환경에서 HPA Lab이 어디까지 가는지, 그리고 CPU 사용률이 추론 워크로드의 스케일 신호가 될 수 있는지 확인해 보자.
학습 플랫폼 SDK에 MLflow 시스템 메트릭 로깅 기능을 추가하며, pod 안에서 어떤 문제가 발생할 수 있는지 알아 보자.