본문 바로가기

Framework and Tool108

Image와 Container - 출처: https://docs.docker.com/get-started/overview/ Image Image는 Docker container를 생성하기 위한 일종의 읽기-전용의 지시 template 이라고 할 수 있다. image는 다른 image를 기반으로 하여 커스터마이징 되기도 한다. 예를 들어 ubuntu image를 기반으로 apache web server와 application 을 설치하고 application을 실행하기 위해 환경 설정을 하는식이다. Image를 만들기 위해서는 Dockerfile 을 만들고 image를 만들기 위한 절차를 기술해야 한다. Dockerfile 내의 각 절차는 image 내의 layer를 생성한다. Dockerfile을 변경하고 image를 다시 빌드하면 .. 2023. 5. 31.
With grafana - 출처: https://prometheus.io/docs/tutorials/visualizing_metrics_using_grafana/ Goal - 수집한 metric을 Grafana로 시각화 Overview Prometheus server가 수집한 metric을 Grafana로 시각화 한다. 앞서 살펴보았듯 Prometheus도 web UI를 제공하긴 하지만 일반적으로는 Grafana dashboard를 가장 많이 사용한다. prometheus 홈페이지에서도 Prometheus graph 대신 Grafana를 권장하고 있다. Grafana 설치 및 설정 https://grafana.com/docs/grafana/latest/setup-grafana/installation/#supported-oper.. 2023. 4. 22.
Node exporter - 출처: https://prometheus.io/docs/guides/node-exporter/ Goal - localhost 에서 Node exporter 시작 - Node exporter로 부터 metric을 수집하도록 Prometheus instance 를 설정하고 시작 Overview 아래 Architecture 에서 exporter로 부터 metric을 수집해보고 prometheus instance 에서 제대로 수집했는지 확인해본다. Node exporter 설치 Prometheus Node Exporter는 하나의 바이너리 파일이다. download page(https://prometheus.io/download/#node_exporter) 에서 받은 후 압축을 풀어준다. tar xvfz n.. 2023. 4. 22.
Makefile 기초 - 출처: https://www.gnu.org/software/make/manual/html_node/Rule-Introduction.html - 출처: http://doc.kldp.org/KoreanDoc/html/GNU-Make/GNU-Make.html#toc2 - 출처: https://www.gnu.org/software/make/manual/html_node/Phony-Targets.html Makefile의 구조 Makefile은 target, dependency, command 3개의 요소로 이루어져 있으며 아래와 같은 요소를 갖는다. GNU make 에서는 target, prerequisties, recipe 라는 용어를 사용하는데, 개발자가 이해하기에는 출처2에서 사용하는 dependenc.. 2023. 4. 22.
Kubernetes - Persistent storage - 출처: Kubernetes in action - 퍼시스턴트 스토리지 파드에서 실행중인 앱이 Disk에 데이터를 유지해야 하거나 파드가 다른 노드로 재 스케줄링 된 경우에도 동일한 데이터를 사용해야 한다면 NAS(network-attached-storage) 유형에 저장돼야 한다. MongoDB를 Persistent disk에 연동하는 예제를 살펴보자. minikube 환경이기 때문에 hostPath로 흉내내본다. apiVersion: v1 kind: Pod metadata: name: mongodb spec: containers: - image: mongo name: mongodb volumeMounts: - name: mongodb-data mountPath: /data/db ports: - con.. 2022. 11. 12.
Kubernetes - Volume - 출처: Kubernetes in action - 볼륨 소개 볼륨은 파드의 구성요소이며, 파드의 spec 에서 정의한다. 독립적인 쿠버네티스의 구성요소는 아니어서 자체적으로 생성이나 삭제가 불가능하다. 파드의 모든 컨테이너에서 사용가능하지만 접근하려는 컨테이너에서 마운트 돼야한다. 예를 들어 아래와 같은 컨테이너들이 있다고 가정해보자. 웹서버: /var/htdocs 디렉터리에서 HTML 페이지 서비스, /var/logs 에 엑세스 로그를 저장하는 웹서버 실행 컨텐츠 에이전트: /var/html 에 html 을 생성하는 에이전트 로그 로테이터: /var/logs 디렉터리를 처리(로그 순환, 압축, 분석) 또한 아래 2 가지 볼륨을 갖는다고 가정하자. 볼륨1: HTML 공유 볼륨 볼륨2: 로그 공유 볼륨 .. 2022. 11. 12.
Kubernetes - readness probe, headless service - 출처: Kubernetes in action - 레디니스 프로브 서비스의 레이블 셀렉터와 파드의 레이블이 일치하면 해당 파드는 서비스 관리대상(엔드포인트 리소스에서 IP 목록으로 유지함)이 된다. 요청이 서비스로 전송된 후에 서비스는 임의의 파드로 해당 요청을 전송하는데 만약 파드가 요청을 처리할 준비가 되지 않은 상황이라면 어떻게 해야 할까? 앞서 이와 비슷한 라이브니스 프로브를 알아본적이 있다. 라이브니스 프로브는 불안전한 컨테이너를 다시 시작해서 앱의 상태를 원활하게 유지한다. 레디니스 프로브도 주기적으로 호출되며 특정 파드가 클라이언트 요청을 수신할 수 있는지 여부를 판단한다. 이때 준비가됐다는 기준은 앱의 특성에 맞도록 개발자가 잘 정의해야 한다. 레디니스 프로브에도 3 가지 유형이 존재한다.. 2022. 10. 30.
Kubernetes - ingress - 출처: Kubernetes in action - 인그레스 리소스 인그레스(ingress)란 들어가거나 들어가는 행위, 들어갈 수단, 장소, 진입로라는 의미를 갖고 있다. 인그레스 리소스를 사용하면 외부로 서비스를 노출할 수 있다. 이미 외부에 서비스를 노출하기 위한 유형으로 노드포트와 그의 확장형인 로드 밸런서를 살펴보았다. 그렇다면 인그레스라는 리소스는 왜 필요할까? 로드 밸런서는 자신의 공용 IP를 가진 로드 밸런서가 필요하다. 반면 인그레스는 한 IP 주소로 수십개의 서비스에 접근이 가능하다. 또한 네트워크 스택의 애플리케이션 계층(HTTP)에서 작동 하므로 서비스가 할 수 없는 쿠키기반 세션 어피니티와 같은 기능을 제공할 수 있다. 인그레스 리소스를 사용하려면 클러스터에 인그레스 컨트롤러를 실.. 2022. 10. 30.
Kubernetes - External service, Service export - 출처: Kubernetes in action - 클러스터 외부에 있는 서비스 연결 지금까지는 모두 클러스터 내부의 파드에 대해서만 통신을 지원하는 서비스를 설명했다. 하지만 쿠버네티스는 외부 서비스를 노출해서 외부 IP과 포트로 연결을 전달할 수 있다. 즉 클러스터 내부 클라이언트 파드에서 외부 서비스로 연결이 가능하다. - 서비스 엔드포인트 서비스와 파드 연결 과정에는 숨은 리소스가 있다. 서비스는 파드에 직접 연결되는것이 아니라 서비스 - 엔드포인트 리소스 - 파드로 연결된다. "kubectl describe svc"명령어로 서비스 정보를 확인해보자. 항목을 보다보면 엔드포인트(Endpoints)란 속성을 확인할 수 있을것이다. 엔드포인트 리소스는 서비스로 노출되는 파드의 IP와 포트 목록이다. .. 2022. 10. 24.
Kubernetes - Service intro - 출처: Kubernetes in action - 서비스 시스템을 마이크로 서비스로 구성하기로 했다면 파드가 통신하는 유형은 대게 아래 2가지 경우에 해당할것이다. 클러스터 내부의 다른 파드에서 오는 HTTP 요청에 응답 클러스터 외부 클라이언트에서 오는 HTTP 요청에 응답 만약 쿠버네티스를 사용하지 않는 상황에서 다른 서비스를 이용할때 보통은 환경설정 파일에 IP나 Host 이름을 설정하는 방식으로 사용한다. 하지만 쿠버네티스는 이런 방식으로 사용할 수 없는데 그 이유는 아래와 같다. 파드는 일시적이다. IP 주소 할당 시점이 노드에 파드를 스케줄링한 후 파드가 시작되기 바로 전이라 미리 알수 없다. 쿠버네티스는 수평 스케일링을 제공한다. 이 의미는 파드수와 IP에 상관없이 여러 파드가 동일한 서비.. 2022. 10. 21.