DTR Backend with S3-compatible Storage (Minio)


預設情況下,推送到 DTR 保存的所有 images 都是在 DTR 當前主機的磁碟內。如果這個 DTR 出現任何嚴重問題無法運作,則外界無法對此 DTR 節點做存取 images。

爲了使得 DTR 在叢集中保持高可用性的狀態,必須設定更多的 DTR replicas,同時必須爲所有的 DTR 節點設定後端存儲。

我們可以利用 minio 作爲 DTR 後端存儲機制。minio 是一個分散式,容器化,同時兼容 S3 API 的資料庫。在爲 DTR 設定 minio 之前,下面先說明如何佈署 minio 在容器平台上。

建立 secrets 保存密碼存息,這是一個良好的實踐。


 # 以 docker swarm 保管密碼訊息
$ echo "accesskey-example" | docker secret create access_key -
$ echo "secretkey-example" | docker secret create secret_key -

編寫如下 docker-compose.yml 文件


 # docker-compose.yml 
version: '3.3'

services:
  minio1:
    image: minio/minio:edge
    hostname: minio1
    environment:
      MINIO_REGION: 'my_region'
    deploy:
      restart_policy:
        delay: 10s
        max_attempts: 10
        window: 60s
      placement:
        constraints:
          - node.labels.minio1==true
    volumes:
      - minio1-data:/export
    ports:
      - "9001:9000"
    networks:
      - minio_distributed
    command: server http://minio1/export http://minio2/export http://minio3/export http://minio4/export
    secrets:
      - secret_key
      - access_key

  minio2:
    image: minio/minio:edge
    hostname: minio2
    environment:
      MINIO_REGION: 'my_region'
    deploy:
      restart_policy:
        delay: 10s
        max_attempts: 10
        window: 60s
      placement:
        constraints:
          - node.labels.minio2==true
    volumes:
      - minio2-data:/export
    ports:
      - "9002:9000"
    networks:
      - minio_distributed
    command: server http://minio1/export http://minio2/export http://minio3/export http://minio4/export
    secrets:
      - secret_key
      - access_key

  minio3:
    image: minio/minio:edge
    hostname: minio3
    environment:
      MINIO_REGION: 'my_region'
    deploy:
      restart_policy:
        delay: 10s
        max_attempts: 10
        window: 60s
      placement:
        constraints:
          - node.labels.minio3==true
    volumes:
      - minio3-data:/export
    ports:
      - "9003:9000"
    networks:
      - minio_distributed
    command: server http://minio1/export http://minio2/export http://minio3/export http://minio4/export
    secrets:
      - secret_key
      - access_key

  minio4:
    image: minio/minio:edge
    hostname: minio4
    environment:
      MINIO_REGION: 'my_region'
    deploy:
      restart_policy:
        delay: 10s
        max_attempts: 10
        window: 60s
      placement:
        constraints:
          - node.labels.minio4==true
    volumes:
      - minio4-data:/export
    ports:
      - "9004:9000"
    networks:
      - minio_distributed
    command: server http://minio1/export http://minio2/export http://minio3/export http://minio4/export
    secrets:
      - secret_key
      - access_key


volumes:
  minio1-data:

  minio2-data:

  minio3-data:

  minio4-data:

networks:
  minio_distributed:
    driver: overlay

secrets:
  secret_key:
    external: true
  access_key:
    external: true


完成上述文件後,通過命令

docker stack deploy -c docker-compose.yml minio-backend

將 minio 布署在平臺上。透過瀏覽器打開 http://[node-ip]:9004 即可看到 minio 登入畫面。
登入的帳號密碼就是上述用 secrets 的內容。

接下來就是設定 DTR 後端調用 S3 minio.

留言

這個網誌中的熱門文章

Docker 環境下的 Proxy 配置