도커 운영 중, 호스트 머신의 스토리지가 가득찼을 때


현상

docker storage를 충분한 크기로 적절히 설정하고 운영함에도 host 머신의 스토리지가 full 되는 경우가 있다.

# df Filesystem Size Used Avail Use% Mounted on /dev/vda1 10G 3.9G 6.2G 39% / /dev/vdc1 10G 10G 0 100% /var /dev/vdd1 100G 7.5G 93G 8% /home ...


설명

  • /var/lib/docker/containers/ 디렉토리 아래, <container-id>/<container-id>-json.log 파일이 스토리지를 모두 차지했을 수 있다
  • 이 파일은 도커가 docker logs 명령 실행시 출력할 로그를 저장하는 파일이다 (docker storage에 저장되지 않고 host 머신의 파일 시스템을 소진한다)
  • 도커 실행시 max-size 옵션을 설정하면 로그 파일의 크기를 제한할 수 있다
  • 도커 실행시 max-file 옵션을 설정하면 로그 파일의 개수를 제한할 수 있다 (log rotate 효과)

해법

$ sudo vi /etc/docker/daemon.json
...다음 내용 추가...
{
  "log-driver": "json-file",
  "log-opts": {
    "mode": "non-blocking",
    "max-size": "4m",
    "max-file": "3"
  }
}

Ref


Posted by ingee
TAG docker

댓글을 달아 주세요

Docker Storage 이해

Ops 2018.10.15 14:15

2018.10.15 덧붙임

컨테이너 안에서 파일을 저장하려면 data volume을 이용하는 것이 좋다 (강력히 권장. data volume이 애매하면 mount volume도 권장).

  • 컨테이너 안에서의 파일 I/O는 storage driver에 의해 처리되며, 이는 일반 file I/O보다 큰 오버헤드를 감수해야 한다 (CoW 처리 때문)
  • 하지만, data volume 을 이용한 (컨테이너 안에서의) 파일 I/O는 storage driver를 우회하여 처리되며, host 머신의 file I/O와 동일한 속도로 처리된다
  • data volume (또는 mount volume)을 이용하려면 docker run 명령으로 컨테이너를 실행할 때, -v 옵션으로 볼륨을 지정하면 된다



2016.12.16 덧붙임

  • 도커는 원래 Ubuntu에서 개발, Ubuntu의 파일 스토리지 시스템은 AUFS
  • Red Hat 계열 배포판 (RHEL, CentOS, ...)에는 AUFS가 존재하지 않음
  • Red Hat 계열 리눅스를 위해, 도커는 Device Mapper를 2번째 Storage Backend로 수용함
  • Red Hat 계열 리눅스에 도커를 설치하면, Device Mapper가 도커의 Storage Backend로 동작 (loop-lvm)
  • 만약, 도커를 상용 수준으로 운영하려면, Device Mapper를 loop-lvm(디폴트)가 아닌 direct-lvm으로 설정/운영해야 함
  • loopback device (loop-lvm)는 상용 서비스를 처리하기엔 성능이 너무 안 좋음 (https://forums.docker.com/t/loopback-storage-devices/22007/2)



2016.01.29 원글

Q: 도커를 쓸 때 궁금했다
- 도커허브에서 가져온 도커 이미지는 어디에 저장되는 걸까?
- 도커 컨테이너 안에 write 하는 데이터는 어디에 저장되는 걸까?

A: 알고보니, <도커 스토리지>에 저장됐다
- <도커 이미지>는 layer 구조를 갖는다
- <도커 컨테이너>의 데이터는 CoW (Copy On Write) 정책에 따라 저장된다
+ RHEL/ CentOS/ Fedora 에서는 <도커 스토리지> 설정 작업이 필요하다 (Device Mappr)
  - 디폴트 스토리지는 loopback 장치
  - 안정적이지 않음
- Ubuntu는 도커 패키지 설치후 도커 스토리지 설정 없이 그냥 써도 좋다 (AUFS)

도커 스토리지 설정 스크립트 (@RHEL/ CentOS/ Fedora)
0. su
  $ su
1. volume이 정상적으로 준비되어 있는지 확인
  # fdisk -l
  - 사용하지 않는 /dev/vdc 장치 존재 확인
2. docker-storage-setup 설정 파일 수정
  # cat <<EOF > /etc/sysconfig/docker-storage-setup DEVS=/dev/vdc VG=docker-vg EOF
3. docker-storage-setup 명령 실행
  # docker-storage-setup
  ...
  Physical volume "/dev/vdc1" successfully created
  Volume group "docker-vg" successfully created
  Rounding up size to full physical extent 16.00 MiB
  Logical volume "docker-poolmeta" created.
  Logical volume "docker-pool" created.
  ...

Ref
- (추천!) Understand images, containers, and storage drivers
  https://docs.docker.com/engine/userguide/storagedriver/imagesandcontainers/
- Docker and the Device Mapper storage driver
  https://docs.docker.com/engine/userguide/storagedriver/device-mapper-driver/
- Comprehensive Overview of Storage Scalability in Docker
  http://developerblog.redhat.com/2014/09/30/overview-storage-scalability-docker/

(이상)

Posted by ingee
TAG docker

댓글을 달아 주세요

Permissioned Blockchain 합의 알고리즘의 종류


Permissioned Lottery based Consensus

  • 리더를 추첨, 리더가 블록을 생성
  • 사례: PoET (Proof of Elapsed Time), PoW
  • 장점: node 개수가 대규모일 때 적합
  • 단점: fork가 일어날 수 있음, 따라서 finality 확정까지 긴 시간 소요


Permissioned Voting based Consensus

  • 투표에 의한 합의
  • 사례: RBFT (Redundant BFT), PBFT (Practical BFT)
  • 장점: 빠른 finality 확정
  • 단점: node 수가 늘어날수록 합의 시간이 길어짐, 즉 scalability와 speed 사이의 trade-off 존재



합의 알고리즘 관련 용어

  • Safety : 같은 TXs를 처리하면 모든 node가 같은 결과를 내야 한다 (같은 블록체인을 만들어야 한다)
  • Liveness : 살아있는 node는 시간이 흐르면 결국 모든 TXs를 수신해야 한다


Ref.


Posted by ingee

댓글을 달아 주세요