블로그
전체 4#태그
- 인프런
- 워밍업
- 데브옵스
2025. 06. 19.
1
워밍업 클럽 데브옵스 4기 - 발자국 4주차
이번에 Helm, Kustomize,ArgoCD를 공부하면서 쿠버네티스 배포 자동화에 대한 전반적인 흐름을 이해할 수 있었다. 단순히 매니페스트 파일을 작성해서 kubectl apply만 하던 수준에서 벗어나, 어떻게 효율적으로 구성하고 관리하며, 자동으로 릴리즈까지 이어지게 만들 수 있을까에 대해 고민해볼 수 있는 좋은 시간이었다. 우선 Helm과 Kustomize를 비교하면서 각각의 장단점이 뚜렷하다는 걸 느꼈다. Helm은 생태계가 크고 재사용성이 높아서 기업 환경에 적합하다는 걸 알게 되었고, 반면 Kustomize는 단순하고 직관적이라 MVP나 테스트 단계에서는 빠르게 적용할 수 있다는 점이 인상적이었다. 나 같은 초보자 입장에선 Kustomize가 진입 장벽이 낮아 시작하기 좋았지만, 규모가 커질수록 Helm이 필요하겠다는 판단이 들었다. ArgoCD는 지금까지 써봤던 배포 툴 중에 가장 체계적이고, GitOps라는 개념을 잘 이해하는 데 도움이 됐다. 특히 자동 동기화, Rollout 전략 설정, Image 업데이트 자동화 등 하나하나가 실무에 적용 가능한 기능들이라 흥미롭게 공부할 수 있었다. UI도 직관적이라 배포 현황을 한눈에 파악할 수 있는 점도 좋았다. 어려웠던 건 아무래도 Helm의 템플릿 문법이다. Go 텍스트 함수라든지, values.yaml 구조를 처음 볼 땐 복잡하게 느껴졌다. 그리고 Rollout 전략 설정하면서 setWeight, pause, AnalysisTemplate 같은 키워드들을 실제로 어떻게 적용해야 할지 처음엔 좀 막막했다. 하지만 예제를 하나씩 따라해보면서 감을 잡았고, 앞으로 직접 적용해보면서 더 익숙해질 수 있을 것 같다.이번 과정을 통해 단순한 배포 자동화를 넘어서, 안정적이고 반복 가능한 배포 시스템을 설계하는 법에 대해 고민하게 되었고, 이를 나만의 프로젝트에도 적용해보면서 진짜 실력을 쌓고 싶다는 생각이 들었다.
2025. 06. 15.
1
인프런 워밍업 클럽 4기 -데브옵스 3주차 발자국
이번에 Jenkins 파이프라인이랑 Helm 강의를 들었는데, 생각보다 재밌었다.처음엔 Jenkins가 뭔가 복잡하고 무거운 느낌이었는데, 파이프라인으로 하나씩 단계를 나눠서 구성해보니까 구조가 좀 보이더라.빌드, 테스트, 배포 과정을 코드로 표현할 수 있다는 게 신기했고, Blue/Green 방식은 개념도 명확해서 기억에 잘 남았다. Helm은 이전에도 이름만 들어봤는데, 실제로 템플릿을 써보니까 왜 쓰는지 이해가 됐다.특히 변수 처리나 값 주입하는 방식이 마음에 들었고, chart.yaml 구조도 생각보다 단순해서 거부감은 없었다.Kustomize랑 비교하면서 정리해보는 것도 좋았고, Helm이 패키징 개념이 있다는 게 인상 깊었다. 정리하자면, Jenkins는 파이프라인 흐름을 직접 짜보면서 익숙해졌고, Helm은 쿠버네티스 리소스를 더 깔끔하게 관리할 수 있는 툴이라는 걸 배웠다.막연했던 도구들이 하나씩 개념이 잡혀가는 기분이라 뿌듯했다.
2025. 06. 08.
1
인프런 워밍업 - 데브옵스 발자국 2주차
Application 기능으로 k8s 이해 - Probe애플리케이션이 “정상적으로 살아있는지” 또는 “요청 받을 준비가 되었는지”를 판단하기 위한 기능이다. Kubernetes는 이를 통해 비정상 Pod를 재시작하거나, 로드밸런서 대상에서 제외할 수 있다. livenessProbe: 컨테이너가 죽었는지 확인. 실패 시 재시작됨.readinessProbe: 트래픽을 받을 준비가 되었는지 확인. 실패 시 Service 연결에서 제외됨.startupProbe: 애플리케이션이 느릴 경우, 시작을 충분히 기다려주는 용도.readinessProbe: httpGet: path: /redinessprobe port: 8080Application 기능으로 k8s 이해 - Configmap, Secret애플리케이션 설정 값을 코드와 분리하여 외부에서 주입할 수 있게 해주는 Kubernetes 리소스. ConfigMap: 일반적인 설정값, 파일 내용 등을 담을 수 있음.Secret: base64 인코딩된 민감 정보 저장용. (실제 보안 기능은 별도 필요)envFrom: - configMapRef: name: app-config✔ ConfigMap을 volumeMount로 마운트해 설정 파일로도 사용하고,✔ Secret은 database 접속 정보 등을 안전하게 주입하는 데 사용했다. 실습 중에는 base64 인코딩/디코딩을 직접 해보며 Secret이 평문 저장이 아님을 확인함.Application 기능으로 k8s 이해 - PV/PVC, Deployment, Service, HPA ✅ PV & PVCPersistentVolume(PV): 클러스터의 실제 스토리지 정보를 정의.PersistentVolumeClaim(PVC): Pod가 요청하는 스토리지 사용량, 접근 모드 등을 정의.Pod가 재시작되어도 데이터를 유지할 수 있는 구조 실습 진행.volumeMounts: - name: app-data mountPath: /data volumes: - name: app-data persistentVolumeClaim: claimName: data-pvc ✅ Deployment애플리케이션 배포와 업데이트를 자동으로 관리하는 컨트롤러replicas, rollingUpdate, revisionHistoryLimit 등 다양한 옵션 사용 ✅ Service내부 Pod들을 묶고, 클러스터 내외에서 접근할 수 있는 정적 접근 포인트를 제공ClusterIP, NodePort, LoadBalancer 등을 실습 ✅ HPA (HorizontalPodAutoscaler)CPU 또는 Memory 사용률에 따라 자동으로 Pod 개수 조절실습 중에는 metrics-server 설치 여부와 cpu.requests 설정이 없으면 작동하지 않음을 경험 Component 동작으로 k8s 이해 🔸 1. 전체 개요 – kubectl에서 시작되는 Kubernetes 전체 흐름Kubernetes는 사용자가 작성한 YAML 파일을 kubectl CLI를 통해 kube-apiserver에 전달하는 것으로 시작된다. kubectl apply -f로 명령을 실행하면 → kube-apiserver는 해당 요청을 받아 etcd에 저장etcd: 모든 Kubernetes 리소스 상태를 저장하는 Key-Value DB이후 kube-controller-manager와 kube-scheduler가 이 정보를 읽고, 실행 환경을 조율한다kubelet은 각 노드에서 API 서버로부터 Pod 생성 요청을 받아, 실제 container runtime(예: containerd)을 통해 컨테이너를 실행시킨다kube-proxy는 네트워크 통신을 관리하며, 서비스 IP/포트로 들어오는 요청을 올바른 Pod로 전달 모든 구성 요소는 kube-apiserver를 중심으로 유기적으로 연결되어 있으며, 명령 흐름은 “CLI → API 서버 → etcd → 컨트롤러/스케줄러 → 노드”로 이어진다. 🔸 2. Pod 생성 및 Probe 동작 과정Pod 생성은 다음과 같은 과정을 통해 진행된다:사용자가 Deployment 또는 직접 Pod를 생성하면 kube-apiserver로 요청됨kube-controller-manager는 ReplicaSet, Pod 등의 리소스를 실제로 생성kube-scheduler는 생성된 Pod를 실행시킬 적절한 노드를 선택선택된 노드의 kubelet은 API 서버로부터 명령을 받아 container runtime에 컨테이너 생성 요청생성된 컨테이너에 대해 probe(liveness, readiness 등)를 주기적으로 확인하여 정상 상태 여부를 판단 이 과정을 통해 쿠버네티스는 단순히 Pod를 띄우는 것이 아니라, 자동 감시 및 자가 치유(Self-Healing) 기능까지 포함한 전체 생명주기 관리가 가능해진다. 🔸 3. Service 동작 과정Service는 클러스터 내 Pod 집합에 대한 안정적인 접근 경로를 제공한다.사용자가 Service 객체를 생성하면 → kube-apiserver를 통해 etcd에 저장kube-proxy는 각 노드에서 이를 감지하고 iptables 또는 IPVS를 업데이트하여 네트워크 라우팅 설정외부 사용자 또는 클러스터 내에서 http://service-name:PORT 으로 요청 시, 해당 요청은 iptables를 통해 올바른 Pod로 전달됨 NodePort 타입이면, 외부 IP와 매핑된 포트를 통해 클러스터 외부에서도 접근 가능 즉, 사용자는 Pod IP를 몰라도 Service 이름만으로 항상 안정적으로 API를 호출할 수 있다. 🔸 4. Secret 동작 과정Secret은 민감한 정보를 쿠버네티스에 저장하고 노출 없이 Pod에 전달하기 위한 리소스이다.Secret은 etcd에 저장되며, base64 인코딩 상태로 관리됨Pod는 volume 형태로 Secret을 마운트받아, 컨테이너 내 특정 경로에 파일로 저장마운트된 파일은 메모리상에 저장되며, kubelet이 주기적으로 Secret의 변경사항을 감지하여 자동으로 업데이트 실습에서는 PostgreSQL 접속 정보를 secret으로 관리하고, /usr/src/myapp/datasource 경로에 마운트하여 애플리케이션에서 사용했다. 🔸 5. HPA(Horizontal Pod Autoscaler) 동작 과정HPA는 CPU/Memory 사용량에 따라 자동으로 Pod 개수를 조절하는 리소스이다.metrics-server가 각 노드의 kubelet으로부터 주기적으로 (10초 간격) CPU/메모리 사용량을 수집kube-controller-manager는 15초 간격으로 HPA 설정을 확인하고, metrics 값을 비교목표치를 초과하거나 미달하면, 스케일링 명령을 API 서버를 통해 전달Deployment의 replicas 수가 변경되고, 새로운 Pod가 생성되거나 삭제됨 실습 중에는 metrics-server가 없거나 Pod readiness가 실패하면 HPA가 작동하지 않는 상황도 경험했다. 이를 통해 HPA가 여러 컴포넌트와 밀접하게 연동된다는 점을 체감할 수 있었다. 미션2:https://velog.io/@khm0930/%EB%AF%B8%EC%85%98미션3:https://velog.io/@khm0930/Application-%EA%B8%B0%EB%8A%A5%EC%9C%BC%EB%A1%9C-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0-Configmap-Secret-%EC%9D%91%EC%9A%A9%EA%B3%BC%EC%A0%9C-%EB%AF%B8%EC%85%983미션4:https://velog.io/@khm0930/Application-%EA%B8%B0%EB%8A%A5%EC%9C%BC%EB%A1%9C-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0-PVCPV-Deployment-Service-HPA-%EB%AF%B8%EC%85%984
인프런
・
워밍업
・
데브옵스
2025. 05. 27.
1
인프런 워밍업 클럽 4기 1주차 (발자국, 미션)
강의 수강컨테이너 한방정리 쿠버네티스 무게감있게 설치하기실무에서 느껴 본 쿠버네티스가 정말 편한 이유Object 그려보며 이해하기컨테이너 한방정리리눅스의 역사, 컨테이너 정의 , 도커의 배경, 쿠버네티스란 무엇인지 알수 있었음쿠버네티스 무게감있게 설치하기설치는 여러번 헀지만 매번 어렵다. 각 테스크별 사용용도를 알았다. 실무에서 느껴 본 쿠버네티스가 정말 편한 이유 프로메테우스, 그라파나, 로키스택 설치 하고 모니터링의 필요성을 체감 했다. Object 그려보며 이해하기deployment,service,configmap,secret,pvc,pv에 대해 배우고 라벨링 중요 , 파드별 네임스페이스로 관리 잘해야할 듯 미션1https://velog.io/@khm0930/%EC%BF%A0%EB%B2%84%EB%84%A4%ED%8B%B0%EC%8A%A4-%EB%AC%B4%EA%B2%8C%EA%B0%90-%EC%9E%88%EA%B2%8C-%EC%84%A4%EC%B9%98%ED%95%98%EA%B8%B0-%EB%AF%B8%EC%85%98112예전에 했을때는 이 내용또한 어려웠는데 현재는 바로바로 이해하고 넘어갈수 있었음https://velog.io/@khm0930/%EC%BF%A0%EB%B2%84%EB%84%A4%ED%8B%B0%EC%8A%A4-%EB%AC%B4%EA%B2%8C%EA%B0%90-%EC%9E%88%EA%B2%8C-%EC%84%A4%EC%B9%98%ED%95%98%EA%B8%B0-%EB%AF%B8%EC%85%98122 kubeadm, kubelet, kubectl 의 기능을 조금 안 정도.. 설치 하고나서 확인할게 많네