今回は、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 のバックエンドにして試してみることができました。