SW Engineering/DevOps, SRE 41

SRE (Site Reliability Engineering) 역할

SRE (Site Reliability Engineering) 역할 SRE(Site Reliability Engineering)은 조직이 해당 시스템, 서비스 및 제품에서 적절한 수준의 안정성을 달성하도록 지원하는 엔지니어링 분야로, 실패 비용을 줄임으로써, 신속하게 올바른 방향으로 이동할 수 있도록 지원한다. 이 과정에서 SRE는 자동화, 수치화, 프로세스화를 진행한다. 특히 SRE 관점은 “근본적인 문제는 소프트웨어의 문제”라고 정의하고 접근한다. SRE가 하는 일은 크게 5가지 정도로 나누어 볼 수 있다. [Metric & Monitoring] 모니터링 지표를 정의하고, 정의된 지표를 모니터링 시스템으로 구성한다. 인사이트를 통해 시스템이 안정적인 상황과 또는 장애가 나는 지표는 무엇인지, 왜인지?..

SRE (Site Reliability Engineering)

SRE (Site Reliability Engineering) 사이트 안정성 엔지니어링(SRE, site Reliability Engineering)은 조직이 해당 시스템, 서비스 및 제품에서 “적절한” 수준의 안정성을 “지속적”으로 달성하도록 지원하는 엔지니어링 분야이다. 여기서 말하는 “적절한” 수준의 안정성은 무엇일까? IT 시스템이 발달할 수록, 더 나은 안정성을 추구 할수록, 안정성을 높이는 데 필요한 노력과 리소스(및 비용)는 빠른 속도로 증가하고 있다. 이를 다르게 표현한다면, 불필요한 안정성 추구는 시간과 돈의 낭비가 발생한다는 것이다. 결론적으로 안정성 수준은 비즈니스 수요에 적절하고 실용적이어야 하는 수준에서 트레이드오프를 해야한다. 예를 들어, 고객이 100% 안정적이지 않은 네트워크..

Docker Network

Docker Network · Version : Docker Docker network는 컨테이너에 내부IP를 순차적으로 할당하고 컨테이너가 재시작 할 때마다 부여된 IP가 변경될 수 있다. 내부IP는 도커가 설치된 호스트의 내부망에서만 쓸 수 있기 때문에 외부와 통신을 하기 위해 veth* 라는 네트워크 인터페이스를 생성하여 외부와 통신한다. 도커가 설치된 호스트에서 ifconfig나 ip addr같은 네트워크 명령어로 인터페이스를 확인 해보면 실행중인 컨테이너 수 만큼 veth*로 시작하는 인터페이스가 생성된 것을 알 수 있다. · eth0 : 내부IP가 외부로 통신하기 위한 인터페이스로 호스트의 네트워크 이다. Eth0 네트워크가 각 veth*로 시작하는 네트워크와 통신한다. · docker0 : ..

Docker Compose-여러개의 컨테이너를 설정하고 생성하기

Docker Compose - 여러개의 컨테이너를 설정하고 생성하기 · Version : Docker Docker compose 명령은 여러개의 컨테이너 옵션과 환경을 정의한 파일을 읽어 컨테이너를 순차적으로 생성한다. 도커 컴포즈의 설정 파일(docker-compose.yml)은 run 명령어 옵션을 그대로 사용할 수 있으며 각 컨테이너의 의존성, 네트워크, 볼륨, 컨테이너 수 등을 유동적으로 조절할 수 있다. 예를 들어 파이썬 프로그램이 구동되는 컨테이너와 데이터를 저장하는 redis 서버, 웹서버 컨테이너를 실행한다고 할 때, 각각의 run 명령어 및 다양한 옵션으로 컨테이너를 생성하고 테스트하기에는 매우 번거롭다. 이때 도커 컴포즈를 활용하면 편리하다. 도커 컴포즈는 컨테이너 설정이 정의된 YAM..

Docker build-Dockerfile을 이용해서 이미지 생성하기

Docker build - Dockerfile을 이용해서 이미지 생성하기 · Version : Docker Docker build 명령은 dockerfile을 이용해서 이미지를 만드는 작업을 한다. dockerfile에는 이미지 생성시 필요한 작업이 스크립트로 작성되어 있다. · dockerfile : http://sqlmvp.kr/221465287824 아래 스크립트는 docker build를 사용해서 이미지를 생성한다. docker build -t makeimage:0.0 ./ · -t : 생성될 이미지의 이름을 설정. 위 스크립트에서는 makeimage:0.0 라는 이름의 이미지가 생성된다. -t 옵션을 사용하지 않으면 16진수 형태의 이름으로 이미지가 생성된다. · ./ : build 명령어 끝에..

Docker file-이미지 생성시 필요한 작업을 스크립트로 만들기

Docker file - 이미지 생성시 필요한 작업을 스크립트로 만들기 · Version : Docker 컨테이너를 생성하는 방법은 베이스 이미지를 이용하여 그 위에 다양한 애플리케이션을 설치하는 방법, 또는 이미 모든 환경이 구성된 컨테이너를 이미지로 만드는 방법 등 다양하다. · Docker Image생성 : http://sqlmvp.kr/221461385385 · Docker Image 추출 : http://sqlmvp.kr/221463568253 이번 포스트에서는 Dockerfile 을 이용해서 이미지를 생성하는 방법에 대해서 알아본다. Dockerfile은 이미지를 생성하기 위해 컨테이너에 설치해야하는 패키지, 추가해야하는 소스코드, 실행시 필요한 명령어, 쉘 스크립트 등을 하나의 파일로 생성한..

Docker Image 추출

Docker Image 추출 · Version : Docker 지난 포스트에 docker commit 명령을 사용하여 이미지를 생성한 다음 docker hub를 사용하여 이미지를 공유하는 방법에 대해서 다루었다. · 도커 이미지 생성 : http://sqlmvp.kr/221461385385 이번 포스트에서는 이미지 파일을 단일 바이너리 파일로 저장하는 방법과 저장된 이미지 파일을 로드 하는 방법에 대해서 살펴본다. 이미지를 파일로 추출하는 명령은 docker save이다. 이 명령을 사용하면 이미지의 모든 메타 데이터를 포함하는 하나의 파일로 추출할 수 있다. docker save [option] image [image] docker save busybox > busybokx.tar docker save..

Docker Image 생성 및 docker hub에 이미지 업로드

Docker Image 생성 및 docker hub에 이미지 업로드 · Version : Docker 컨테이너는 기본적으로 이미지를 사용하여 생성하며, 컨테이너 생성 후 사용자 변경 부분에 대해서는 필요에 따라 새로운 이미지를 만들어서 배포하거나 재사용하기도 한다. 이번 포스트에서는 docker hub에서 이미지를 다운로드 (Pull), 업로드(push) 및 이미지를 생성(commit)하는 방법에 대해서 알아본다. 도커는 기본적으로 docker hub(https://hub.docker.com/)라는 중앙 이미지 저장소에서 이미지를 내려 받는다. 아래 그림처럼 docker hub는 도커가 공식적으로 제공하는 이미지 저장소로 누구나 가입 후 이미지를 내려 받을 수 있다. 또한 사용자 이미지를 도커 허브에 업..

Docker Container 리소스 제한-CPU, Memory, Disk I/O 리소스 사용량 설정

Docker Container 리소스 제한 - CPU, Memory, Disk I/O 리소스 사용량 설정 · Version : Docker 컨테이너를 생성할 때 다양한 옵션으로 컨테이너 리소스 사용량을 조절할 수 있다. 아무런 옵션을 입력하지 않으면 기본적으로 호스트의 모든 리소스를 제한없이 사용할 수 있게 되어, 여러 컨테이너 실행 시 리소스 사용의 불균형이 발생할 수도 있다. 이번 포스트에서는 시스템 리소스(CPU, MEMORY, Disk I/O)를 컨테이너 실행시 설정하거나 이미 운영중인 컨테이너에서 리소스를 수정하는 방법에 대해서 살펴 본다. 현재 컨테이너에 설정된 리소스를 확인하는 방법은 docker inspect 명령을 사용한다. docker inspect 는 많은 항목을 나타내는데 “Host..

Docker Container 로그 확인-컨테이너에서 발생하는 다양한 로그 확인

Docker Container 로그 확인 - 컨테이너에서 발생하는 다양한 로그 확인 · Version : Docker 어떠한 시스템을 운영하던지 로그는 매우 중요하다. 로그는 현재 서비스의 다양한 상태를 확인할 수 있는 훌륭한 도구이기 때문이다. Docker의 경우 다양한 방법으로 컨테이너 로그를 남기는데, 이번 포스트에서는 컨테이너의 표준 입력(STDIN), 표준 출력(STDOUT), 표준 오류(STDERR) 로그를 별도의 메타데이터 파일로 저장하며 이를 확인하는 방법에 대해서 살펴본다. 컨테이너의 로그를 확인하는 명령은 docker logs를 사용한다. docker logs 명령은 컨테이너의 표준 출력을 표시함으로써 애플리케이션 상태를 알 수 있다. docker log [container name] ..