こちらの記事「Ceph Object Storage を docker-registry (docker-distribution) の バックエンドに使う」で使った設定と同様のものを使って、OpenShift上のdocker-registryのバックエンドにCephを使っていきたいと思います。
docker-registryの設定ファイル変更
すでにデフォルト状態のdocker-registry podがデプロイされていることを前提にしています。デプロイされている pod から /config.yml
をローカルにコピーします。
# oc cp docker-registry-N-XXXXX:/config.yml .
ローカルで編集します。storage以下のfilesystem:
をswift:
の設定に変更するだけです。
# vim config.yml
BEFORE:
storage:
cache:
blobdescriptor: inmemory
filesystem:
rootdirectory: /registry
AFTER:
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
authurlやusernameの設定は、こちらの記事「Ceph Object Storage を docker-registry (docker-distribution) の バックエンドに使う」で使った設定をそのまま使っています。それほど大変ではありませんし、初めはローカルのdocker-distributionで検証して設定が正しいことを確認しておくのが良いと思います。
更新した config.yml を docker-registry で利用する
更新した config.yml
は、configmap
を使って、docker-registryにmountさせます。docker-registryのDeploymentConfigには、環境変数も用意されているので、以下の3つのコマンドで変更は可能です。
# oc create configmap registry-config --from-file=config.yml
# oc volume dc/docker-registry --add --type=configmap --configmap-name=registry-config -m /etc/docker/registry/
# oc set env dc/docker-registry REGISTRY_CONFIGURATION_PATH=/etc/docker/registry/config.yml
DeploymentConfigを更新すると、デフォルトで ConfigChange で デプロイがトリガーされる設定されているので、podの再デプロイがはしります。Running状態になったことを確認してください。
# oc get pod
NAME READY STATUS RESTARTS AGE
docker-registry-4-88bg6 1/1 Running 5 1m
image を push して検証する
バックエンドストレージにCeph Object Storageを使うようになった、docker-registryにimageをpushしてテストしてみましょう。
# oc new-app centos/ruby-22-centos7~https://github.com/openshift/ruby-ex.git
ビルド pod のログを見て、push が成功することを確認しましょう。
# oc logs ruby-ex-1-build -f
Pushing image docker-registry.default.svc:5000/demo/ruby-ex:latest ...
Pushed 0/10 layers, 10% complete
Pushed 1/10 layers, 13% complete
Pushed 2/10 layers, 23% complete
Pushed 3/10 layers, 32% complete
Pushed 4/10 layers, 41% complete
Pushed 5/10 layers, 55% complete
Pushed 6/10 layers, 64% complete
Pushed 7/10 layers, 76% complete
Pushed 8/10 layers, 83% complete
Pushed 8/10 layers, 97% complete
Pushed 9/10 layers, 99% complete
Pushed 10/10 layers, 100% complete
Push successful
(おまけ) Ceph 側のobjectを覗いてみる
swift コマンドを使ってpushされた image が Ceph ストレージにあることを確認してみます。demo
はプロジェクト名で、その後ろにイメージ名と一緒に保存されていることがわかります。
# 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/repositories/demo/ruby-ex/_layers/sha256/296548fd899888385195c38cd1b5f3fa6443abe35c4169de2fdb104f70007afe/link
files/docker/registry/v2/repositories/demo/ruby-ex/_layers/sha256/3198ba1a52956d97ff53912cfbd20cc333fef02bb0bf0dabf32659af1ea6d272/link
files/docker/registry/v2/repositories/demo/ruby-ex/_layers/sha256/469cfcc7a4b3947a4fa549c68cf4f8570be53779725f0c19f3d33d1520b08db0/link
files/docker/registry/v2/repositories/demo/ruby-ex/_layers/sha256/46db36153229f0c3ccba1a4e75169c8d20db2d17aa46c7cfd8877a0357a72e39/link
files/docker/registry/v2/repositories/demo/ruby-ex/_layers/sha256/575bbd9ad94d0e03aad2a2d5b69a1e4d88f87d4d2c5c9ad86193c9027d2d61c9/link
files/docker/registry/v2/repositories/demo/ruby-ex/_layers/sha256/9cde659b5fe388676ae34f3fa107e6ad00e8573f3e4ea5aadef38c93f8a60e6f/link
files/docker/registry/v2/repositories/demo/ruby-ex/_layers/sha256/a2c26223d84a4efc918e010f7de2b903c0aebc901b669be127e4d60ea5bb7f2b/link
files/docker/registry/v2/repositories/demo/ruby-ex/_layers/sha256/a38d357764a3aa20c2241433436db6cc24ea898a7f3c0904d66ca2323f302123/link
files/docker/registry/v2/repositories/demo/ruby-ex/_layers/sha256/d71b2d9b1cd31f28ce83322703f7ab706a35255bbcd419a3e95c2e895bd5f681/link
files/docker/registry/v2/repositories/demo/ruby-ex/_layers/sha256/e11c8e053fb5d1761f80fbfe7369765ecf2942fb2d975d3dd1d2792fcd8cabbd/link
files/docker/registry/v2/repositories/demo/ruby-ex/_layers/sha256/f55f016bb97cae4fab16eefa5f65b85f3112ce9758614d3b308f4f55e280d9d3/link
files/docker/registry/v2/repositories/demo/ruby-ex/_manifests/revisions/sha256/4b132f5996ceefa09e5cfb1006451487e3e9e34b7edd58dd2de57bc07cc42199/link
今回は、docker-distributionを検証していたので、OpenShift上で利用することも簡単に終わってしまいました。docker-registryのバックエンドにCephオブジェクトストレージを使う手順でした。