본문 바로가기

분류 전체보기324

Container application example 출처: 시작하세요! 도커/쿠버네티스 - 컨테이너 애플리케이션 구축 Container 구성 일반적으로 Service를 제공한다고 하면 여러 모듈로 구성되는 경우가 많다. 웹 어플리케이션을 아무리 간단한 형태라도 Web 과 DB 는 기본적으로 구성하는 경우가 많다. DB와 Web을 하나의 Container에 넣을 수도 있지만 각각 다른 Container로 관리하면 독립성이 보장되고 Version 관리가 쉬워지는 등 이점이 많다. Wordpress + DB Container 생성 wordpress를 들어본적이 있는지 모르겠다. wordpress는 널리 사용되는 웹사이트 제작도구이다. 이에 DB를 연동하여 블로그서비스를 구축해보자. ~ % docker run -d --name wordpressdb \ -e MY.. 2023. 6. 10.
Container port 출처: 시작하세요! 도커/쿠버네티스 - 컨테이너를 외부에 노출 Container는 VM과 마찬가지로 가상 IP주소를 할당받으며 기본적으로는 Docker NAT IP인 172.17.0.x를 할당받는다. 만약 ifconfig 명령어를 찾을 수 없다고 뜬다면 apt-get update, apt-get install net-tools 명령어를 차례대로 실행시킨 후 ifconfig 명령어를 사용한다. root@86058c0bec67:/# ifconfig eth0: flags=4163 mtu 1500 inet 172.17.0.2 netmask 255.255.0.0 broadcast 172.17.255.255 ether 02:42:ac:11:00:02 txqueuelen 0 (Ethernet) RX packets 1.. 2023. 6. 10.
Container 생성 및 삭제 출처: 시작하세요! 도커/쿠버네티스 - 컨테이너 생성 출처: 시작하세요! 도커/쿠버네티스 - 컨테이너 목록확인 출처: 시작하세요! 도커/쿠버네티스 - 컨테이너 삭제 Container 생성 docker run -it 명령어를 이용하면 container를 생성하고 해당 container에 접속할 수 있다. docker run -it 명령어는 세부적으로 아래 4단계를 거친다. local에 image가 없으면 repository로 부터 download (docker pull) container를 생성 (docker create) container를 시작 (docker start) container에 접속 (docker attach, 단, -it option 사용시) ~ % docker run -it ubuntu.. 2023. 6. 3.
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.
Go - context (blog) - 출처: https://go.dev./blog/context - 소개 Go 서버에서 들어오는 요청은 goroutine 으로 다루어지며, 요청 핸들러는 DB나 RPC 서비스 접근을 위해 추가적인 goroutine을 생성하기도 한다. 때로는 이런 goroutine 들이 공유해야 하는 값들(ex - end user 식별값, authorization token, 요청 deadline 등)이 있을 수 있다. 만약 요청이 취소되거나 timeout이 발생하면 사용중이던 자원을 회수해야 한다. go 에서는 이런 상황들을 해결할 수 있도록 Context를 제공한다. - Context context package의 핵심인 Context 형을 살펴보자. // A Context carries a deadline, cance.. 2022. 11. 13.
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.