1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

IBM Cloud Object Storage (ICOS) を vSphere Content Library として Subscribe 利用する

Last updated at Posted at 2020-09-29

vSphere Content Library とは

OVF テンプレートや ISO ファイルをライブラリ化してvCenter 単位で管理し、他の vCenter サイトにも公開できるといったものです。

コンテンツ ライブラリの使用
コンテンツ ライブラリは、仮想マシン テンプレートおよび vApp テンプレートに加えて、ISO イメージ、テキスト ファイルなどの他のファイル タイプのコンテナ オブジェクトです。ライブラリ内のテンプレートを使用して、vSphere インベントリに仮想マシンと vApp をデプロイできます。コンテンツ ライブラリを使用して、同じ場所または異なる場所の vCenter Server インスタンス間でコンテンツを共有することもできます。テンプレートとファイルを共有すると、ワークロードの大規模なデプロイで整合性やコンプライアンスを確保し、デプロイを効率化および自動化できます。

vSphere Content Library: distribute your content
vSphere Content Library

概要

通常、Content Library の作成には vCenter が必要ですが、
今回は 「Create a vCenter Content Library using AWS S3 - Part 2」を参考にして、
IBM Cloud Object Storage (ICOS) だけで Content Library を無理やり(?)仕立てて試します。
ICOS を使うことで、作業用サーバーや vSphere データストアのストレージを圧迫することなく、必要なときだけダウンロードする構成がとれます。
また、Private Endpoint を経由することで ICOS からのアウトバウンドデータ通信も課金されません。

image.png

ICOS 準備

CLI を使って構成準備を進めます。

ibmcloud ログイン


export REGION="jp-tok"
export RESOURCE_GROUP="khayama-rg"
ibmcloud login -a cloud.ibm.com -r $REGION -g $RESOURCE_GROUP

ICOS サービスインスタンス作成


export COS_NAME=khayama-cos
export COS_PLAN=standard

ibmcloud resource service-instance-create $COS_NAME \
cloud-object-storage $COS_PLAN global

CLI プラグインインストール


ibmcloud plugin install cloud-object-storage
ibmcloud plugin show cloud-object-storage

ICOS バケットの作成

jp-tok に Smart Tier のバケットを作成します。


export BUCKET_NAME=content-library

export COS_ID=$(ibmcloud resource service-instance --output JSON $COS_NAME | jq -r '.[].id')
echo $COS_ID

ibmcloud cos config region $REGION
ibmcloud cos config crn $COS_ID

ibmcloud cos create-bucket \
--bucket $BUCKET_NAME --class smart

ICOS サービス認証情報の作成

Content Library 設定に必要な認証情報を作成します。


ibmcloud resource service-key-create "$COS_NAME"-service-key  --instance-id $COS_ID --parameters '{"HMAC":true}'
ibmcloud resource service-keys  

その認証情報を使って configcredentials ファイルを作成します。


ACCESS_KEY_ID=$(ibmcloud resource service-key "$COS_NAME"-service-key --output json | jq -r '.[]|.credentials.cos_hmac_keys.access_key_id')
echo $ACCESS_KEY_ID

SECRET_ACCESS_KEY=$(ibmcloud resource service-key "$COS_NAME"-service-key --output json | jq -r '.[]|.credentials.cos_hmac_keys.secret_access_key')
echo $SECRET_ACCESS_KEY

cat <<EOF > ~/.aws/config 
[default]
region = $REGION
EOF

cat <<EOF > ~/.aws/credentials 
[default]
aws_access_key_id = $ACCESS_KEY_ID
aws_secret_access_key = $SECRET_ACCESS_KEY
EOF

ファイルアップロード

OVF テンプレートと ISO ファイルをアップロードし、以下のような構成とします。


% ibmcloud cos objects --bucket $BUCKET_NAME                                          
OK
見つかりました 8 バケットにオブジェクトがあります 'content-library':

名前                                            最終変更日時               オブジェクト・サイズ   
iso/                                            Sep 28, 2020 at 12:38:41   0 B   
iso/groovy-desktop-amd64.iso                    Sep 28, 2020 at 13:00:47   2.77 GiB   
iso/windows_server_2019_EVAL_x64FRE_ja-jp.iso   Sep 29, 2020 at 07:44:02   5.17 GiB   
photon-hw11-3.0-a383732/                        Sep 29, 2020 at 14:03:33   0 B   
photon-hw11-3.0-a383732/photon-ova-disk1.vmdk   Sep 29, 2020 at 14:03:39   187.80 MiB   
photon-hw11-3.0-a383732/photon-ova.cert         Sep 29, 2020 at 14:03:39   1.86 KiB   
photon-hw11-3.0-a383732/photon-ova.mf           Sep 29, 2020 at 14:03:39   133 B   
photon-hw11-3.0-a383732/photon-ova.ovf          Sep 29, 2020 at 14:03:39   36.42 KiB     

GitHub からスクリプトをダウンロード

AWS S3 用に作られたスクリプトを IBM Cloud Object Storage (ICOS) 用にカスタマイズできます。

git clone https://github.com/khayama/vghetto-scripts.git
cd vghetto-scripts

必要に応じて、この部分を変更してください。

% cat make_vcsp_2018_ibmcos.py | grep COS_ENDPOINT
    COS_ENDPOINT = "https://s3.jp-tok.cloud-object-storage.appdomain.cloud"
    s3 = ibm_boto3.resource("s3",endpoint_url=COS_ENDPOINT)
    s3_client = ibm_boto3.client("s3",endpoint_url=COS_ENDPOINT)

python スクリプト実行

ICOS 用のライブラリをインストールして、python スクリプトを実行します。

python3 -m pip install -U ibm-cos-sdk
python3 make_vcsp_2018_ibmcos.py -n ibmcos-private-content-library -t s3 -p $BUCKET_NAME

以下のように、 lib.jsonitems.jsonxxx/item.json が作成されたことが確認できます。

% ibmcloud cos objects --bucket $BUCKET_NAME
OK
見つかりました 13 バケットにオブジェクトがあります 'content-library':

名前                                                  最終変更日時               オブジェクト・サイズ   
iso/                                                  Sep 28, 2020 at 12:38:41   0 B   
iso/groovy-desktop-amd64.iso                          Sep 28, 2020 at 13:00:47   2.77 GiB   
iso/groovy-desktop-amd64/item.json                    Sep 29, 2020 at 15:21:38   536 B   
iso/windows_server_2019_EVAL_x64FRE_ja-jp.iso         Sep 29, 2020 at 07:44:02   5.17 GiB   
iso/windows_server_2019_EVAL_x64FRE_ja-jp/item.json   Sep 29, 2020 at 15:21:38   604 B   
items.json                                            Sep 29, 2020 at 15:21:38   2.89 KiB   
lib.json                                              Sep 29, 2020 at 15:21:38   342 B   
photon-hw11-3.0-a383732/                              Sep 29, 2020 at 14:03:33   0 B   
photon-hw11-3.0-a383732/item.json                     Sep 29, 2020 at 15:21:38   1.39 KiB   
photon-hw11-3.0-a383732/photon-ova-disk1.vmdk         Sep 29, 2020 at 14:03:39   187.80 MiB   
photon-hw11-3.0-a383732/photon-ova.cert               Sep 29, 2020 at 14:03:39   1.86 KiB   
photon-hw11-3.0-a383732/photon-ova.mf                 Sep 29, 2020 at 14:03:39   133 B   
photon-hw11-3.0-a383732/photon-ova.ovf                Sep 29, 2020 at 14:03:39   36.42 KiB   

ICOS IP Firewall 設定

Private Endpoint を経由したアクセスを想定していますが、特定のソースIPに絞ったアクセスを設定します。

  • $(curl http://checkip.amazonaws.com) は現在のアクセス元グローバルIPを表しますが、オプションです。入れておくと UI アクセス時にも拒否されないので便利です。
  • 10.212.20.64/26 は vCenter を含む vSphere 管理系セグメントです。

BUCKET_NAME=content-library

export ACCESS_TOKEN=$(ibmcloud iam oauth-tokens --output JSON | jq -r '.iam_token')
echo $ACCESS_TOKEN

curl -X PATCH https://config.cloud-object-storage.cloud.ibm.com/v1/b/$BUCKET_NAME -H "authorization: $ACCESS_TOKEN" -d @- << EOF
{
  "firewall": {
    "allowed_ip": [
      "$(curl http://checkip.amazonaws.com)",
      "10.212.20.64/26"
    ]
  }
}
EOF

curl https://config.cloud-object-storage.cloud.ibm.com/v1/b/$BUCKET_NAME -H "authorization: $ACCESS_TOKEN" | jq -r

ICOS Public Access を有効化

バケットに対して Public Access を有効化し、 Anonymous アクセスを許可します。
その上で、先ほど設定した IP Firewall により Private の vSphere 管理セグメントからのアクセスに限定できます。


export COS_NAME=khayama-cos
export BUCKET_NAME=content-library

export ACCOUNT_ID=$(ibmcloud account show --output json | jq -r '.account_id')
echo $ACCOUNT_ID

export COS_INSTANCE_ID=$(ibmcloud resource service-instance --output JSON $COS_NAME | jq -r '.[].guid')
echo $COS_INSTANCE_ID

export ACCESS_TOKEN=$(ibmcloud iam oauth-tokens --output JSON | jq -r '.iam_token')
echo $ACCESS_TOKEN

curl -X POST \
"https://iam.cloud.ibm.com/v1/policies" \
-H "Authorization: $ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d @- << EOF
{
  "type": "access",
  "subjects": [
    {
      "attributes": [
        {
          "name": "access_group_id",
          "value": "AccessGroupId-PublicAccess"
        }
      ]
    }
  ],
  "roles": [
    {
      "role_id": "crn:v1:bluemix:public:cloud-object-storage::::serviceRole:ContentReader"
    }
  ],
  "resources": [
    {
      "attributes": [
        {
          "name": "accountId",
          "value": "$ACCOUNT_ID",
          "operator": "stringEquals"
        },
        {
          "name": "serviceName",
          "value": "cloud-object-storage",
          "operator": "stringEquals"
        },
        {
          "name": "serviceInstance",
          "value": "$COS_INSTANCE_ID",
          "operator": "stringEquals"
        },
        {
          "name": "resourceType",
          "value": "bucket",
          "operator": "stringEquals"
        },
        {
          "name": "resource",
          "value": "$BUCKET_NAME",
          "operator": "stringEquals"
        }
      ]
    }
  ]
}
EOF

vSphere Client から Content Library を登録

以下の画面のように進めます。

貼り付けた画像_2020_09_29_17_19.png
貼り付けた画像_2020_09_29_17_20.png

↓適当な名前を入力してください。

Kobito.h2YXNc.png

https://$BUCKET_NAME.$ENDPOINT/$OBJECT_NAME の形式で lib.json を指定します。

Kobito.VIy2E9.png

↓続行します。

Kobito.zchGI5.png

↓保管先ストレージを指定します。

Kobito.5j7GOd.png

↓以上で完了です。

Kobito.RhRILn.png

↓このように登録が確認できました。

Kobito.UV9qrR.png

稼働確認

以下のように、ISO ファイルと OVF テンプレートについて、ぞれぞれ必要に応じてアイテムを同期・削除できることが確認できました。

貼り付けた画像_2020_09_29_17_34.png
貼り付けた画像_2020_09_29_17_36.png
貼り付けた画像_2020_09_29_23_11.png

さいごに

以下が考慮すべき点と思いますが、1 回作っておけば、かなり便利に構築作業を進められると思います。

  • ICOS にファイルアップロードしてコンテンツ追加を反映するためには、python スクリプトを走らせてから Content Library で同期をかけることが必要
  • OVA ファイルはそのまま認識されないため、展開した(.ovf 等を含む)フォルダをアップロードする必要がある

その他、参考

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?