GitHub

https://github.com/Choidongjun0830

전체 글 486

객체와 자료 구조의 차이

인터페이스 설계 방식의 차이잘못된 접근 방식public interface Vehicle { double getFuelTankCapacityInGallons(); double getGallonsOfGasoline();}위 인터페이스는 단순히 데이터를 가져오는 getter 메서드만 제공하며, 내부 데이터를 그대로 노출하는 방식이다.public interface Vehicle { double getPercentFuelRemaining();}반면, 이 인터페이스는 내부 데이터를 숨기고, 필요한 정보만 제공하는 방식이다. 내부 구현을 감춘 채 기능을 제공하는 것이 객체지향적인 접근이다.핵심 원칙데이터를 조회/설정하는 함수를 무분별하게 추가하는 것은 피해야 한다.객체는 데이터를 숨기고, 기능을 제공..

공부 2025.03.01

우테코에서의 2주차 WIL

[Facts] 1. 테스트 - AssertJ와 Junit, TDD 2. Stream, Lambda 3. MVC패턴은 관심사의 분리.. 4. 유연함의 힘 [Feelings+Finding] 1. 테스트 프리코스나 최종 코테에서 이미 작성되어 있는 테스트 코드를 살짝씩 바꾸어주는 정도로만 테스트를 작성했는데, 아예 아무런 기반이 없는 상태에서 필요한 테스트를 작성해보며 정확히 알게되었다고는 못하겠지만, 감은 잡을 수 있었습니다. 2. Stream, Lambda 공부할 생각은 안하고, for문이나 if문이 있고, depth가 깊으면 alt+enter를 입력해서 자동으로 변환시키기만 했던 나를 반성했습니다. 반성하며 실습해보고 아주 야무진 방식이라는 것을 알게되었습니다. for문과 if문을 동일한 기능을 하도록 ..

우테코 2025.02.23

Cluster High Availability

마스터 노드가 사라져도 워커 노드는 동작한다. 사용자는 실패할 때까지 앱에 접속할 수 있다.컨테이너나 포드가 고장나면컨테이너나 포드가 ReplicaSet의 일부라면 ReplicaSetController가 새 포드를 로드하라고 지시해야 한다. 하지만, 마스터의 컨트롤러는 사용이 불가능하다. 그래서 컨테이너나 포드를 로드하라고 지시할 수 있는 것과 스케줄링할 수 있 것이 없다. kube-apiserver도 없기 때문에, kubectl도 사용 불가능하다. 그래서 여러개의 마스터 노드를 사용하는 것을 고려해야 한다.  High Availability란 단일 실패 지점을 피하기 위해 모든 구성 요소가 여러개가 있는 것여러개의 마스터 노드가 있는데, 각각의 마스터 노드에 동일한 요청이 가면 안된다. 그래서 로드 밸..

클라우드 2024.12.30

Ingress

k8s에는 기본적으로 Ingress Controller가 없다. 그래서 배포해야하는데, 종류로는 GCE, Nginx, Contour, HAPROXY 등이 있다. Ingress Controller는 Load Balancer가 아니다. 예를 들어 Nginx를 사용하면 새로운 정의나 새로운 Ingress 리소스를 위한 쿠버네티스 클러스터를 모니터링하고 그에 따라 Nginx 서버를 구성한다. 이것을 위해서는 Service Account가 필요하다.Nginx Controller는 쿠버네티스에서 또 다른 Deployment로서 배포된다. 그래서 nginx 이미지를 사용하여 Deployment를 배포하는 것으로 시작한다. err-log-path, keep-alive, ssl-protocols를 ConfigMap에 설..

클라우드 2024.12.30

Operating System Upgrade

유지 보수 목적으로 소프트웨어 기반 업그레이드나 패치 적용, 보안 패치 등을 클러스터에 적용클러스터에서 노드 중 하나가 다운되면?포드는 접근 불가능 포드를 어떻게 배치하느냐에 따라 유저가 영향 받음 포드의 replica가 다운된 노드에만 배치되어 있으면 그 포드는 아예 접근 불가 노드가 5분(디폴트 값) 이상 다운되면 그 노드의 포드들은 종료되고, 다른 노드에서 다시 생겨남. 이후에 노드가 다시 활성화되어도 노드는 비어있다. 다운된 노드가 언제 돌아올지 모르니까 더 안전한 방법은 drain 이후 노드 재부팅. kubectl drain 해당 노드에서 포드는 정상적으로 종료되고, 다른 노드에 재스케줄링 명령. kubectl cordon 현재 노드에 배포된 Pod는 그대로 유지하면서, 추가적인 Pod의 배포를..

클라우드 2024.12.18

Monitor Kubernetes Cluster

Node level Metrics클러스터내 노드의 개수Healthy 노드의 개수성능 지표 (CPU, 메모리)네트워크디스크 활용도...Pod level metrics포드 개수각 포드의 성능 지표...이런 Metrics에 대한 분ㄴ석을 제공할 수 있는 솔루션이 필요함. Metric Server, 프로메테우스 등의 오픈 소스들을 활용해야함.  Metric Server쿠버네티스 클러스터 당 메트릭 서버는 1개 메트릭 서버는 각 노드와  포드에서 메트릭을 수집함.수집한 것을 메모리에 저장. 디스크에 메트릭을 저장하지 않음. kubelet에는 cAdvisor가 포함되어 있음.cAdvisor는 포드에서 성능 메트릭을 수집하고, kubelet API를 통해 메트릭을 공개해 메트릭 서버가 메트릭을 수집할 수 있도록 한다..

클라우드 2024.12.17

Node Selector, Node Affinity

Node SelectorPod가 특정 노드에서만 작동하도록 하는 것.복잡한 요구 사항이 있으면 Node Selector로는 구현 불가 apiVersion: v1kind: Podmetadata: name: myapp-podspec: containers: - name: data-processor image: data-processor nodeSelector: size: Large //label Node AffinityNode Selector와 달리 특정 노드에 특정 Pod를 할당하는 것을 제한 가능 apiVersion: v1kind: Podmetadata: name: myapp-podspec: containers: - name: data-processor image: data-p..

클라우드 2024.12.16

Taints and Tolerations

Taint는 오점.노드에 Taint를 설정해주는 것.Tolerations는 오점을 견딜 수 있는지.Pod가 노드의 오점을 견딜 수 있는지 설정해주는 것. 오점이 없으면 스케줄러는 Pod를 적절히 아무 노드에 할당할 수 있다.오점이 있으면 오점을 견딜 수 없는 Pod는 그 노드에 할당할 수 없다. Pod가 Node의 오점을 견딜 수 있다고 해서, 그 Pod가 무조건 그 Node로 가는 것이 아니다.이것은 nodeAffinity를 통해서 할 수 있다. Taints와 Tolerations는 그냥 Pod가 그 Node에 할당될 수 있는지만 설정하는 것이다.마스터 노드에는 자동으로 Taint가 설정되어서 Pod가 할당되지 않는 것이다. Node에 Taint 설정kubectl taint nodes node-name..

클라우드 2024.12.16
728x90