Help us understand the problem. What is going on with this article?

Ceph Object Storage を docker-registry (docker-distribution) の バックエンドに使う

More than 1 year has passed since last update.

今回は、Ceph Object Storage を docker-registry の バックエンドに使っていきます。

Ceph側で ユーザーの作成

ユーザーを作ります。

# radosgw-admin user create --uid="nak3" --display-name="test admin" \
   --email=nak3@example.com --access_key="testkey" --secret="testsecret"

サブユーザーを作ります。

# radosgw-admin subuser create --uid="nak3" --subuser="nak3:swift" \
  --access_key="testkey" --secret="testsecret" --access=full

サブユーザーを作ったときのアウトプットは以下のようになります。

{
    "user_id": "nak3",
    "display_name": "test admin",
    "email": "nak3@example.com",
    "suspended": 0,
    "max_buckets": 1000,
    "auid": 0,
    "subusers": [
        {
            "id": "nak3:swift",
            "permissions": "full-control"
        }
    ],
    "keys": [
        {
            "user": "nak3",
            "access_key": "testkey",
            "secret_key": "testsecret"
        }
    ],
    "swift_keys": [
        {
            "user": "nak3:swift",
            "secret_key": "testsecret"
        }
    ],
    "caps": [],
    "op_mask": "read, write, delete",
    "default_placement": "",
    "placement_tags": [],
    "bucket_quota": {
        "enabled": false,
        "check_on_raw": false,
        "max_size": -1,
        "max_size_kb": 0,
        "max_objects": -1
    },
    "user_quota": {
        "enabled": false,
        "check_on_raw": false,
        "max_size": -1,
        "max_size_kb": 0,
        "max_objects": -1
    },
    "temp_url_keys": [],
    "type": "rgw"
}

Ceph側で bucket の準備

続いて、swift コマンドを使って、bucket を作ります。

# swift -V 1.0 -A http://knakayam-ceph-c2.example.com/auth/v1 -U nak3:swift \
  -K testsecret post docker-registry

swift API を使った ファイルアップロードの簡易テスト

寄り道になりますが、念の為、ファイルがアップロードできることを試しておきます。

# touch test-file

# swift -V 1.0 -A http://knakayam-ceph-c2.example.com/auth/v1 -U nak3:swift  -K testsecret upload docker-registry test-file
test-file

stat 確認すると、Objectsが「1」になっていますね。問題なさそうです。

# swift -V 1.0 -A http://knakayam-ceph-c2.example.com/auth/v1 -U nak3:swift  -K testsecret stat docker-registry
                      Account: v1
                    Container: docker-registry
                      Objects: 1
                        Bytes: 0
                     Read ACL:
                    Write ACL:
                      Sync To:
                     Sync Key:
                Accept-Ranges: bytes
             X-Storage-Policy: default-placement
X-Container-Bytes-Used-Actual: 0
                  X-Timestamp: 1531912241.51508
                   X-Trans-Id: tx000000000000000000aba-005b4f2041-5e31-default
                 Content-Type: text/plain; charset=utf-8
       X-Openstack-Request-Id: tx000000000000000000aba-005b4f2041-5e31-default

以上で、Ceph側の準備は終わりです。

docker-distribution の設定

docker-distributionをインストールします。

# yum -y install docker-distribution

docker-distributionの設定は、/etc/docker-distribution/registry/config.ymlを設定するだけです。

# vim /etc/docker-distribution/registry/config.yml

簡易的にテストするだけなので、最低限の設定にしておきます。

version: 0.1
log:
  fields:
    service: registry
storage:
  cache:
    blobdescriptor: inmemory
  swift:
    username: nak3:swift
    password: testsecret
    authurl: http://knakayam-ceph-c2.example.com/auth/v1.0
    insecureskipverify: false
    container: docker-registry
    rootdirectory: /registry
http:
    addr: :5000

あとは、サービスを再起動しておくだけです。

# systemctl restart docker-distribution.service

イメージの push

busyboxという軽めのイメージをpullして、タグ付けして、pushします。

# docker pull busybox
# docker tag busybox 127.0.0.1:5000/busybox
# docker push 127.0.0.1:5000/busybox

最初に使った swift コマンドで、イメージが保存されていることを確認します。

# swift -V 1.0 -A http://knakayam-ceph-c2.example.com/auth/v1 -U nak3:swift  -K testsecret list docker-registry
files/docker/registry/v2/blobs/sha256/1b/1bd6df27274fef1dd36eb529d0f4c8033f61c675d6b04213dd913f902f7cafb5/data
files/docker/registry/v2/blobs/sha256/22/22c2dd5ee85dc01136051800684b0bf30016a3082f97093c806152bf43d4e089/data
files/docker/registry/v2/blobs/sha256/75/75a0e65efd518b9bcac8a8287e5c7032bc81f8cbfbe03271fd049b81ab26119b/data
files/docker/registry/v2/repositories/busybox/_layers/sha256/22c2dd5ee85dc01136051800684b0bf30016a3082f97093c806152bf43d4e089/link
files/docker/registry/v2/repositories/busybox/_layers/sha256/75a0e65efd518b9bcac8a8287e5c7032bc81f8cbfbe03271fd049b81ab26119b/link
files/docker/registry/v2/repositories/busybox/_manifests/revisions/sha256/1bd6df27274fef1dd36eb529d0f4c8033f61c675d6b04213dd913f902f7cafb5/link
files/docker/registry/v2/repositories/busybox/_manifests/tags/latest/current/link
files/docker/registry/v2/repositories/busybox/_manifests/tags/latest/index/sha256/1bd6df27274fef1dd36eb529d0f4c8033f61c675d6b04213dd913f902f7cafb5/link
foo
segments/2f6/46f636b65722f72656769737472792f76322f7265706f7369746f726965732f62757379626f782f5f75706c6f6164732f35326162376633362d643534332d343636302d613963312d6232333136613264393362632f6461746149391f47a198dfa46951f927f2ddc333a280d84cffef4358eb0a3dec59dc8a7eda39a3ee5e6b4b0d3255bfef95601890afd80709/0000000000000001
segments/2f6/46f636b65722f72656769737472792f76322f7265706f7369746f726965732f62757379626f782f5f75706c6f6164732f61653566623466382d383362392d346563382d396263342d3966313930326430393865352f646174612e13e94b53f06f689cd9a39460220b0b7c611d0c4a87cb4e323a7fd24db45393da39a3ee5e6b4b0d3255bfef95601890afd80709/0000000000000001

思ったより簡単に、Ceph Object Storage を docker-distribution のバックエンドにして試してみることができました。

nak3
red-hat
Red Hat はオープンソースのエンタープライズ IT ソリューションを提供するプロバイダーです。サブスクリプション・モデルを通じて、Red Hat のお客様はクラウド、Linux、管理、ミドルウェア、モバイル、ストレージ、および仮想化のテクノロジーを利用できます。また、Red Hat ではサポートや、トレーニング、コンサルティングのサービスも提供しています。
https://www.redhat.com/ja
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away