特集・ブログ

ブログ

2021年08月17日

【てくさぽBLOG】IBM Power Virtual ServerのAIX環境をバックアップしてみた(Part.1)

こんにちは。 てくさぽBLOGメンバーの村上です。 本ブログは、IBM Power Virtual Server をトライしてみた内容や感想をご紹介するブログです。 シリーズ化していますので、まずインデックスのご紹介をします。   インデックス ・IBM Power Virtual ServerでAIX環境を作ってみた ・IBM Power Virtual ServerのAIX環境にSWを導入してみた  ・IBM Power Virtual ServerのAIX環境を日本ロケールにしてみた  ・IBM Power Virtual ServerのAIX環境をバックアップしてみた(Part.1) ←今回 ・IBM Power Virtual ServerのAIX環境をバックアップしてみた(Part.2) ・IBM Power Virtual ServerのAIX環境とIBM Cloud x86環境を接続してみた 今回は、AIX環境のバックアップ手順のご紹介です。 検証環境で2種類のバックアップ方法を試しましたので、Part.1(本ブログ)とPart.2に分けてご紹介いたします。   Power Virtual Server バックアップ方法 Power Virtual Server の AIX インスタンスでは、以下の4種類のバックアップ方法が推奨されています。 ※技術寄りな人が最初に読む_IBMCloud柔らか層本 を参照(情報は20210811版より抜粋) 取得方法 提供方法 取得対象 Image Capture IBM Cloud で提供される 任意のVolumeGroup Flash Copy IBM Cloud で提供される 任意のVolumeGroup mksysb / savevg AIX OS標準でサポートされる方式 任意のVolumeGroup バックアップ・ソフトウェア利用 お客さまが別途ソフトウェアを購入 OS領域以外のデータ領域 上記の表の太字にしていない「mksysb / savevg」と「バックアップ・ソフトウェア利用」のバックアップ方法は、オンプレミス環境で頻繁に利用されているのでイメージが付きやすいと思います。 そのため、IBM Cloud の機能で提供されている「Image Capture」と「Flash Copy」のバックアップ方法を試すことにしました。 今回は 「AIX環境をバックアップしてみた Part.1」として、Image Capture によるバックアップ取得手順と、そのバックアップデータを IBM Cloud Object Storage に保管する手順をご紹介します。   セクション 以下の1)~4)のセクションに分けてご紹介します。 1)  Image Capture の説明 2)  Image Capture によるバックアップ取得 3)  IBM Cloud Object Storage の準備 4)  IBM Cloud Object Storage への保管 準備工程にかかる時間は別として、2) の「 Image Capture によるバックアップ取得」は数十秒(バックアップ容量が20GB(USEDは13GB))、4) の「IBM Cloud Object Storage への保管」は約17分程度(圧縮後のデータ容量が6.6GB)でした。 検証はAIXのインスタンスで行いましたが、IBM i のインスタンスでも同等の手順で操作を行うことができます。 利用したクライアント端末(私のPC)は、Windows10 pro バージョン2004です。   1) Image Capture の説明 Image Capture  は Power Virtual Server の WEBインターフェース画面で簡単に実行することができます。 <Image Capture とは> 説明 ・IBM Cloud で提供され、LPARのOVAイメージ(※)が出力される ・OVAイメージを使って別のインスタンスのデプロイが可能となる 主な用途 ・移行 ・複製(マスターイメージの管理) ・遠隔地保管 対象 rootvg を含む任意のボリューム 保管場所 ・Image Catalog ・IBM Cloud Object Storage 取得時の LPAR停止有無 不要 ※ ファイルの整合性担保のためにLPARを停止することが推奨される 制約事項 など ・手順を検証した上でバックアップとしても運用可能 ・サービス内の同時実行数は「1」 ・合計のボリュームサイズは最大10TB ・Flash Copy に比べると時間がかかる (※) OVAイメージとは、Open Virtual Appliance の略で、仮想サーバの構成や状態を丸ごとデータとしてファイルに写し取ったデータ形式のことです。 本来、Image Capture は移行や複製を目的とするようなのですが、制約事項に記載した通り、手順を確立する必要はあるもののバックアップとして利用できそうです。 また、制約事項に「Flash Copy より時間はかかる」とありますが、AIXユーザは mksysb や savevg の長時間バックアップに慣れているので、Flash Copy のような高速バックアップに比べて時間がかかる、くらいなら問題ないと感じます。   2) Image Capture によるバックアップ取得 前置きの説明が長くなりましたが、ここからは実際のバックアップ取得の手順となります。 IBM Cloud にログインし、インスタンスの詳細画面を表示します。 (インスタンスの詳細画面の表示方法は以前のブログに記載しています 【やってみた】IBM Power Virtual Server のAIX環境にSWを導入してみた  ) ・「サーバ詳細」の右上に表示されている「VMアクション」のプルダウンをクリックし、「取り込んでエクスポート」をクリックします。 「AIX72-test の取り込みおよびエクスポート」画面が表示されます。 ・バックアップ対象ボリュームを選択します。 ・エクスポート先は「イメージ・カタログ」を選択します。 ・「カタログ・イメージ名」に任意の名前を入れます。「AIX72_CP」という名前にしました。 ・「取り込んでエクスポート」をクリックします。この操作がバックアップ実行ボタンです。   バックアップが進行しているメッセージが出力されます。 上記のメッセージのように「completed」が表示されたらバックアップが完了です。 取得したバックアップデータを確認します。 ・WEBインターフェース画面の左ペインの「ブート・イメージ」をクリックします。 ・「ブートイメージ」のリストに、先ほどバックアップを取得した「AIX72_CP」がリストアップされていることを確認します。 ※「AIX72_CP」の上に表示されている「7200-05-01」は、インスタンス「AIX72-test」作成時にできるイメージです。   以上で、簡単にバックアップが取得できました! 通常は数十分かかるようなバックアップが1分もかからずに実行できたので驚きました。 次のセクションでは、取得したバックアップを別の場所(IBM Cloud Object Storage)にエクスポートします。   3) IBM Cloud Object Storage の準備 2) で取得したバックアップをIBM Cloud Object Storageにエクスポートする前に、IBM Cloud Object Storage のサービスを作成する必要があります(IBM Cloud Object Storage は、これ以降、ICOS と記載します)。 バックアップをICOS上にエクスポートすることで、Power Virtual Server のサービスが削除された後もバックアップデータを残しておくことができます。 ICOS には無料のライトプランが以下の条件で提供されており、今回は以下の条件に当てはまるのでライトプランを利用します。 ・1サービス、1ICOS ・最大25GBのストレージ容量 ・最大20,000 GET 要求/月 ・最大2,000 PUT 要求/月 ・最大10GB/月 のデータの取得 ・最大5GBのパブリック・アウトバウンドライト・プラン・サービスは、非アクティブで 30 日経過すると削除されます。 では、ICOSの環境を準備します。 (ICOSの準備は手順が少し長いですが、難しくないので ぜひお付き合いください) ・IBM Cloud のWEB画面右上の「カタログ」をクリックします。 ・検索バーに「object」と入力し、一番上にリストされる「Object Storage」を選択します。 以下の様に、ICOS のサービス作成画面が表示されます。 ・「リソースの構成」の「サービス名」の欄に任意のサービス名を記載します。今回は「COS-TEST」という名前にしました。 ・ライトプランなので金額が無料であることを確認し「作成」をクリックします。 ICOS サービスが作成できると下記の画面が表示されます。 ICOSサービスは、以下の通り、リソース・リストで確認でき、「ストレージ」のプルダウン以下にリストされます。 次は、「COS-TEST」内にバケットを作成します。 ・リソース・リストにリストされた「COS-TEST」をクリックします。 ・「バケットを作成」をクリックします。 ・「バケットのカスタマイズ」をクリックします。 「カスタム・バケット」の画面に移動します。 ・「固有のバケット名」に任意の名称を入れます。今回は「cos-test-2021」としました。 ・「回復力」は初期状態の「Regional」を選択したままとします。 ・「ロケーション」は「jp-tok」を選択します。 ・「ストレージ・クラス」は初期状態の「Smart Tier」を選択したままとします。 ・その他の項目は初期状態のままとし、画面の一番下にスクロールして「バケットの作成」をクリックします。 バケットが作成できました。 このバケットにアクセス・ポリシーを設定します。 ・上記の画面で「cos-test-2021」をクリックします。 ・左ペインに表示される「アクセス・ポリシー」をクリックします。 ・「ユーザを選択」のプルダウンから権限を付与するユーザを選択します。 ・「このパケットの役割」は初期状態の「ライター」を選択します。 ・「アクセス・ポリシーの作成」をクリックします。 アクセス・ポリシーの設定が完了すると以下が出力されます。 ICOSサービス資格情報を生成します。 ・左ペインより「サービス資格情報」を選択し、「サービス資格情報」の画面上に表示される「新規資格情報」をクリックします。 「資格情報の作成」の画面となります。 ・「HMAC資格情報を含める」を「オン」にします。 ・内容を確認して「追加」をクリックします。 サービスの資格情報が生成されました。 ・「cos_hmac_keys」の情報は、ICOSへバックアップデータをエクスポートする際に利用するのでコピペしておきます。 ICOSの準備が完了しました。 さて、次はバックアップイメージのエクスポート作業です。   4) IBM Cloud Object Storage への保管 2)で取得したバックアップイメージを、3) で作成したICOSのバケット内にエクスポートします。 ・2)で取得したバックアップイメージを表示します。 ・ブート・イメージ「AIX72_CP」の右側にある上矢印のマークをクリックします。これがエクスポートのボタンです。 「AIX72_CPを Cloud Object Storage にエクスポート」の画面が表示されます。 ・「リージョン」は「jp-tok」を選択します。 ・「バケット名」は3)で作成した「cos-test-2021」を入力します。 ・「HMACアクセス鍵」には、3) の手順でコピーしたサービス資格情報を入力します。 ・「HMAXシークレット・アクセス鍵」にも、3) の手順でコピーしたサービス資格情報を入力します。 ・すべての内容を確認し「エクスポート」をクリックします。 エクスポートの進捗は、ポップアップで画面に表示されます(すぐにポップアップが消えてしまい画面ショットは取れませんでした・・)。 バックアップイメージのエクスポートが完了したら、以下のようにICOSの「オブジェクト」画面にオブジェクトが追加されます。 バックアップイメージのエクスポートが完了しました! 6.6GB のバックアップイメージがエクスポートされたことが分かります。 (OVAイメージは自動で圧縮されていました) エクスポートは約17分程度で完了しました。約6.6MB/秒 の転送速度です。 ICOSはIBM Cloud の x86側のサービスを利用しているのもあり、転送速度はちょっと遅いですね。 転送速度を上げるためには、Aspera の利用を検討してみてもよいかもしれません(利用する際は別料金です)。 ICOSを初めて利用する際はICOSの準備に少し手間がかかりましたが、バックアップイメージのエクスポートはとても簡単でした!   次のブログでは、AIXインスタンスのバックアップ手順 Part.2をご紹介しています。 【やってみた】IBM Power Virtual Server のAIX環境をバックアップしてみた Part.2   最後に 実は、Power Virtual Server のバックアップの検証は2021年2月に完了していました。 本ブログを書くタイミングで、久しぶりにPower Virtual Server を触ってみると、ちょこちょこと仕様(画面の見え方など)が変わっていることに気づきまして、検証をやり直しました。 さすが、更新が頻繁に入っているPower Virtual Server ですね。 (情報発信は時間を置かずにすぐにやらないといけませんね!) 最新情報を逃さないよう、頻繁にチェックしていきたいと思います。   お問い合わせ この記事に関するご質問は下記までご連絡ください。 エヌアイシー・パートナーズ株式会社 技術支援本部 E-Mail:nicp_support@NIandC.co.jp  

2021年07月06日

【てくさぽBLOG】WebSphere Hybrid Editionを導入してみた Vol.2 -WebSphere Liberty導入編-

こんにちは。 てくさぽBLOGメンバーの岡田です。 IBM WebSphere Hybrid Edition(以下 WSHE)の導入をAzure上で検証してみた3回シリーズの2回目になります。 本記事では前回実施したAzure上にインストールしたOpenShift4.5環境に、WebSphere Liberty Coreをインストールしていきます。 WebSphere Hybrid Editionを導入してみた Vol.1 -OpenShift導入編- WebSphere Hybrid Editionを導入してみた Vol.2 -WebSphere Liberty導入編- *本編 WebSphere Hybrid Editionを導入してみた Vol.3 -ツール編- 1.WSHEというソフトウェアが無い? そもそもWSHEとはどのようなソフトウェアなのでしょうか。 分かりづらいですが、WSHEライセンスを購入してもWSHEというソフトウェアが利用できるわけではありません。WSHEライセンスは以下のWebSphere ApplicationServer関連の主要な製品をまとめたものです。 WebSphere Application Serverは,従来型のWebSphere traditionalおよび,コンテナ環境にも対応したWebSphere Libertyの二種類のランタイムがあります。今回は、WebSphere Libertyランタイムをインストールしてみます。                                          2.作業用サーバーを用意する 今回、Azure上に構築したRHEL8サーバーに以下を導入します。*個々のインストール手順は省略 ocコマンド podmanコマンド helmコマンド 3.WebSphere Libertyのインストール ここからは、Azure上のRHEL8サーバーにログインして行います。 (1)統合OCPレジストリーへのアクセス権を付与する ・OCPにログインします。 oc login -u kubeadmin -p  <パスワード> https://api.nicpwhecluster.xxx.com:6443 ・oc get nodesでノードのホスト名を確認します。 $ oc get node NAME STATUS ROLES AGE VERSION nicpwhecluster-h8lq5-master-0 Ready master 4d23h v1.18.3+e574db2 nicpwhecluster-h8lq5-master-1 Ready master 4d23h v1.18.3+e574db2 nicpwhecluster-h8lq5-master-2 Ready master 4d23h v1.18.3+e574db2 nicpwhecluster-h8lq5-worker-japaneast-1 Ready worker 4d23h v1.18.3+e574db2 nicpwhecluster-h8lq5-worker-japaneast-2 Ready worker 4d23h v1.18.3+e574db2 nicpwhecluster-h8lq5-worker-japaneast-3 Ready worker 4d23h v1.18.3+e574db2 ・今回はマスターノードの1つ「nicpwhecluster-h8lq5-master-0」で実行します。クラスタから内部経路を使ってレジストリにアクセスします。 $ oc debug nodes/nicpwhecluster-h8lq5-master-0 Starting pod/nicpwhecluster-h8lq5-master-0-debug ... To use host binaries, run `chroot /host` Pod IP: 10.0.0.7 If you don't see a command prompt, try pressing enter. sh-4.2# ・ノード上でocやpodmanなどのツールにアクセスできるように次のコマンドを実行します。 sh-4.2# chroot /host sh-4.4# ・アクセストークンを使用して、コンテナイメージ・レジストリにログインします。 sh-4.4# oc login -u kubeadmin -p <パスワード> https://api.nicpwhecluster.xxx.com:6443 The server uses a certificate signed by an unknown authority. You can bypass the certificate check, but any data you send to the server could be intercepted by others. Use insecure connections? (y/n): yLogin successful.You have access to 58 projects, the list has been suppressed. You can list all projects with 'oc projects'Using project "default".Welcome! See 'oc help' to get started. sh-4.4# sh-4.4# podman login -u kubeadmin -p $(oc whoami -t) image-registry.openshift-image-registry.svc:5000 WARNING! Using --password via the cli is insecure. Please consider using --password-stdin Login Succeeded! sh-4.4# ・動作確認します。レジストリdocker.ioからイメージをローカルに持ってきます。 sh-4.4# podman pull docker.io/hello-world Trying to pull docker.io/hello-world... Getting image source signatures Copying blob 0e03bdcc26d7 done Copying config bf756fb1ae done Writing manifest to image destination Storing signatures bf756fb1ae65adf866bd8c456593cd24beb6a0a061dedf42b26a993176745f6b sh-4.4# ・取得できたか確認します。 sh-4.4# podman images REPOSITORY TAG IMAGE ID CREATED SIZE quay.io/openshift-release-dev/ocp-v4.0-art-dev <none> e62c0ee30db5 3 weeks ago 505 MB quay.io/openshift-release-dev/ocp-v4.0-art-dev <none> b920241dcb5e 3 weeks ago 331 MB quay.io/openshift-release-dev/ocp-v4.0-art-dev <none> 14b9f9be4696 3 weeks ago 312 MB (途中省略) quay.io/openshift-release-dev/ocp-v4.0-art-dev <none> 088760d6a49a 3 weeks ago 912 MB docker.io/library/hello-world latest bf756fb1ae65 13 months ago 20 kB sh-4.4# ・レジストリに対してpodman pushを実行します。 sh-4.4# podman tag docker.io/hello-world image-registry.openshift-image-registry.svc:5000/openshift/hello-world sh-4.4# podman push image-registry.openshift-image-registry.svc:5000/openshift/hello-world Getting image source signatures Copying blob 9c27e219663c done Copying config bf756fb1ae done Writing manifest to image destination Storing signatures sh-4.4# (2)統合OCPレジストリーのエクスポーズ ・DefaultRoute を 「True」にします。 $ oc patch configs.imageregistry.operator.openshift.io/cluster --patch '{"spec":{"defaultRoute":true}}' --type=merge config.imageregistry.operator.openshift.io/cluster patched (no change) $ ・podmanでログインします。 $ HOST=$(oc get route default-route -n openshift-image-registry --template='{{ .spec.host }}') $ echo $HOST default-route-openshift-image-registry.apps.nicpwhecluster.xxx.com $ $ oc whoami -t M3Dbj0zF2oK68yG21jf7WTV37XeWR8EKRagF62QJOL0 $ $ podman login -u kubeadmin -p <パスワード> --tls-verify=false $HOST Login Succeeded! (3)SecurityContextConstraints (SCC) の定義 ・https://github.com/IBM/charts/tree/master/stable/ibm-websphere-liberty内の記載から以下の赤枠箇所の内容を含んだyamlファイルを作成します。今回はibm-websphere-liberty-scc.yamlという名前で作成しました。 ・oc applyコマンドでibm-websphere-liberty-scc を定義します。 $ oc apply -f ./ibm-websphere-liberty-scc.yaml securitycontextconstraints.security.openshift.io/ibm-websphere-liberty-scc created (4)プロジェクトwlp-sample作成 Websphere Liberty用にプロジェクトを作成します。今回は、Webコンソールから「wlp-sample」という名前で作成します。 (5)コンテナ・イメージのビルド ・server.xmlの用意 https://github.com/WASdev/ci.docker/blob/master/ga/latest/full/server.xml内の、36行あるserver.xmlの内容をコピーし、ファイルserver.xmlを作成します。 ・以下の内容のDockerファイルを作成します。 FROM ibmcom/websphere-liberty:19.0.0.12-full-java8-ibmjava-ubi COPY --chown=1001:0? server.xml /config/ RUN installUtility install --acceptLicense defaultServer ・コンテナ・イメージをビルドします。 $ podman build -f ./Dockerfile -t mylibertyapp:1.0 STEP 1: FROM ibmcom/websphere-liberty:19.0.0.12-full-java8-ibmjava-ubi Getting image source signatures Copying blob 58e1deb9693d done Copying blob 78afc5364ad2 done Copying blob 3325260754e7 done Copying blob 4427719dd2c9 done Copying blob c059e0bc6ac9 done Copying blob 0169ad963667 done Copying blob 6195cb089ab9 done Copying blob 9f87c21e1265 done Copying blob 725fc7f0231d done Copying blob 0331a4de6fdc done Copying blob bdab1c39af4a done Copying blob f5b53ae0ca41 done Copying config ce3acc7fda done Writing manifest to image destination Storing signatures STEP 2: COPY --chown=1001:0 server.xml /config/ fbd6f3d9cba9a7a72ac7a0dc3e3011b6400fdb2fd3e21fa34959dfe1925af803 STEP 3: COPY --chown=1001:0 SampleWebApp.war /config/dropins/ d64e1ce4931688a84d354446fbd4fa9f4744ef65cdcb187f830a2c9ea114dff8 STEP 4: RUN installUtility install --acceptLicense defaultServer Checking for missing features required by the server ... The server does not require any additional features. No features were installed.Start product validation... Product validation completed successfully. STEP 5: COMMIT mylibertyapp:1.0 515b092feddf7a2ebb165bbdab187bbfd54bf3bf09b55651b990b7da5b76f767 $ ・作成されたイメージを確認します。 $ podman images | grep myliberty localhost/mylibertyapp     1.0      515b092feddf      28 seconds ago     738 MB $ (6)Buildしたコンテナイメージを統合OCPレジストリーにpush ・まず統合OCPレジストリーへログインします。 $ podman login default-route-openshift-image-registry.apps.nicpwhecluster.xxx.com -u kubeadmin -p 75tT5caixaa_Mm7K6HiVT6xvbyFWeoHf1Dp1soB-21Y --tls-verify=false Login Succeeded! $ ・ビルドしたイメージに統合OCPレジストリーのホスト名とプロジェクトを示す名前を付与します。 実行したらpodman imagesコマンドで確認します。 $ podman tag mylibertyapp:1.0 default-route-openshift-image-registry.apps.nicpwhecluster.xxx.com/wlp-sample/mylibertyapp:1.0 $ podman images | grep myliberty localhost/mylibertyapp 1.0 515b092feddf 5 minutes ago 738 MB default-route-openshift-image-registry.apps.nicpwhecluster.xxx.com/wlp-sample/mylibertyapp 1.0 515b092feddf 5 minutes ago 738 MB $ ・統合OCPレジストリーへコンテナ・イメージを登録(push)します。 $ podman push default-route-openshift-image-registry.apps.nicpwhecluster.xxx.com/wlp-sample/mylibertyapp:1.0 --tls-verify=false Getting image source signatures Copying blob 995a5e8c59d9 done Copying blob 9e4e9b467e1d done Copying blob 18bd03b00625 done Copying blob 33037ee11bc5 done Copying blob 1d7ab3c032a8 done Copying blob da31cc4e7dec done Copying blob eeb6d8f926af done Copying blob 1228a4ab5ec0 done Copying blob 1235447b1b10 done Copying blob 60d1e32eff28 done Copying blob 6ab8cd79d784 done Copying blob 86b23fed23f4 done Copying blob 597be5f3fcff done Copying blob 7dd002d4a36c done Copying blob 6a5e24c477f6 done Copying config 515b092fed done Writing manifest to image destination Copying config 515b092fed done Writing manifest to image destination Storing signatures $ ・コンテナ・イメージが統合OCPレジストリーにpushされたことを確認します。 $ oc get imagestream NAME IMAGE REPOSITORY TAGS UPDATED mylibertyapp default-route-openshift-image-registry.apps.nicpwhecluster.xxx.com/wlp-sample/mylibertyapp 1.0 55 seconds ago$ oc describe imagestream mylibertyapp Name: mylibertyapp Namespace: wlp-sample Created: About a minute ago Labels: <none> Annotations: <none> Image Repository: default-route-openshift-image-registry.apps.nicpwhecluster.xxx.com/wlp-sample/mylibertyapp Image Lookup: local=false Unique Images: 1 Tags: 11.0 no spec tag* image-registry.openshift-image-registry.svc:5000/wlp-sample/mylibertyapp@sha256:bc6bc8fac41fd59b42d37e02888a3348f057c5caa0d8b41fd74d9e9f4aabdab4 About a minute ago $ (7)SCCをサービス・アカウントに付与(grant) ・(3)で作成したibm-websphere-liberty-sccをWebSphere Libertyが使用するサービス・アカウントに付与します。 $ oc project wlp-sample $ oc adm policy add-scc-to-user ibm-websphere-liberty-scc -z mylibertyapp-ibm-websphe clusterrole.rbac.authorization.k8s.io/system:openshift:scc:ibm-websphere-liberty-scc added: "mylibertyapp-ibm-websphe" $ (8)WebSphere LibertyのPodをデプロイ ・Helm Chartから変数ファイルを抽出します。 *WebSphere Liberty用helm Chart(「ibm-websphere-liberty-1.10.0.tgz」)をhttps://github.com/IBM/charts/tree/master/repo/stable からダウンロードしておきます。 $ helm inspect values ./ibm-websphere-liberty-1.10.0.tgz > mylibertyapp.yaml $  ・抽出した変数ファイルをエディタで開いてパラメーターを修正します。今回は以下の2箇所を更新しました。 ー (変更前)license: ""  ⇒ (変更後)license: "accept" ー (変更前)ssl: enabled: true ⇒ (変更後)ssl: enabled: false ・修正した変数ファイルを指定して「helm install」コマンドを実行し、デプロイします。 $ helm install mylibertyapp ./ibm-websphere-liberty-1.10.0.tgz -f ./mylibertyapp.yaml NAME: mylibertyapp LAST DEPLOYED: Mon Mar 1 08:26:17 2021 NAMESPACE: wlp-sample STATUS: deployed REVISION: 1 NOTES: + If you are running on IBM Cloud Kubernetes Service, get the application address by running these commands: ibmcloud cs workers $(kubectl config current-context) export NODE_IP=<Worker node public IP from the first command> export NODE_PORT=$(kubectl get --namespace wlp-sample -o jsonpath="{.spec.ports[0].nodePort}" services mylibertyapp-ibm-websphe) echo Application Address: http://$NODE_IP:$NODE_PORTOtherwise, run the following commands: export NODE_IP=$(kubectl get nodes -l proxy=true -o jsonpath="{.items[0].status.addresses[?(@.type==\"Hostname\")].address}") export NODE_PORT=$(kubectl get --namespace wlp-sample -o jsonpath="{.spec.ports[0].nodePort}" services mylibertyapp-ibm-websphe) echo Application Address: http://$NODE_IP:$NODE_PORT $ ・正常にデプロイできたか確認します。 $ helm list NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION mylibertyapp wlp-sample 1 2021-03-01 08:26:17.876891227 +0000 UTC deployed ibm-websphere-liberty-1.10.0 19.0.0.6 $ ・作成された主要なOCPリソースの一覧と状況を確認します。 $ oc get all -l app=mylibertyapp-ibm-websphe NAME READY STATUS RESTARTS AGE pod/mylibertyapp-ibm-websphe-76478c8fcd-ngqpp 1/1 Running 0 82sNAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/mylibertyapp-ibm-websphe NodePort 172.30.179.226 <none> 9080:30797/TCP 82sNAME READY UP-TO-DATE AVAILABLE AGE deployment.apps/mylibertyapp-ibm-websphe 1/1 1 1 82sNAME DESIRED CURRENT READY AGE replicaset.apps/mylibertyapp-ibm-websphe-76478c8fcd 1 1 1 82s $ (9)手作業でRouteを定義し、WebSphere Libertyにアクセスします ・作成されたServiceを確認します。 $ oc get service NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE mylibertyapp-ibm-websphe NodePort 172.30.179.226 <none> 9080:30797/TCP 112s $  ・Routeを作成します。 $ oc expose service mylibertyapp-ibm-websphe route.route.openshift.io/mylibertyapp-ibm-websphe exposed $ ・RouteのHOST名を確認します。 $ oc get route NAME HOST/PORT PATH SERVICES PORT TERMINATION WILDCARD mylibertyapp-ibm-websphe mylibertyapp-ibm-websphe-wlp-sample.apps.nicpwhecluster.xxx.com mylibertyapp-ibm-websphe http None $ ・最後に、Webページにアクセスしてみます。 ー コマンドの場合 $ curl -s http://mylibertyapp-ibm-websphe-wlp-sample.apps.nicpwhecluster.xxx.com <!DOCTYPE html> <html lang="en" xml:lang="en"> <head> <meta charset="utf-8" name="viewport" content="width=device-width,initial-scale=1.0"> <!--title data-externalizedString="WELCOME_TITLE"></title--> <title>WebSphere Liberty 19.0.0.12</title> <style> @font-face { font-family: IBMPlexSans-Medium; src: url('fonts/IBMPlexSans-Medium.woff'); } (以下、省略) ー Webブラウザの場合 4.まとめ いかがでしたでしょうか。 コンテナ版なのでインストールは簡単かな、と思っていたのですが実行するコマンドも多くて結構大変だった印象です。大まかには「コンテナイメージのビルド」⇒「OCPレジストリにプッシュ」⇒「Podのデプロイ」という流れなのですがそれぞれの工程ごとにいろいろなコマンドを打つ必要があるので、実際にやってみようと思われている方の参考になればと思います。 ここまでお読みいただきありがとうございました。 次回はWSHEで利用可能な各種ツール群をインストールしてみた内容をお伝えいたします。   お問い合わせ この記事に関するご質問は下記までご連絡ください。 エヌアイシー・パートナーズ株式会社 技術支援本部 E-Mail:nicp_support@NIandC.co.jp  

2021年06月08日

【てくさぽBLOG】WebSphere Hybrid Editionを導入してみた Vol.1 -OpenShift導入編(手順詳細)-

1.本記事について 本記事は「WebSphere Hybrid Editionを導入してみた Vol.1(OpenShift導入編)」のコマンドの詳細を掲載したものです。 本編をご覧頂きながら、詳しいコマンドや実行結果を本記事でご確認ください。 2. 事前準備 2-1. 作業用Linux環境準備 (1)作業用ディレクトリ作成 (2)Azure CLIインストール インストール→パスを確認→バージョン確認を実行します。 $ curl -sL https://aka.ms/InstallAzureCLIDeb | sudo bash $ which az /usr/bin/az $ az version {  "azure-cli": "2.18.0",  "azure-cli-core": "2.18.0",  "azure-cli-telemetry": "1.0.6",  "extensions": {} } (3)jqパッケージインストール yumコマンドでjqパッケージをインストールします。 $ yum -y install epel-release $ yum -y install jq $ $ which jq /usr/bin/jq (4)cloudctlインストール ダウンロード→解凍→パスが通った場所に配置します。 $ curl -L https://github.com/IBM/cloud-pak-cli/releases/latest/download/cloudctl-linux-amd64.tar.gz -o cloudctl-linux-amd64.tar.gz % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 160 100 160 0 0 446 0 --:--:-- --:--:-- --:--:-- 446 100 635 100 635 0 0 992 0 --:--:-- --:--:-- --:--:-- 992 100 12.4M 100 12.4M 0 0 4699k 0 0:00:02 0:00:02 --:--:-- 7554k$ tar xvf ./cloudctl-linux-amd64.tar.gz cloudctl-linux-amd64$ sudo mv ./cloudctl-linux-amd64 /usr/local/bin/cloudctl $ which cloudctl /usr/local/bin/cloudctl (5)ocコマンドのインストール $ tar xvf ./oc-4.5.31-linux.tar.gz README.md oc kubectl$ sudo mv ./oc /usr/local/bin/oc$ which oc /usr/local/bin/oc 2-2. ファイルの準備 (1)OCP4.5インストールファイルのダウンロード /home/user01/os45フォルダにダウンロードし、インストールファイルを解凍します。 $ tar xvf openshift-install-linux-4.5.31.tar.gz README.md openshift-install (2)Pull Secretファイル 2-3. パブリックDNSゾーン設定 (1)リソースグループを作成 (2)App Serviceドメインを作成 2-4. サービスプリンシパルの作成 (1)Azureへのログイン(az login) $ az login The default web browser has been opened at https://login.microsoftonline.com/common/oauth2/authorize. Please continue the login in the web browser. If no web browser is available or if the web browser fails to open, use device code flow with `az login --use-device-code`. WebブラウザでのAzure認証画面でログインします。 (2)アクティブなアカウントの詳細を表示して「tenantId」「id」を確認 $ az account list --refresh [  {   "cloudName": "AzureCloud",   "homeTenantId": "<tenantId>",   "id": "<ID>",   "isDefault": true,   "managedByTenants": [],   "name": "<サブスクリプション名>",   "state": "Enabled",   "tenantId": "<tenantId>",   "user": {   "name": "admin@xxx.onmicrosoft.com", "type": "user" }  } ] (3)アカウントのサービスプリンシパルを作成し「appId」「password」を確認 $ az ad sp create-for-rbac --role Contributor --name ocp_sp Changing "ocp_sp" to a valid URI of "http://ocp_sp", which is the required format used for service principal names Creating 'Contributor' role assignment under scope '/subscriptions/<id>' Retrying role assignment creation: 1/36 The output includes credentials that you must protect. Be sure that you do not include these credentials in your code or check the credentials into your source control. For more information, see https://aka.ms/azadsp-cli { "appId": "<appId>", "displayName": "ocp_sp", "name": "http://ocp_sp", "password": "<password>", "tenant": "<tenantID>" } (4)サービスプリンシパルに追加パーミッションを付与 (4-1)User Access Administrator ロールを割り当て メモしておいた<appId>をパラメータに利用します。 $ az role assignment create --role "User Access Administrator" --assignee-object-id $(az ad sp list --filter "appId eq '<appId>' " | jq '.[0].objectId' -r) { "canDelegate": null, "condition": null, "conditionVersion": null, "description": null, "id": "/subscriptions/<id>/providers/Microsoft.Authorization/roleAssignments/c02d16cf-c875-4228-99a7-ecfc77d23ff2", "name": "c02d16cf-c875-4228-99a7-ecfc77d23ff2", "principalId": "f56550e6-c2f3-47d1-9e82-be0be7674f9f", "principalType": "ServicePrincipal", "roleDefinitionId": "/subscriptions/<id>/providers/Microsoft.Authorization/roleDefinitions/18d7d88d-d35e-4fb5-a5c3-7773c20a72d9", "scope": "/subscriptions/<id>", "type": "Microsoft.Authorization/roleAssignments" } (4-2)Azure Active Directory Graph パーミッションを割り当て $ az ad app permission add --id <appId> --api 00000002-0000-0000-c000-000000000000 --api-permissions 824c81eb-e3f8-4ee6-8f6d-de7f50d565b7=Role Invoking "az ad app permission grant --id <appId>--api 00000002-0000-0000-c000-000000000000" is needed to make the change effective (5)パーミッション要求を承認 $ az ad app permission grant --id <appId> --api 00000002-0000-0000-c000-000000000000 { "clientId": "f56550e6-c2f3-47d1-9e82-be0be7674f9f", "consentType": "AllPrincipals", "expiryTime": "2022-02-24T05:15:17.649474", "objectId": "5lBl9fPC0Ueegr4L52dPnzVAb4VRJ4FHiVNygLqyh7c", "odata.metadata": "https://graph.windows.net/<tenantId>/$metadata#oauth2PermissionGrants/@Element", "odatatype": null, "principalId": null, "resourceId": "856f4035-2751-4781-8953-7280bab287b7", "scope": "user_impersonation", "startTime": "2021-02-24T05:15:17.649474" } 3.OpenShift 導入 3-1. SSH秘密鍵の作成 (1)作業用Linuxマシン上でssh-keygenコマンドを実行しSSHキーを作成 $ ssh-keygen -t rsa -b 4096 -N '' -f ~/.ssh/id_rsa2 Generating public/private rsa key pair. Your identification has been saved in /home/user01/.ssh/id_rsa2. Your public key has been saved in /home/user01/.ssh/id_rsa2.pub. The key fingerprint is: SHA256:kKB23rSxmb6ZjQA9eMaLYoXWxsounLQ160TxrOpf2VY user01@A2470 The key's randomart image is: +---[RSA 4096]----+ | . | | . . . | | o.. = | | .+*+o B | | oo*Bo* SE | |o.=B.+o . | |++=o=o.o | |+=o....* | |o+oo = . | +----[SHA256]-----+ (2)ssh-agent プロセスをバックグラウンドタスクとして開始 $ eval "$(ssh-agent -s)" Agent pid 3306 (3)SSH プライベートキーを ssh-agent に追加 $ ssh-add ~/.ssh/id_rsa2 Identity added: /home/user01/.ssh/id_rsa2 (/home/user01/.ssh/id_rsa2) 3-2. インストールファイルの作成 (1)install-config.yaml ファイル生成 $ cd /home/user01/os45 $ ./openshift-install create install-config --dir=/home/user01/os45 ? SSH Public Key /home/user01/.ssh/id_rsa2.pub ← プロンプトで入力 ? Platform azure ← プロンプトで入力 ? azure subscription id <id> ← プロンプトで入力 ? azure tenant id <tenantId> ← プロンプトで入力 ? azure service principal client id <appId> ← プロンプトで入力 ? azure service principal client secret [? for help] ******<password>******* ← プロンプトで入力 INFO Saving user credentials to "/home/user01/.azure/osServicePrincipal.json" INFO Credentials loaded from file "/home/user01/.azure/osServicePrincipal.json" ? Region japaneast ← プロンプトで入力 ? Base Domain ← プロンプトで入力 ? Cluster Name nicpwhecluster ← プロンプトで入力 ? Pull Secret [? for help] ← 事前にダウンロードしたPull Secretを貼り付け ******************************************************************************************** ※特に完了のメッセージは表示されません (2)ARM テンプレートの一般的な変数のエクスポート $ export CLUSTER_NAME=nicpwhecluster $ export AZURE_REGION=japaneast $ export SSH_KEY=""ssh-rsa AAAAB3Nza<以下、省略>"" $ export BASE_DOMAIN= $ export BASE_DOMAIN_RESOURCE_GROUP=ocp-cluster $ export KUBECONFIG=/home/user01/os45/auth/kubeconfig (3)クラスターの Kubernetes マニフェストを生成 $ ./openshift-install create manifests --dir=/home/user01/os45/ "INFO Credentials loaded from file ""/home/user01/.azure/osServicePrincipal.json"" INFO Consuming Install Config from target directory" (4)コントロールプレーン、ワーカーノードを定義する Kubernetes マニフェストファイルを削除 $ rm -f /home/user01/os45/openshift/99_openshift-cluster-api_master-machines-*.yaml $ rm -f /home/user01/os45/openshift/99_openshift-cluster-api_worker-machineset-*.yaml ※これらのファイルを削除することで、クラスターが自動的に生成するのを防ぎます。 (5)Kubernetes マニフェストファイルを変更 /home/user01/os45/manifests/cluster-scheduler-02-config.yml を変更し、Pod がコントロールプレーンにスケジュールされないようにします。 manifests/cluster-scheduler-02-config.yml ファイルをエディタで開き、"mastersSchedulable"パラメーターの値を False に設定し、保存、終了します。 (6)変数のエクスポート $ export INFRA_ID=nicpwhecluster-h8lq5 $ export RESOURCE_GROUP=nicpwhecluster-h8lq5-rg (7)Ignition 設定ファイルを取得 $ ./openshift-install create ignition-configs --dir=/home/user01/os45/ INFO Consuming OpenShift Install (Manifests) from target directory INFO Consuming Openshift Manifests from target directory INFO Consuming Common Manifests from target directory INFO Consuming Master Machines from target directory INFO Consuming Worker Machines from target directory (8)ファイルの確認 os45に生成された"bootstrap.ign"ファイル、”master.ign"ファイル、"metadata.json"ファイル、"worker.ign"ファイルがあることを確認します。 $ ls -al /home/user01/os45 total 91924 drwxrwxr-x 1 user01 user01 4096 Feb 24 15:10 . drwxr-xr-x 1 user01 user01 4096 Feb 24 15:09 .. -rw-rw-r-- 1 user01 user01 77773 Feb 24 15:10 .openshift_install.log -rw-r----- 1 user01 user01 1274855 Feb 24 15:10 .openshift_install_state.json drwxr-x--- 1 user01 user01 4096 Feb 24 15:10 auth -rw-r----- 1 user01 user01 302438 Feb 24 15:10 bootstrap.ign drwxrwxr-x 1 user01 user01 4096 Feb 24 09:52 conf -rw-r----- 1 user01 user01 4346 Feb 24 14:47 install-config.yaml.org -rw-r----- 1 user01 user01 1847 Feb 24 15:10 master.ign -rw-r----- 1 user01 user01 147 Feb 24 15:10 metadata.json -rw-r--r-- 1 user01 user01 92429691 Feb 12 16:46 openshift-install-linux-4.5.31.tar.gz -rw-r--r-- 1 user01 user01 2779 Feb 12 15:37 pull-secret.txt -rw-r--r-- 1 user01 user01 50 Feb 12 15:37 pull-secret.txt:Zone.Identifier -rw-r----- 1 user01 user01 1847 Feb 24 15:10 worker.ign 同様に/home/user01/os45/auth内に"kubeadmin-password"と"kubeconfig"があることを確認 user01@A2470:~$ ls -al /home/user01/os45/auth/ total 12 drwxr-x--- 1 user01 user01 4096 Feb 24 15:10 . drwxrwxr-x 1 user01 user01 4096 Feb 24 15:10 .. -rw-r----- 1 user01 user01 23 Feb 24 15:10 kubeadmin-password -rw-r----- 1 user01 user01 8992 Feb 24 15:10 kubeconfig 3-3. Azure リソースグループおよびアイデンティティーの作成 (1)リソースグループを作成 $ az group create --name ${RESOURCE_GROUP} --location ${AZURE_REGION} { "id": "/subscriptions/<id>/resourceGroups/nicpwhecluster-h8lq5-rg", "location": "japaneast", "managedBy": null, "name": "nicpwhecluster-h8lq5-rg", "properties": { "provisioningState": "Succeeded" }, "tags": null, "type": "Microsoft.Resources/resourceGroups" } (2)リソースグループの Azure アイデンティティーを作成 $ az identity create -g ${RESOURCE_GROUP} -n ${INFRA_ID}-identity { "clientId": "487b4852-018d-4289-94f7-24db4bef3811", "clientSecretUrl": "https://control-japaneast.identity.azure.net/subscriptions/<id>/resourcegroups/nicpwhecluster-h8lq5-rg/providers/Microsoft.ManagedIdentity/userAssignedIdentities/nicpwhecluster-h8lq5-identity/credentials?tid=<tenantId>&oid=f0273f5e-4c1b-4cf4-b3ac-14ad28344d17&aid=487b4852-018d-4289-94f7-24db4bef3811", "id": "/subscriptions/<id>/resourcegroups/nicpwhecluster-h8lq5-rg/providers/Microsoft.ManagedIdentity/userAssignedIdentities/nicpwhecluster-h8lq5-identity", "location": "japaneast", "name": "nicpwhecluster-h8lq5-identity", "principalId": "f0273f5e-4c1b-4cf4-b3ac-14ad28344d17", "resourceGroup": "nicpwhecluster-h8lq5-rg", "tags": {}, "tenantId": "<tenantID>", "type": "Microsoft.ManagedIdentity/userAssignedIdentities" } (3)Contributor ロールを Azure アイデンティティーに付与 (3-1)ロール割当に必要な変数をエクスポート $ export PRINCIPAL_ID=`az identity show -g ${RESOURCE_GROUP} -n ${INFRA_ID}-identity --query principalId --out tsv` $ export RESOURCE_GROUP_ID=`az group show -g ${RESOURCE_GROUP} --query id --out tsv` (3-2)Contributor ロールをアイデンティティーに割り当て $ az role assignment create --assignee "${PRINCIPAL_ID}" --role 'Contributor' --scope "${RESOURCE_GROUP_ID}" { "canDelegate": null, "condition": null, "conditionVersion": null, "description": null, "id": "/subscriptions/<id>/resourceGroups/nicpwhecluster-h8lq5-rg/providers/Microsoft.Authorization/roleAssignments/0b0302ab-9ca5-4b85-a2f3-a0f7c7cded77", "name": "0b0302ab-9ca5-4b85-a2f3-a0f7c7cded77", "principalId": "f0273f5e-4c1b-4cf4-b3ac-14ad28344d17", "principalType": "ServicePrincipal", "resourceGroup": "nicpwhecluster-h8lq5-rg", "roleDefinitionId": "/subscriptions/<id>/providers/Microsoft.Authorization/roleDefinitions/b24988ac-6180-42a0-ab88-20f7382dd24c", "scope": "/subscriptions/<id>/resourceGroups/nicpwhecluster-h8lq5-rg", "type": "Microsoft.Authorization/roleAssignments" } 3-4. RHCOS クラスターイメージおよびブートストラップ Ignition 設定ファイルのアップロード (1)Azureストレージアカウントの作成 $ az storage account create -g ${RESOURCE_GROUP} --location ${AZURE_REGION} --name ${CLUSTER_NAME}sa --kind Storage --sku Standard_LRS Resource provider 'Microsoft.Storage' used by this operation is not registered. We are registering for you. Registration succeeded. {- Finished .. "accessTier": null, "allowBlobPublicAccess": null, "azureFilesIdentityBasedAuthentication": null, "blobRestoreStatus": null, "creationTime": "2021-02-24T06:16:35.567172+00:00", "customDomain": null, "enableHttpsTrafficOnly": true, "encryption": { "keySource": "Microsoft.Storage", "keyVaultProperties": null, "requireInfrastructureEncryption": null, "services": { "blob": { "enabled": true, "keyType": "Account", "lastEnabledTime": "2021-02-24T06:16:35.629673+00:00" }, "file": { "enabled": true, "keyType": "Account", "lastEnabledTime": "2021-02-24T06:16:35.629673+00:00" }, "queue": null, "table": null } }, "failoverInProgress": null, "geoReplicationStats": null, "id": "/subscriptions/<id>/resourceGroups/nicpwhecluster-h8lq5-rg/providers/Microsoft.Storage/storageAccounts/nicpwheclustersa", "identity": null, "isHnsEnabled": null, "isHnsEnabled": null, "kind": "Storage", "largeFileSharesState": null, "lastGeoFailoverTime": null, "location": "japaneast", "minimumTlsVersion": null, "name": "nicpwheclustersa", "networkRuleSet": { "bypass": "AzureServices", "defaultAction": "Allow", "ipRules": [], "virtualNetworkRules": [] }, "primaryEndpoints": { "blob": "https://nicpwheclustersa.blob.core.windows.net/", "dfs": null, "file": "https://nicpwheclustersa.file.core.windows.net/", "internetEndpoints": null, "microsoftEndpoints": null, "queue": "https://nicpwheclustersa.queue.core.windows.net/", "table": "https://nicpwheclustersa.table.core.windows.net/", "web": null }, "primaryLocation": "japaneast", "privateEndpointConnections": [], "provisioningState": "Succeeded", "resourceGroup": "nicpwhecluster-h8lq5-rg", "routingPreference": null, "secondaryEndpoints": null, "secondaryLocation": null, "sku": { "name": "Standard_LRS", "tier": "Standard" }, "statusOfPrimary": "available", "statusOfSecondary": null, "tags": {}, "type": "Microsoft.Storage/storageAccounts" } (2)ストレージアカウントキーを環境変数としてエクスポート $ export ACCOUNT_KEY=`az storage account keys list -g ${RESOURCE_GROUP} --account-name ${CLUSTER_NAME}sa --query "[0].value" -o tsv` (3)VHD の URL を環境変数にエクスポート 今回はOCP4.5で構築するのでrelease-4.5ディレクトリを指定します。 $ export VHD_URL=`curl -s https://raw.githubusercontent.com/openshift/installer/release-4.5/data/data/rhcos.json | jq -r .azure.url` (4)選択した VHD を blob にコピー $ az storage container create --name vhd --account-name ${CLUSTER_NAME}sa --account-key ${ACCOUNT_KEY} { "created": true } コピーがスタートしたら、コマンドを実行してステータスを確認します。「Success」なったら完了です。 $ az storage blob copy start --account-name ${CLUSTER_NAME}sa --account-key ${ACCOUNT_KEY} --destination-blob "rhcos.vhd" --destination-container vhd --source-uri "${VHD_URL}" { "completionTime": null, "id": "afe1cb0f-9194-40b4-9a6c-d8f25c7b69bd", "progress": null, "source": null, "status": "pending", "statusDescription": null }(状況確認コマンド) $ az storage blob show --container-name vhd --name "rhcos.vhd" --account-name ${CLUSTER_NAME}sa --account-key ${ACCOUNT_KEY} -o tsv --query properties.copy.status success (5)blob ストレージコンテナーを作成します。 $ az storage container create --name files --account-name ${CLUSTER_NAME}sa --account-key ${ACCOUNT_KEY} --public-access blob { "created": true } 続いて、生成されたbootstrap.ignファイルをアップロードします。 $ az storage blob upload --account-name ${CLUSTER_NAME}sa --account-key ${ACCOUNT_KEY} -c "files" -f "/home/user01/os45/bootstrap.ign" -n "bootstrap.ign" { "etag": "00000002-0000-0000-8f3c-b41b770ad701", "id": "/subscriptions/<id>/resourceGroups/ocp-cluster/providers/Microsoft.Network/dnszones/nicpwhecluster.", "location": "global", "maxNumberOfRecordSets": 10000, "name": "nicpwhecluster.", "nameServers": [ "ns1-05.azure-dns.com.", "ns2-05.azure-dns.net.", "ns3-05.azure-dns.org.", "ns4-05.azure-dns.info." ], "numberOfRecordSets": 2, "registrationVirtualNetworks": null, "resolutionVirtualNetworks": null, "resourceGroup": "ocp-cluster", "tags": {}, "type": "Microsoft.Network/dnszones", "zoneType": "Public" } 3-5. DNSゾーンの作成 (1)プライベートDNSゾーンを作成 $ az network dns zone create -g ${BASE_DOMAIN_RESOURCE_GROUP} -n \${CLUSTER_NAME}.${BASE_DOMAIN}  {-Finished .. "etag": "02474d3c-85a2-4a48-8650-e837ea7df63b", "id": "/subscriptions/<id>/resourceGroups/nicpwhecluster-h8lq5-rg/providers/Microsoft.Network/privateDnsZones/nicpwhecluster.", "location": "global", "maxNumberOfRecordSets": 25000, "maxNumberOfVirtualNetworkLinks": 1000, "maxNumberOfVirtualNetworkLinksWithRegistration": 100, "name": "nicpwhecluster.", "numberOfRecordSets": 1, "numberOfVirtualNetworkLinks": 0, "numberOfVirtualNetworkLinksWithRegistration": 0, "provisioningState": "Succeeded", "resourceGroup": "nicpwhecluster-h8lq5-rg", "tags": null, "type": "Microsoft.Network/privateDnsZones" } 3-6. Azure での VNet の作成 (1)デプロイメントを作成 マニュアルページにある「VNet の ARM テンプレート」の内容をコピーして/home/user01/os45ディレクトリに01_vnet.jsonというファイルを作成し、コマンドを実行 $ az deployment group create -g ${RESOURCE_GROUP} --template-file "/home/user01/os45/01_vnet.json" --parameters baseName="${INFRA_ID}" {- Finished .. "id": "/subscriptions/<id>/resourceGroups/nicpwhecluster-h8lq5-rg/providers/Microsoft.Resources/deployments/01_vnet", "location": null, "name": "01_vnet", "properties": { "correlationId": "0a44ba18-b094-41b1-9be5-16ae14c50593", "debugSetting": null, "dependencies": [ { "dependsOn": [ { "id": "/subscriptions/<id>/resourceGroups/nicpwhecluster-h8lq5-rg/providers/Microsoft.Network/networkSecurityGroups/nicpwhecluster-h8lq5-nsg", "resourceGroup": "nicpwhecluster-h8lq5-rg", "resourceName": "nicpwhecluster-h8lq5-nsg", "resourceType": "Microsoft.Network/networkSecurityGroups" } ], "id": "/subscriptions/<id>/resourceGroups/nicpwhecluster-h8lq5-rg/providers/Microsoft.Network/virtualNetworks/nicpwhecluster-h8lq5-vnet", "resourceGroup": "nicpwhecluster-h8lq5-rg", "resourceName": "nicpwhecluster-h8lq5-vnet", "resourceType": "Microsoft.Network/virtualNetworks" } ], "duration": "PT9.5604786S", "error": null, "mode": "Incremental", "onErrorDeployment": null, "outputResources": [ { "id": "/subscriptions/<id>/resourceGroups/nicpwhecluster-h8lq5-rg/providers/Microsoft.Network/networkSecurityGroups/nicpwhecluster-h8lq5-nsg", "resourceGroup": "nicpwhecluster-h8lq5-rg" }, { "id": "/subscriptions/<id>/resourceGroups/nicpwhecluster-h8lq5-rg/providers/Microsoft.Network/virtualNetworks/nicpwhecluster-h8lq5-vnet", "resourceGroup": "nicpwhecluster-h8lq5-rg" } ], "outputs": null, "parameters": { "baseName": { "type": "String", "value": "nicpwhecluster-h8lq5" } }, "parametersLink": null, "providers": [ { "id": null, "namespace": "Microsoft.Network", "registrationPolicy": null, "registrationState": null, "resourceTypes": [ { "aliases": null, "apiProfiles": null, "apiVersions": null, "capabilities": null, "defaultApiVersion": null, "locationMappings": null, "locations": [ "japaneast" ], "properties": null, "resourceType": "virtualNetworks" }, { "aliases": null, "apiProfiles": null, "apiVersions": null, "capabilities": null, "defaultApiVersion": null, "locationMappings": null, "locations": [ "japaneast" ], "properties": null, "resourceType": "networkSecurityGroups" } ] } ], "provisioningState": "Succeeded", "templateHash": "16546001156426103307", "templateLink": null, "timestamp": "2021-02-24T06:39:35.707206+00:00", "validatedResources": null }, "resourceGroup": "nicpwhecluster-h8lq5-rg", "tags": null, "type": "Microsoft.Resources/deployments" } (2)VNet テンプレートをプライベート DNS ゾーンにリンク $ az network private-dns link vnet create -g ${RESOURCE_GROUP} -z ${CLUSTER_NAME}.${BASE_DOMAIN} -n ${INFRA_ID}-network-link -v "${INFRA_ID}-vnet" -e false {- Finished .. "etag": "\"7e02aec1-0000-0100-0000-6035f4fb0000\"", "id": "/subscriptions/<id>/resourceGroups/nicpwhecluster-h8lq5-rg/providers/Microsoft.Network/privateDnsZones/nicpwhecluster./virtualNetworkLinks/nicpwhecluster-h8lq5-network-link", "location": "global", "name": "nicpwhecluster-h8lq5-network-link", "provisioningState": "Succeeded", "registrationEnabled": false, "resourceGroup": "nicpwhecluster-h8lq5-rg", "tags": null, "type": "Microsoft.Network/privateDnsZones/virtualNetworkLinks", "virtualNetwork": { "id": "/subscriptions/<id>/resourceGroups/nicpwhecluster-h8lq5-rg/providers/Microsoft.Network/virtualNetworks/nicpwhecluster-h8lq5-vnet", "resourceGroup": "nicpwhecluster-h8lq5-rg" }, "virtualNetworkLinkState": "Completed" } 3-7. RHCOS クラスターイメージのデプロイ (1)RHCOS VHD blob URL を変数としてエクスポート $ export VHD_BLOB_URL=`az storage blob url --account-name ${CLUSTER_NAME}sa --account-key ${ACCOUNT_KEY} -c vhd -n "rhcos.vhd" -o tsv` (2)クラスターイメージのデプロイ マニュアルページにある「イメージストレージの ARM テンプレート」の内容をコピーして/home/user01/os45ディレクトリに02_storage.jsonというファイルを作成し、コマンドを実行します。 $ az deployment group create -g ${RESOURCE_GROUP} --template-file "/home/user01/os45/02_storage.json" --parameters vhdBlobURL="${VHD_BLOB_URL}" --parameters baseName="${INFRA_ID}" - Finished .. {- Finished .. "id": "/subscriptions/<id>/resourceGroups/nicpwhecluster-h8lq5-rg/providers/Microsoft.Resources/deployments/02_storage", "location": null, "name": "02_storage", "properties": { "correlationId": "0d04f61c-907e-4ccb-b364-a5c50c0e9ae7", "debugSetting": null, "dependencies": [], "duration": "PT13.9015046S", "error": null, "mode": "Incremental", "onErrorDeployment": null, "outputResources": [ { "id": "/subscriptions/<id>/resourceGroups/nicpwhecluster-h8lq5-rg/providers/Microsoft.Compute/images/nicpwhecluster-h8lq5-image", "resourceGroup": "nicpwhecluster-h8lq5-rg" } ], "outputs": null, "parameters": { "baseName": { "type": "String", "value": "nicpwhecluster-h8lq5" }, "vhdBlobURL": { "type": "String", "value": "https://nicpwheclustersa.blob.core.windows.net/vhd/rhcos.vhd" } }, "parametersLink": null, "providers": [ { "id": null, "namespace": "Microsoft.Compute", "registrationPolicy": null, "registrationState": null, "resourceTypes": [ { "aliases": null, "apiProfiles": null, "apiVersions": null, "capabilities": null, "defaultApiVersion": null, "locationMappings": null, "locations": [ "japaneast" ], "properties": null, "resourceType": "images" } ] } ], "provisioningState": "Succeeded", "templateHash": "723175588916620424", "templateLink": null, "timestamp": "2021-02-24T06:45:00.292869+00:00", "validatedResources": null }, "resourceGroup": "nicpwhecluster-h8lq5-rg", "tags": null, "type": "Microsoft.Resources/deployments" } 3-8.ネットワークおよび負荷分散コンポーネントの作成 (1)ネットワークオブジェクトおよびロードバランサーのデプロイ マニュアルページにある「ネットワークおよびロードバランサーの ARM テンプレート」の内容をコピーして/home/user01/os45ディレクトリに03_infra.jsonというファイルを作成し、コマンドを実行します。 $ az deployment group create -g ${RESOURCE_GROUP} --template-file "/home/user01/os45/03_infra.json" --parameters privateDNSZoneName="${CLUSTER_NAME}.${BASE_DOMAIN}" --parameters baseName="${INFRA_ID}" {- Finished .. "id": "/subscriptions/<id>/resourceGroups/nicpwhecluster-h8lq5-rg/providers/Microsoft.Resources/deployments/03_infra", "location": null, "name": "03_infra", "properties": { "correlationId": "32467378-c2a4-4e99-b950-9b3ba06ba768", "debugSetting": null, "dependencies": [ { "dependsOn": [ { "id": "/subscriptions/<id>/resourceGroups/nicpwhecluster-h8lq5-rg/providers/Microsoft.Network/publicIPAddresses/nicpwhecluster-h8lq5-master-pip", "resourceGroup": "nicpwhecluster-h8lq5-rg", "resourceName": "nicpwhecluster-h8lq5-master-pip", "resourceType": "Microsoft.Network/publicIPAddresses" } ], "id": "/subscriptions/<id>/resourceGroups/nicpwhecluster-h8lq5-rg/providers/Microsoft.Network/loadBalancers/nicpwhecluster-h8lq5-public-lb", "resourceGroup": "nicpwhecluster-h8lq5-rg", "resourceName": "nicpwhecluster-h8lq5-public-lb", "resourceType": "Microsoft.Network/loadBalancers" }, { "dependsOn": [ { "id": "/subscriptions/<id>/resourceGroups/nicpwhecluster-h8lq5-rg/providers/Microsoft.Network/loadBalancers/nicpwhecluster-h8lq5-internal-lb", "resourceGroup": "nicpwhecluster-h8lq5-rg", "resourceName": "nicpwhecluster-h8lq5-internal-lb", "resourceType": "Microsoft.Network/loadBalancers" } ], "id": "/subscriptions/<id>/resourceGroups/nicpwhecluster-h8lq5-rg/providers/Microsoft.Network/privateDnsZones/nicpwhecluster./A/api", "resourceGroup": "nicpwhecluster-h8lq5-rg", "resourceName": "nicpwhecluster./api", "resourceType": "Microsoft.Network/privateDnsZones/A" }, { "dependsOn": [ { "id": "/subscriptions/<id>/resourceGroups/nicpwhecluster-h8lq5-rg/providers/Microsoft.Network/loadBalancers/nicpwhecluster-h8lq5-internal-lb", "resourceGroup": "nicpwhecluster-h8lq5-rg", "resourceName": "nicpwhecluster-h8lq5-internal-lb", "resourceType": "Microsoft.Network/loadBalancers" } ], "id": "/subscriptions/<id>/resourceGroups/nicpwhecluster-h8lq5-rg/providers/Microsoft.Network/privateDnsZones/nicpwhecluster./A/api-int", "resourceGroup": "nicpwhecluster-h8lq5-rg", "resourceName": "nicpwhecluster./api-int", "resourceType": "Microsoft.Network/privateDnsZones/A" } ], "duration": "PT7.2301651S", "error": null, "mode": "Incremental", "onErrorDeployment": null, "outputResources": [ { "id": "/subscriptions/<id>/resourceGroups/nicpwhecluster-h8lq5-rg/providers/Microsoft.Network/loadBalancers/nicpwhecluster-h8lq5-internal-lb", "resourceGroup": "nicpwhecluster-h8lq5-rg" }, { "id": "/subscriptions/<id>/resourceGroups/nicpwhecluster-h8lq5-rg/providers/Microsoft.Network/loadBalancers/nicpwhecluster-h8lq5-public-lb", "resourceGroup": "nicpwhecluster-h8lq5-rg" }, { "id": "/subscriptions/<id>/resourceGroups/nicpwhecluster-h8lq5-rg/providers/Microsoft.Network/privateDnsZones/nicpwhecluster./A/api", "resourceGroup": "nicpwhecluster-h8lq5-rg" }, { "id": "/subscriptions/<id>/resourceGroups/nicpwhecluster-h8lq5-rg/providers/Microsoft.Network/privateDnsZones/nicpwhecluster./A/api-int", "resourceGroup": "nicpwhecluster-h8lq5-rg" }, { "id": "/subscriptions/<id>/resourceGroups/nicpwhecluster-h8lq5-rg/providers/Microsoft.Network/publicIPAddresses/nicpwhecluster-h8lq5-master-pip", "resourceGroup": "nicpwhecluster-h8lq5-rg" } ], "outputs": null, "parameters": { "baseName": { "type": "String", "value": "nicpwhecluster-h8lq5" }, "privateDNSZoneName": { "type": "String", "value": "nicpwhecluster." } }, "parametersLink": null, "providers": [ { "id": null, "namespace": "Microsoft.Network", "registrationPolicy": null, "registrationState": null, "resourceTypes": [ { "aliases": null, "apiProfiles": null, "apiVersions": null, "capabilities": null, "defaultApiVersion": null, "locationMappings": null, "locations": [ "japaneast" ], "properties": null, "resourceType": "publicIPAddresses" }, { "aliases": null, "apiProfiles": null, "apiVersions": null, "capabilities": null, "defaultApiVersion": null, "locationMappings": null, "locations": [ "japaneast" ], "properties": null, "resourceType": "loadBalancers" }, { "aliases": null, "apiProfiles": null, "apiVersions": null, "capabilities": null, "defaultApiVersion": null, "locationMappings": null, "locations": [ "japaneast" ], "properties": null, "resourceType": "privateDnsZones/A" } ] } ], "provisioningState": "Succeeded", "templateHash": "8527193543920854248", "templateLink": null, "timestamp": "2021-02-24T07:02:29.639760+00:00", "validatedResources": null }, "resourceGroup": "nicpwhecluster-h8lq5-rg", "tags": null, "type": "Microsoft.Resources/deployments" } (2)変数のエクスポートとクラスターを既存のパブリックゾーンに追加 まず変数をエクスポートします。 $ export PUBLIC_IP=`az network public-ip list -g ${RESOURCE_GROUP} --query "[?name=='${INFRA_ID}-master-pip'] | [0].ipAddress" -o tsv` クラスターを既存のパブリックゾーンに追加します。 $ az network dns record-set a add-record -g ${BASE_DOMAIN_RESOURCE_GROUP} -z ${BASE_DOMAIN} -n api.${CLUSTER_NAME} -a ${PUBLIC_IP} --ttl 60 { "arecords": [ { "ipv4Address": "20.78.25.157" } ], "etag": "e1b034dc-580a-460e-8579-d7789e6aa43c", "fqdn": "api.nicpwhecluster..", "id": "/subscriptions/<id>/resourceGroups/ocp-cluster/providers/Microsoft.Network/dnszones//A/api.nicpwhecluster", "metadata": null, "name": "api.nicpwhecluster", "provisioningState": "Succeeded", "resourceGroup": "ocp-cluster", "targetResource": { "id": null }, "ttl": 60, "type": "Microsoft.Network/dnszones/A" } 3-9.ノードの作成 (1)ブートストラップマシンの作成 まず変数をエクスポートします。 $ export BOOTSTRAP_URL=`az storage blob url --account-name ${CLUSTER_NAME}sa --account-key ${ACCOUNT_KEY} -c "files" -n "bootstrap.ign" -o tsv` $ export BOOTSTRAP_IGNITION=`jq -rcnM --arg v "2.2.0" --arg url ${BOOTSTRAP_URL} '{ignition:{version:$v,config:{replace:{source:$url}}}}' | base64 -w0` マニュアルページにある「ブートストラップマシンの ARM テンプレート」の内容をコピーして/home/user01/os45ディレクトリに04_bootstrap.jsonというファイルを作成し、コマンドを実行します。 $ az deployment group create -g ${RESOURCE_GROUP} --template-file "/home/user01/os45/04_bootstrap.json" --parameters bootstrapIgnition="${BOOTSTRAP_IGNITION}" --parameters sshKeyData="${SSH_KEY}" --parameters baseName="${INFRA_ID}" {- Finished .. "id": "/subscriptions/<id>/resourceGroups/nicpwhecluster-h8lq5-rg/providers/Microsoft.Resources/deployments/04_bootstrap", "location": null, "name": "04_bootstrap", "properties": { "correlationId": "6bfb12f9-fade-4ab0-99e2-a6acc50a0e67", "debugSetting": null, "dependencies": [ { "dependsOn": [ { "id": "/subscriptions/<id>/resourceGroups/nicpwhecluster-h8lq5-rg/providers/Microsoft.Network/publicIPAddresses/nicpwhecluster-h8lq5-bootstrap-ssh-pip", "resourceGroup": "nicpwhecluster-h8lq5-rg", "resourceName": "nicpwhecluster-h8lq5-bootstrap-ssh-pip", "resourceType": "Microsoft.Network/publicIPAddresses" } ], "id": "/subscriptions/<id>/resourceGroups/nicpwhecluster-h8lq5-rg/providers/Microsoft.Network/networkInterfaces/nicpwhecluster-h8lq5-bootstrap-nic", "resourceGroup": "nicpwhecluster-h8lq5-rg", "resourceName": "nicpwhecluster-h8lq5-bootstrap-nic", "resourceType": "Microsoft.Network/networkInterfaces" }, { "dependsOn": [ { "id": "/subscriptions/<id>/resourceGroups/nicpwhecluster-h8lq5-rg/providers/Microsoft.Network/networkInterfaces/nicpwhecluster-h8lq5-bootstrap-nic", "resourceGroup": "nicpwhecluster-h8lq5-rg", "resourceName": "nicpwhecluster-h8lq5-bootstrap-nic", "resourceType": "Microsoft.Network/networkInterfaces" } ], "id": "/subscriptions/<id>/resourceGroups/nicpwhecluster-h8lq5-rg/providers/Microsoft.Compute/virtualMachines/nicpwhecluster-h8lq5-bootstrap", "resourceGroup": "nicpwhecluster-h8lq5-rg", "resourceName": "nicpwhecluster-h8lq5-bootstrap", "resourceType": "Microsoft.Compute/virtualMachines" }, { "dependsOn": [ { "id": "/subscriptions/<id>/resourceGroups/nicpwhecluster-h8lq5-rg/providers/Microsoft.Compute/virtualMachines/nicpwhecluster-h8lq5-bootstrap", "resourceGroup": "nicpwhecluster-h8lq5-rg", "resourceName": "nicpwhecluster-h8lq5-bootstrap", "resourceType": "Microsoft.Compute/virtualMachines" } ], "id": "/subscriptions/<id>/resourceGroups/nicpwhecluster-h8lq5-rg/providers/Microsoft.Network/networkSecurityGroups/nicpwhecluster-h8lq5-nsg/securityRules/bootstrap_ssh_in", "resourceGroup": "nicpwhecluster-h8lq5-rg", "resourceName": "nicpwhecluster-h8lq5-nsg/bootstrap_ssh_in", "resourceType": "Microsoft.Network/networkSecurityGroups/securityRules" } ], "duration": "PT2M34.7216702S", "error": null, "mode": "Incremental", "onErrorDeployment": null, "outputResources": [ { "id": "/subscriptions/<id>/resourceGroups/nicpwhecluster-h8lq5-rg/providers/Microsoft.Compute/virtualMachines/nicpwhecluster-h8lq5-bootstrap", "resourceGroup": "nicpwhecluster-h8lq5-rg" }, { "id": "/subscriptions/<id>/resourceGroups/nicpwhecluster-h8lq5-rg/providers/Microsoft.Network/networkInterfaces/nicpwhecluster-h8lq5-bootstrap-nic", "resourceGroup": "nicpwhecluster-h8lq5-rg" }, { "id": "/subscriptions/<id>/resourceGroups/nicpwhecluster-h8lq5-rg/providers/Microsoft.Network/networkSecurityGroups/nicpwhecluster-h8lq5-nsg/securityRules/bootstrap_ssh_in", "resourceGroup": "nicpwhecluster-h8lq5-rg" }, { "id": "/subscriptions/<id>/resourceGroups/nicpwhecluster-h8lq5-rg/providers/Microsoft.Network/publicIPAddresses/nicpwhecluster-h8lq5-bootstrap-ssh-pip", "resourceGroup": "nicpwhecluster-h8lq5-rg" } ], "outputs": null, "parameters": { "baseName": { "type": "String", "value": "nicpwhecluster-h8lq5" }, "bootstrapIgnition": { "type": "String", "value": "eyJpZ25pdGlvbiI6eyJ2ZXJzaW9uIjoiMi4yLjAiLCJjb25maWciOnsicmVwbGFjZSI6eyJzb3VyY2UiOiJodHRwczovL25pY3B3aGVjbHVzdGVyc2EuYmxvYi5jb3JlLndpbmRvd3MubmV0L2ZpbGVzL2Jvb3RzdHJhcC5pZ24ifX19fQo=" }, "bootstrapVMSize": { "type": "String", "value": "Standard_D4s_v3" }, "sshKeyData": { "type": "SecureString" } }, "parametersLink": null, "providers": [ { "id": null, "namespace": "Microsoft.Network", "registrationPolicy": null, "registrationState": null, "resourceTypes": [ { "aliases": null, "apiProfiles": null, "apiVersions": null, "capabilities": null, "defaultApiVersion": null, "locationMappings": null, "locations": [ "japaneast" ], "properties": null, "resourceType": "publicIPAddresses" }, { "aliases": null, "apiProfiles": null, "apiVersions": null, "capabilities": null, "defaultApiVersion": null, "locationMappings": null, "locations": [ "japaneast" ], "properties": null, "resourceType": "networkInterfaces" }, { "aliases": null, "apiProfiles": null, "apiVersions": null, "capabilities": null, "defaultApiVersion": null, "locationMappings": null, "locations": [ "japaneast" ], "properties": null, "resourceType": "networkSecurityGroups/securityRules" } ] }, { "id": null, "namespace": "Microsoft.Compute", "registrationPolicy": null, "registrationState": null, "resourceTypes": [ { "aliases": null, "apiProfiles": null, "apiVersions": null, "capabilities": null, "defaultApiVersion": null, "locationMappings": null, "locations": [ "japaneast" ], "properties": null, "resourceType": "virtualMachines" } ] } ], "provisioningState": "Succeeded", "templateHash": "61131872004139608", "templateLink": null, "timestamp": "2021-02-24T07:15:18.354401+00:00", "validatedResources": null }, "resourceGroup": "nicpwhecluster-h8lq5-rg", "tags": null, "type": "Microsoft.Resources/deployments" } (2)コントロールプレーンの作成 マニュアルページにある「コントロールプレーンマシンの ARM テンプレート」の内容をコピーして/home/user01/os45ディレクトリに05_masters.jsonというファイルを作成し、コマンドを実行します。 $ az deployment group create -g ${RESOURCE_GROUP} --template-file "/home/user01/os45/05_masters.json" --parameters masterIgnition="${MASTER_IGNITION}" --parameters sshKeyData="${SSH_KEY}" --parameters privateDNSZoneName="${CLUSTER_NAME}.${BASE_DOMAIN}" --parameters baseName="${INFRA_ID}" {- Finished .. "id": "/subscriptions/<id>/resourceGroups/nicpwhecluster-h8lq5-rg/providers/Microsoft.Resources/deployments/05_masters", "location": null, "name": "05_masters", "properties": { "correlationId": "8d3c2bed-113b-4889-8aa7-b0bfba69ea74", "debugSetting": null, "dependencies": [ { "dependsOn": [ { "id": "/subscriptions/<id>/resourceGroups/nicpwhecluster-h8lq5-rg/providers/Microsoft.Network/networkInterfaces/nicpwhecluster-h8lq5-master-0-nic", "resourceGroup": "nicpwhecluster-h8lq5-rg", "resourceName": "nicpwhecluster-h8lq5-master-0-nic", "resourceType": "Microsoft.Network/networkInterfaces" } ], "id": "/subscriptions/<id>/resourceGroups/nicpwhecluster-h8lq5-rg/providers/Microsoft.Network/privateDnsZones/nicpwhecluster./A/etcd-0", "resourceGroup": "nicpwhecluster-h8lq5-rg", "resourceName": "nicpwhecluster./etcd-0", "resourceType": "Microsoft.Network/privateDnsZones/A" }, { "dependsOn": [ { "id": "/subscriptions/<id>/resourceGroups/nicpwhecluster-h8lq5-rg/providers/Microsoft.Network/networkInterfaces/nicpwhecluster-h8lq5-master-1-nic", "resourceGroup": "nicpwhecluster-h8lq5-rg", "resourceName": "nicpwhecluster-h8lq5-master-1-nic", "resourceType": "Microsoft.Network/networkInterfaces" } ], "id": "/subscriptions/<id>/resourceGroups/nicpwhecluster-h8lq5-rg/providers/Microsoft.Network/privateDnsZones/nicpwhecluster./A/etcd-1", "resourceGroup": "nicpwhecluster-h8lq5-rg", "resourceName": "nicpwhecluster./etcd-1", "resourceType": "Microsoft.Network/privateDnsZones/A" }, { "dependsOn": [ { "id": "/subscriptions/<id>/resourceGroups/nicpwhecluster-h8lq5-rg/providers/Microsoft.Network/networkInterfaces/nicpwhecluster-h8lq5-master-2-nic", "resourceGroup": "nicpwhecluster-h8lq5-rg", "resourceName": "nicpwhecluster-h8lq5-master-2-nic", "resourceType": "Microsoft.Network/networkInterfaces" } ], "id": "/subscriptions/<id>/resourceGroups/nicpwhecluster-h8lq5-rg/providers/Microsoft.Network/privateDnsZones/nicpwhecluster./A/etcd-2", "resourceGroup": "nicpwhecluster-h8lq5-rg", "resourceName": "nicpwhecluster./etcd-2", "resourceType": "Microsoft.Network/privateDnsZones/A" }, { "dependsOn": [ { "id": "/subscriptions/<id>/resourceGroups/nicpwhecluster-h8lq5-rg/providers/Microsoft.Network/networkInterfaces/nicpwhecluster-h8lq5-master-0-nic", "resourceGroup": "nicpwhecluster-h8lq5-rg", "resourceName": "nicpwhecluster-h8lq5-master-0-nic", "resourceType": "Microsoft.Network/networkInterfaces" }, { "id": "/subscriptions/<id>/resourceGroups/nicpwhecluster-h8lq5-rg/providers/Microsoft.Network/privateDnsZones/nicpwhecluster./A/etcd-0", "resourceGroup": "nicpwhecluster-h8lq5-rg", "resourceName": "nicpwhecluster./etcd-0", "resourceType": "Microsoft.Network/privateDnsZones/A" }, { "id": "/subscriptions/<id>/resourceGroups/nicpwhecluster-h8lq5-rg/providers/Microsoft.Network/privateDnsZones/nicpwhecluster./SRV/_etcd-server-ssl._tcp", "resourceGroup": "nicpwhecluster-h8lq5-rg", "resourceName": "nicpwhecluster./_etcd-server-ssl._tcp", "resourceType": "Microsoft.Network/privateDnsZones/SRV" } ], "id": "/subscriptions/<id>/resourceGroups/nicpwhecluster-h8lq5-rg/providers/Microsoft.Compute/virtualMachines/nicpwhecluster-h8lq5-master-0", "resourceGroup": "nicpwhecluster-h8lq5-rg", "resourceName": "nicpwhecluster-h8lq5-master-0", "resourceType": "Microsoft.Compute/virtualMachines" }, { "dependsOn": [ { "id": "/subscriptions/<id>/resourceGroups/nicpwhecluster-h8lq5-rg/providers/Microsoft.Network/networkInterfaces/nicpwhecluster-h8lq5-master-1-nic", "resourceGroup": "nicpwhecluster-h8lq5-rg", "resourceName": "nicpwhecluster-h8lq5-master-1-nic", "resourceType": "Microsoft.Network/networkInterfaces" }, { "id": "/subscriptions/<id>/resourceGroups/nicpwhecluster-h8lq5-rg/providers/Microsoft.Network/privateDnsZones/nicpwhecluster./A/etcd-1", "resourceGroup": "nicpwhecluster-h8lq5-rg", "resourceName": "nicpwhecluster./etcd-1", "resourceType": "Microsoft.Network/privateDnsZones/A" }, { "id": "/subscriptions/<id>/resourceGroups/nicpwhecluster-h8lq5-rg/providers/Microsoft.Network/privateDnsZones/nicpwhecluster./SRV/_etcd-server-ssl._tcp", "resourceGroup": "nicpwhecluster-h8lq5-rg", "resourceName": "nicpwhecluster./_etcd-server-ssl._tcp", "resourceType": "Microsoft.Network/privateDnsZones/SRV" } ], "id": "/subscriptions/<id>/resourceGroups/nicpwhecluster-h8lq5-rg/providers/Microsoft.Compute/virtualMachines/nicpwhecluster-h8lq5-master-1", "resourceGroup": "nicpwhecluster-h8lq5-rg", "resourceName": "nicpwhecluster-h8lq5-master-1", "resourceType": "Microsoft.Compute/virtualMachines" }, { "dependsOn": [ { "id": "/subscriptions/<id>/resourceGroups/nicpwhecluster-h8lq5-rg/providers/Microsoft.Network/networkInterfaces/nicpwhecluster-h8lq5-master-2-nic", "resourceGroup": "nicpwhecluster-h8lq5-rg", "resourceName": "nicpwhecluster-h8lq5-master-2-nic", "resourceType": "Microsoft.Network/networkInterfaces" }, { "id": "/subscriptions/<id>/resourceGroups/nicpwhecluster-h8lq5-rg/providers/Microsoft.Network/privateDnsZones/nicpwhecluster./A/etcd-2", "resourceGroup": "nicpwhecluster-h8lq5-rg", "resourceName": "nicpwhecluster./etcd-2", "resourceType": "Microsoft.Network/privateDnsZones/A" }, { "id": "/subscriptions/<id>/resourceGroups/nicpwhecluster-h8lq5-rg/providers/Microsoft.Network/privateDnsZones/nicpwhecluster./SRV/_etcd-server-ssl._tcp", "resourceGroup": "nicpwhecluster-h8lq5-rg", "resourceName": "nicpwhecluster./_etcd-server-ssl._tcp", "resourceType": "Microsoft.Network/privateDnsZones/SRV" } ], "id": "/subscriptions/<id>/resourceGroups/nicpwhecluster-h8lq5-rg/providers/Microsoft.Compute/virtualMachines/nicpwhecluster-h8lq5-master-2", "resourceGroup": "nicpwhecluster-h8lq5-rg", "resourceName": "nicpwhecluster-h8lq5-master-2", "resourceType": "Microsoft.Compute/virtualMachines" } ], "duration": "PT2M25.3829982S", "error": null, "mode": "Incremental", "onErrorDeployment": null, "outputResources": [ { "id": "/subscriptions/<id>/resourceGroups/nicpwhecluster-h8lq5-rg/providers/Microsoft.Compute/virtualMachines/nicpwhecluster-h8lq5-master-0", "resourceGroup": "nicpwhecluster-h8lq5-rg" }, { "id": "/subscriptions/<id>/resourceGroups/nicpwhecluster-h8lq5-rg/providers/Microsoft.Compute/virtualMachines/nicpwhecluster-h8lq5-master-1", "resourceGroup": "nicpwhecluster-h8lq5-rg" }, { "id": "/subscriptions/<id>/resourceGroups/nicpwhecluster-h8lq5-rg/providers/Microsoft.Compute/virtualMachines/nicpwhecluster-h8lq5-master-2", "resourceGroup": "nicpwhecluster-h8lq5-rg" }, { "id": "/subscriptions/<id>/resourceGroups/nicpwhecluster-h8lq5-rg/providers/Microsoft.Network/networkInterfaces/nicpwhecluster-h8lq5-master-0-nic", "resourceGroup": "nicpwhecluster-h8lq5-rg" }, { "id": "/subscriptions/<id>/resourceGroups/nicpwhecluster-h8lq5-rg/providers/Microsoft.Network/networkInterfaces/nicpwhecluster-h8lq5-master-1-nic", "resourceGroup": "nicpwhecluster-h8lq5-rg" }, { "id": "/subscriptions/<id>/resourceGroups/nicpwhecluster-h8lq5-rg/providers/Microsoft.Network/networkInterfaces/nicpwhecluster-h8lq5-master-2-nic", "resourceGroup": "nicpwhecluster-h8lq5-rg" }, { "id": "/subscriptions/<id>/resourceGroups/nicpwhecluster-h8lq5-rg/providers/Microsoft.Network/privateDnsZones/nicpwhecluster./A/etcd-0", "resourceGroup": "nicpwhecluster-h8lq5-rg" }, { "id": "/subscriptions/<id>/resourceGroups/nicpwhecluster-h8lq5-rg/providers/Microsoft.Network/privateDnsZones/nicpwhecluster./A/etcd-1", "resourceGroup": "nicpwhecluster-h8lq5-rg" }, { "id": "/subscriptions/<id>/resourceGroups/nicpwhecluster-h8lq5-rg/providers/Microsoft.Network/privateDnsZones/nicpwhecluster./A/etcd-2", "resourceGroup": "nicpwhecluster-h8lq5-rg" }, { "id": "/subscriptions/<id>/resourceGroups/nicpwhecluster-h8lq5-rg/providers/Microsoft.Network/privateDnsZones/nicpwhecluster./SRV/_etcd-server-ssl._tcp", "resourceGroup": "nicpwhecluster-h8lq5-rg" } ], "outputs": null, "parameters": { "baseName": { "type": "String", "value": "nicpwhecluster-h8lq5" }, "diskSizeGB": { "type": "Int", "value": 1024 }, "masterIgnition": { "type": "String", "value": "eyJpZ25pdGlvbiI6eyJjb25maWciOnsiYXBwZW5kIjpbeyJzb3VyY2UiOiJodHRwczovL2FwaS1p\nbnQubmljcHdoZWNsdXN0ZXIuYXp1cmUtY2xvdWRwYWstbmljcHRlc3QuY29tOjIyNjIzL2NvbmZp\nZy9tYXN0ZXIiLCJ2ZXJpZmljYXRpb24iOnt9fV19LCJzZWN1cml0eSI6eyJ0bHMiOnsiY2VydGlm\naWNhdGVBdXRob3JpdGllcyI6W3sic291cmNlIjoiZGF0YTp0ZXh0L3BsYWluO2NoYXJzZXQ9dXRm\nLTg7YmFzZTY0LExTMHRMUzFDUlVkSlRpQkRSVkpVU1VaSlEwRlVSUzB0TFMwdENrMUpTVVJGUkVO\nRFFXWnBaMEYzU1VKQlowbEpVek0xZEVoNmRtUnVWMFYzUkZGWlNrdHZXa2xvZG1OT1FWRkZURUpS\nUVhkS2FrVlRUVUpCUjBFeFZVVUtRM2hOU21JelFteGliazV2WVZkYU1FMVNRWGRFWjFsRVZsRlJS\nRVYzWkhsaU1qa3dURmRPYUUxQ05GaEVWRWw0VFVSSmVVNUVRVEpOUkVFd1RteHZXQXBFVkUxNFRV\nUkplVTFxUVRKTlJFRXdUbXh2ZDBwcVJWTk5Ra0ZIUVRGVlJVTjRUVXBpTTBKc1ltNU9iMkZYV2pC\nTlVrRjNSR2RaUkZaUlVVUkZkMlI1Q21JeU9UQk1WMDVvVFVsSlFrbHFRVTVDWjJ0eGFHdHBSemwz\nTUVKQlVVVkdRVUZQUTBGUk9FRk5TVWxDUTJkTFEwRlJSVUV5VW14VlJuVjBVbUZtVHpRS2FVcFBh\nVTR4YVZvMWNYWmFkMjQ1TUdaNGQwZzVRelF5T0M5MWFHVXZkV2hXVTJOdVVURnVjV3Q0UVd0c2JW\naHlNbmhVVmxsMWJXUmFOREptTmtJeE5nb3dkM0F3TjNWbFYxbHBTMlZPT1VkclprUjVPRlpZUTJS\nTU5raHNkRGxVWVVrd01UQkpUakJUVUVWWldFeDFORmxsSzJoRVRpdHJkR3RoV0V0a1QycG5DbWRO\nTHpOQmMwRlFSM1p5UjNoMlVUa3ZURloxZW5odVkwNUhWVUppTUZnNU1tVnFURWRMVGtoalZITlNU\nSFZtWVdSSFJFOVBibXhYZDJWWkwySmFOa1lLZUZCQ05FVjVhVVJHUVhsbmEwUkVSVFJyT0RkeVNY\naDVZVkpZTkhRMVkwOXpSWFpJZFdOSE5tUXdSekl3U2xRMWMzcHZhV0pwTUN0NVJGcE1kRk51ZFFw\nYWIyWkJTaXREZVRoVloxSndZWE5sYUZjeFpteHNWRklyZURSUVVDODFTbFUxYURWV00ySnlSM0pJ\nVjBwTVFqUnVhemszWm10aVFVTTJiMlZzUkdOWENqbFNlamQwVTFKT1RWRkpSRUZSUVVKdk1FbDNV\nVVJCVDBKblRsWklVVGhDUVdZNFJVSkJUVU5CY1ZGM1JIZFpSRlpTTUZSQlVVZ3ZRa0ZWZDBGM1JV\nSUtMM3BCWkVKblRsWklVVFJGUm1kUlZUTktkRWMzZGtKb1RrWlllREptYzNWbFdHNTNVV0ZoTjNW\nRVdYZEVVVmxLUzI5YVNXaDJZMDVCVVVWTVFsRkJSQXBuWjBWQ1FVbHhNa2xNU1c4NGNVbFpOMXA0\nZERoc04yOUthVzQzY0U1SFZrZ3ZRMDF4Umlzd01GTlpVemQ2VGxBck1GZzBRMU5RUWtrd1dtWllW\nM1Z3Q2s1U1kwVkpTVGxqVW5vME1tczBOVlZTVm1saU5XeFdVR1prY1RSa2NEZG1aSGRKVVdGc04y\nTnNPSEJVVUhJMVpXcG9SbEJGVmpSeFpGY3pWSGRFVkhjS00yOTZZWGc1UmtVM1p5dGxZbEp6Vmtk\nSVlWRlVUVzVDZVRKQmFrVkJZbGxGTkRSWlp6UkJjbWRoWlZGaVNUZGhhMkp6WjNSNlpqQnlUSGg1\nU1RWR1RncHNiMmR5ZUcxV1dFdFJNVkUwYzI1NmVWWndSa05tUW05WFpraFdVMmhUUm1rM2JHUm9S\nV3RsU0ZaQ1ExaHNPVzlYUTI5UUszQmtUalp0UjFsb1dGTlZDbFZVYUd4RVpXcEZNV2x0ZVhGTmVI\nTnhTblJJYjJsdFoxTnJkWE5SVkVWVk1ETXdZVWRrUWtOVWNITXpaM0JPTWtKQmNqVm5SMVpDY0hk\nalJtOHZjazRLT1hKbE1FSk5URTFCU21SSFdGSlVSekJLWmtJNE1XNVVWUzlSUFFvdExTMHRMVVZP\nUkNCRFJWSlVTVVpKUTBGVVJTMHRMUzB0Q2c9PSIsInZlcmlmaWNhdGlvbiI6e319XX19LCJ0aW1l\nb3V0cyI6e30sInZlcnNpb24iOiIyLjIuMCJ9LCJuZXR3b3JrZCI6e30sInBhc3N3ZCI6e30sInN0\nb3JhZ2UiOnt9LCJzeXN0ZW1kIjp7fX0=" }, "masterVMSize": { "type": "String", "value": "Standard_D8s_v3" }, "numberOfMasters": { "type": "Int", "value": 3 }, "privateDNSZoneName": { "type": "String", "value": "nicpwhecluster." }, "sshKeyData": { "type": "SecureString" } }, "parametersLink": null, "providers": [ { "id": null, "namespace": "Microsoft.Network", "registrationPolicy": null, "registrationState": null, "resourceTypes": [ { "aliases": null, "apiProfiles": null, "apiVersions": null, "capabilities": null, "defaultApiVersion": null, "locationMappings": null, "locations": [ "japaneast" ], "properties": null, "resourceType": "privateDnsZones/SRV" }, { "aliases": null, "apiProfiles": null, "apiVersions": null, "capabilities": null, "defaultApiVersion": null, "locationMappings": null, "locations": [ "japaneast" ], "properties": null, "resourceType": "networkInterfaces" }, { "aliases": null, "apiProfiles": null, "apiVersions": null, "capabilities": null, "defaultApiVersion": null, "locationMappings": null, "locations": [ "japaneast" ], "properties": null, "resourceType": "privateDnsZones/A" } ] }, { "id": null, "namespace": "Microsoft.Compute", "registrationPolicy": null, "registrationState": null, "resourceTypes": [ { "aliases": null, "apiProfiles": null, "apiVersions": null, "capabilities": null, "defaultApiVersion": null, "locationMappings": null, "locations": [ "japaneast" ], "properties": null, "resourceType": "virtualMachines" } ] } ], "provisioningState": "Succeeded", "templateHash": "6843960507431905901", "templateLink": null, "timestamp": "2021-02-24T08:02:39.379059+00:00", "validatedResources": null }, "resourceGroup": "nicpwhecluster-h8lq5-rg", "tags": null, "type": "Microsoft.Resources/deployments" } (3)ワーカーマシンの作成 まず変数をエクスポートします。 $ export WORKER_IGNITION=`cat /home/user01/os45/worker.ign | base64` マニュアルページにある「ワーカーマシンの ARM テンプレート」の内容をコピーして/home/user01/os45ディレクトリに06_workers.jsonというファイルを作成し、コマンドを実行します。 $ az deployment group create -g ${RESOURCE_GROUP} --template-file "/home/user01/os45/06_workers.json" --parameters workerIgnition="${WORKER_IGNITION}" --parameters sshKeyData="${SSH_KEY}" --parameters baseName="${INFRA_ID}" {- Finished .. "id": "/subscriptions/<id>/resourceGroups/nicpwhecluster-h8lq5-rg/providers/Microsoft.Resources/deployments/06_workers", "location": null, "name": "06_workers", "properties": { "correlationId": "f5b06e10-75d0-4768-8546-637a838d11f4", "debugSetting": null, "dependencies": [], "duration": "PT1M45.2779547S", "error": null, "mode": "Incremental", "onErrorDeployment": null, "outputResources": [ { "id": "/subscriptions/<id>/resourceGroups/nicpwhecluster-h8lq5-rg/providers/Microsoft.Compute/virtualMachines/nicpwhecluster-h8lq5-worker-japaneast-1", "resourceGroup": "nicpwhecluster-h8lq5-rg" }, { "id": "/subscriptions/<id>/resourceGroups/nicpwhecluster-h8lq5-rg/providers/Microsoft.Compute/virtualMachines/nicpwhecluster-h8lq5-worker-japaneast-2", "resourceGroup": "nicpwhecluster-h8lq5-rg" }, { "id": "/subscriptions/<id>/resourceGroups/nicpwhecluster-h8lq5-rg/providers/Microsoft.Compute/virtualMachines/nicpwhecluster-h8lq5-worker-japaneast-3", "resourceGroup": "nicpwhecluster-h8lq5-rg" }, { "id": "/subscriptions/<id>/resourceGroups/nicpwhecluster-h8lq5-rg/providers/Microsoft.Network/networkInterfaces/nicpwhecluster-h8lq5-worker-japaneast-1-nic", "resourceGroup": "nicpwhecluster-h8lq5-rg" }, { "id": "/subscriptions/<id>/resourceGroups/nicpwhecluster-h8lq5-rg/providers/Microsoft.Network/networkInterfaces/nicpwhecluster-h8lq5-worker-japaneast-2-nic", "resourceGroup": "nicpwhecluster-h8lq5-rg" }, { "id": "/subscriptions/<id>/resourceGroups/nicpwhecluster-h8lq5-rg/providers/Microsoft.Network/networkInterfaces/nicpwhecluster-h8lq5-worker-japaneast-3-nic", "resourceGroup": "nicpwhecluster-h8lq5-rg" } ], "outputs": null, "parameters": { "baseName": { "type": "String", "value": "nicpwhecluster-h8lq5" }, "nodeVMSize": { "type": "String", "value": "Standard_D4s_v3" }, "numberOfNodes": { "type": "Int", "value": 3 }, "sshKeyData": { "type": "SecureString" }, "workerIgnition": { "type": "String", "value": "eyJpZ25pdGlvbiI6eyJjb25maWciOnsiYXBwZW5kIjpbeyJzb3VyY2UiOiJodHRwczovL2FwaS1p\nbnQubmljcHdoZWNsdXN0ZXIuYXp1cmUtY2xvdWRwYWstbmljcHRlc3QuY29tOjIyNjIzL2NvbmZp\nZy93b3JrZXIiLCJ2ZXJpZmljYXRpb24iOnt9fV19LCJzZWN1cml0eSI6eyJ0bHMiOnsiY2VydGlm\naWNhdGVBdXRob3JpdGllcyI6W3sic291cmNlIjoiZGF0YTp0ZXh0L3BsYWluO2NoYXJzZXQ9dXRm\nLTg7YmFzZTY0LExTMHRMUzFDUlVkSlRpQkRSVkpVU1VaSlEwRlVSUzB0TFMwdENrMUpTVVJGUkVO\nRFFXWnBaMEYzU1VKQlowbEpVek0xZEVoNmRtUnVWMFYzUkZGWlNrdHZXa2xvZG1OT1FWRkZURUpS\nUVhkS2FrVlRUVUpCUjBFeFZVVUtRM2hOU21JelFteGliazV2WVZkYU1FMVNRWGRFWjFsRVZsRlJS\nRVYzWkhsaU1qa3dURmRPYUUxQ05GaEVWRWw0VFVSSmVVNUVRVEpOUkVFd1RteHZXQXBFVkUxNFRV\nUkplVTFxUVRKTlJFRXdUbXh2ZDBwcVJWTk5Ra0ZIUVRGVlJVTjRUVXBpTTBKc1ltNU9iMkZYV2pC\nTlVrRjNSR2RaUkZaUlVVUkZkMlI1Q21JeU9UQk1WMDVvVFVsSlFrbHFRVTVDWjJ0eGFHdHBSemwz\nTUVKQlVVVkdRVUZQUTBGUk9FRk5TVWxDUTJkTFEwRlJSVUV5VW14VlJuVjBVbUZtVHpRS2FVcFBh\nVTR4YVZvMWNYWmFkMjQ1TUdaNGQwZzVRelF5T0M5MWFHVXZkV2hXVTJOdVVURnVjV3Q0UVd0c2JW\naHlNbmhVVmxsMWJXUmFOREptTmtJeE5nb3dkM0F3TjNWbFYxbHBTMlZPT1VkclprUjVPRlpZUTJS\nTU5raHNkRGxVWVVrd01UQkpUakJUVUVWWldFeDFORmxsSzJoRVRpdHJkR3RoV0V0a1QycG5DbWRO\nTHpOQmMwRlFSM1p5UjNoMlVUa3ZURloxZW5odVkwNUhWVUppTUZnNU1tVnFURWRMVGtoalZITlNU\nSFZtWVdSSFJFOVBibXhYZDJWWkwySmFOa1lLZUZCQ05FVjVhVVJHUVhsbmEwUkVSVFJyT0RkeVNY\naDVZVkpZTkhRMVkwOXpSWFpJZFdOSE5tUXdSekl3U2xRMWMzcHZhV0pwTUN0NVJGcE1kRk51ZFFw\nYWIyWkJTaXREZVRoVloxSndZWE5sYUZjeFpteHNWRklyZURSUVVDODFTbFUxYURWV00ySnlSM0pJ\nVjBwTVFqUnVhemszWm10aVFVTTJiMlZzUkdOWENqbFNlamQwVTFKT1RWRkpSRUZSUVVKdk1FbDNV\nVVJCVDBKblRsWklVVGhDUVdZNFJVSkJUVU5CY1ZGM1JIZFpSRlpTTUZSQlVVZ3ZRa0ZWZDBGM1JV\nSUtMM3BCWkVKblRsWklVVFJGUm1kUlZUTktkRWMzZGtKb1RrWlllREptYzNWbFdHNTNVV0ZoTjNW\nRVdYZEVVVmxLUzI5YVNXaDJZMDVCVVVWTVFsRkJSQXBuWjBWQ1FVbHhNa2xNU1c4NGNVbFpOMXA0\nZERoc04yOUthVzQzY0U1SFZrZ3ZRMDF4Umlzd01GTlpVemQ2VGxBck1GZzBRMU5RUWtrd1dtWllW\nM1Z3Q2s1U1kwVkpTVGxqVW5vME1tczBOVlZTVm1saU5XeFdVR1prY1RSa2NEZG1aSGRKVVdGc04y\nTnNPSEJVVUhJMVpXcG9SbEJGVmpSeFpGY3pWSGRFVkhjS00yOTZZWGc1UmtVM1p5dGxZbEp6Vmtk\nSVlWRlVUVzVDZVRKQmFrVkJZbGxGTkRSWlp6UkJjbWRoWlZGaVNUZGhhMkp6WjNSNlpqQnlUSGg1\nU1RWR1RncHNiMmR5ZUcxV1dFdFJNVkUwYzI1NmVWWndSa05tUW05WFpraFdVMmhUUm1rM2JHUm9S\nV3RsU0ZaQ1ExaHNPVzlYUTI5UUszQmtUalp0UjFsb1dGTlZDbFZVYUd4RVpXcEZNV2x0ZVhGTmVI\nTnhTblJJYjJsdFoxTnJkWE5SVkVWVk1ETXdZVWRrUWtOVWNITXpaM0JPTWtKQmNqVm5SMVpDY0hk\nalJtOHZjazRLT1hKbE1FSk5URTFCU21SSFdGSlVSekJLWmtJNE1XNVVWUzlSUFFvdExTMHRMVVZP\nUkNCRFJWSlVTVVpKUTBGVVJTMHRMUzB0Q2c9PSIsInZlcmlmaWNhdGlvbiI6e319XX19LCJ0aW1l\nb3V0cyI6e30sInZlcnNpb24iOiIyLjIuMCJ9LCJuZXR3b3JrZCI6e30sInBhc3N3ZCI6e30sInN0\nb3JhZ2UiOnt9LCJzeXN0ZW1kIjp7fX0=" } }, "parametersLink": null, "providers": [ { "id": null, "namespace": "Microsoft.Resources", "registrationPolicy": null, "registrationState": null, "resourceTypes": [ { "aliases": null, "apiProfiles": null, "apiVersions": null, "capabilities": null, "defaultApiVersion": null, "locationMappings": null, "locations": [ null ], "properties": null, "resourceType": "deployments" } ] } ], "provisioningState": "Succeeded", "templateHash": "18038938870077969594", "templateLink": null, "timestamp": "2021-02-24T08:19:00.447842+00:00", "validatedResources": null }, "resourceGroup": "nicpwhecluster-h8lq5-rg", "tags": null, "type": "Microsoft.Resources/deployments" } (4)クラスターへのログイン ocコマンドにてクラスタにログインします。 $ export KUBECONFIG=/home/user01/os45/auth/kubeconfig $ oc whoami system:admin (5)マシンの証明書署名要求の承認 まずマスターに認識されるすべてのノードを一覧表示します。まだワーカーマシンが表示されていません。 $ oc get nodes NAME STATUS ROLES AGE VERSION nicpwhecluster-h8lq5-master-0 Ready master 21m v1.18.3+e574db2 nicpwhecluster-h8lq5-master-1 Ready master 21m v1.18.3+e574db2 nicpwhecluster-h8lq5-master-2 Ready master 21m v1.18.3+e574db2 保留中の証明書署名要求 (CSR) でいくつか「Pending」になっていることを確認します。 $ oc get csr NAME AGE SIGNERNAME REQUESTOR CONDITION csr-4ltzq 21m kubernetes.io/kube-apiserver-client-kubelet system:serviceaccount:openshift-machine-config-operator:node-bootstrapper Approved,Issued csr-5ff59 22m kubernetes.io/kube-apiserver-client-kubelet system:serviceaccount:openshift-machine-config-operator:node-bootstrapper Approved,Issued csr-8cxlk 22m kubernetes.io/kube-apiserver-client-kubelet system:serviceaccount:openshift-machine-config-operator:node-bootstrapper Approved,Issued csr-d79hz 21m kubernetes.io/kubelet-serving system:node:nicpwhecluster-h8lq5-master-2 Approved,Issued csr-ghhrm 22m kubernetes.io/kubelet-serving system:node:nicpwhecluster-h8lq5-master-1 Approved,Issued csr-jtts9 7m15s kubernetes.io/kube-apiserver-client-kubelet system:serviceaccount:openshift-machine-config-operator:node-bootstrapper Pending csr-m68ns 7m kubernetes.io/kube-apiserver-client-kubelet system:serviceaccount:openshift-machine-config-operator:node-bootstrapper Pending csr-vgtp6 7m2s kubernetes.io/kube-apiserver-client-kubelet system:serviceaccount:openshift-machine-config-operator:node-bootstrapper Pending csr-wwptz 21m kubernetes.io/kubelet-serving system:node:nicpwhecluster-h8lq5-master-0 Approved,Issued$ oc get csr -o go-template='{{range .items}}{{if not .status}}{{.metadata.name}}{{"\n"}}{{end}}{{end}}' | xargs oc adm certificate approvecertificatesigningrequest.certificates.k8s.io/csr-jtts9 approved certificatesigningrequest.certificates.k8s.io/csr-m68ns approved certificatesigningrequest.certificates.k8s.io/csr-vgtp6 approved 再度マスターに認識されるすべてのノードを一覧表示し、ワーカーマシンがReadyになっていることを確認します。 $ oc get nodes NAME STATUS ROLES AGE VERSION nicpwhecluster-h8lq5-master-0 Ready master 24m v1.18.3+e574db2 nicpwhecluster-h8lq5-master-1 Ready master 25m v1.18.3+e574db2 nicpwhecluster-h8lq5-master-2 Ready master 24m v1.18.3+e574db2 nicpwhecluster-h8lq5-worker-japaneast-1 Ready worker 2m2s v1.18.3+e574db2 nicpwhecluster-h8lq5-worker-japaneast-2 Ready worker 2m6s v1.18.3+e574db2 nicpwhecluster-h8lq5-worker-japaneast-3 Ready worker 2m v1.18.3+e574db2 (6)ブートストラップリソースを削除 これですべてのノードが作成されて利用可能となりましたので、ブートストラップノードと関連するリソースを削除します。 $ ./openshift-install wait-for bootstrap-complete --dir=/home/user01/os45/ --log-level info INFO Waiting up to 20m0s for the Kubernetes API at https://api.nicpwhecluster.:6443... INFO API v1.18.3+e574db2 up INFO Waiting up to 40m0s for bootstrapping to complete... INFO It is now safe to remove the bootstrap resources INFO Time elapsed: 0s $ az network nsg rule delete -g ${RESOURCE_GROUP} --nsg-name ${INFRA_ID}-nsg --name bootstrap_ssh_in $ az vm stop -g ${RESOURCE_GROUP} --name ${INFRA_ID}-bootstrap About to power off the specified VM... It will continue to be billed. To deallocate a VM, run: az vm deallocate. $ az vm deallocate -g ${RESOURCE_GROUP} --name ${INFRA_ID}-bootstrap $ az vm delete -g ${RESOURCE_GROUP} --name ${INFRA_ID}-bootstrap --yes $ az disk delete -g ${RESOURCE_GROUP} --name ${INFRA_ID}-bootstrap_OSDisk --no-wait --yes $ az network nic delete -g ${RESOURCE_GROUP} --name ${INFRA_ID}-bootstrap-nic --no-wait $ az storage blob delete --account-key ${ACCOUNT_KEY} --account-name ${CLUSTER_NAME}sa --container-name files --name bootstrap.ign $ az network public-ip delete -g ${RESOURCE_GROUP} --name ${INFRA_ID}-bootstrap-ssh-pip (7)クラスターのインストールを完了する $ ./openshift-install --dir=/home/user01/os45/ wait-for install-complete INFO Waiting up to 30m0s for the cluster at https://api.nicpwhecluster.:6443 to initialize... INFO Waiting up to 10m0s for the openshift-console route to be created... INFO Install complete! INFO To access the cluster as the system:admin user when using 'oc', run 'export KUBECONFIG=/home/user01/os45/auth/kubeconfig' INFO Access the OpenShift web-console here: https://console-openshift-console.apps.nicpwhecluster. INFO Login to the console with user: "kubeadmin", and password: "<パスワード>" INFO Time elapsed: 1s (8)ログイン $ oc login -u kubeadmin -p  <パスワード>https://api.nicpwhecluster.:6443 The server uses a certificate signed by an unknown authority. You can bypass the certificate check, but any data you send to the server could be intercepted by others. Use insecure connections? (y/n): yLogin successful.You have access to 58 projects, the list has been suppressed. You can list all projects with 'oc projects'Using project "default".    

2021年06月08日

【てくさぽBLOG】WebSphere Hybrid Editionを導入してみた Vol.1 -OpenShift導入編-

こんにちは。 てくさぽBLOGメンバーの岡田です。 今回はIBM WebSphere Hybrid Edition(以下 WSHE)の導入をAzure上で検証してみたので3回シリーズで検証で得られた知見をお伝えします。 当初は以前実施したIBM Cloud Pak for Applications(以下CP4Apps)導入検証をプラットフォームをAzureに変えて検証する予定で進めていたのですが、CP4Appsが販売終了となり後継としてWSHEが発表されたので内容を変更し、WSHEをAzure上で検証することにしました。 今回は3回シリーズの1回目です。 WebSphere Hybrid Editionを導入してみた Vol.1 -OpenShift導入編- *本編 WebSphere Hybrid Editionを導入してみた Vol.2 -WebSphere Liberty導入編- WebSphere Hybrid Editionを導入してみた Vol.3 -ツール編-   1.はじめに 以前、CP4Apps導入検証の際にはAWS上にUser Provisioned Infrastructure(以下、UPI)方式でOpenShift4(以下、OCP4)を構築してみましたが、今回はAzure上でもUPI方式で行ってみました。 なお、筆者はAzure未経験だったので何箇所かつまづきましたが、初心者はこんなところでつまずくんだなあ、と思って読んでいただけると幸いです。 手順は以下を参考にしました。 1.7. ARM テンプレートを使用したクラスターの AZURE へのインストール https://access.redhat.com/documentation/ja-jp/openshift_container_platform/4.5/html/installing_on_azure/installing-azure-user-infra OCP4導入後にWSHEのコンポーネントを導入する予定のため、OCP4のバージョンは4.5を利用しました。(現在はOCP4.5~4.7までサポートされていますが、検証当時はOCP4.5のみサポートでした。) 今回の環境・サーバー構成の概要図は以下となります。Bootstrapを除くと計6ノード構成になります。   2. 事前準備 2-1. 作業用Linux環境準備 OpenShiftのインストール作業に必要なLinux環境を準備します。 今回の作業環境は以下になります。 環境:手元のPC(Windows 10 1909)上にWindows Subsystem for Linux(WSL)+Ubuntu 18.04 実行ユーザー:user01を作成 (1)作業用ディレクトリとして以下2つのディレクトリを作成 /home/user01/os45      ※OpenShift インストールプログラム置き場 /home/user01/os45/conf  ※yamlやjsonなどの設定ファイル置き場 (2)Azure CLIインストール (3)jqパッケージインストール (4)cloudctlインストール (5)ocコマンドインストール 以下の手順でダウンロードします。 ・Red Hat Custmer Portalにログインします。「ダウンロード」をクリックし、次の画面で"Red Hat OpenShift Container Platform"をクリックします。 ・次の画面でバージョン4.5の最新バージョンを選択し、画面下から”OpenShift v4.5 Linux Client"を/home/user01/os45フォルダにダウンロードし、ファイルを解凍し、パスの通っている/user/local/binフォルダに移動します。   2-2. ファイルの準備 (1)OCP4.5インストールファイルのダウンロード ・ocコマンドをダウンロードしたのと同じページで”OpenShift v4.5 Linux Installer"を/home/user01/os45フォルダにダウンロードします。 (2)Pull Secretファイル Red Hat OpenShift Cluster Manager サイトの「Pull Secret」ページから、インストールプルシークレットを/home/user01/os45フォルダにダウンロードします。   2-3. パブリックDNSゾーン設定 (1)リソースグループを作成 まずリソースグループを作成します。今回は「ocp-cluster」という名前のリソースグループを作成しました。 次の画面のタグは特に設定せずに進み、確認画面で「作成」ボタンをクリックします。 (2)App Serviceドメインを作成 今回は「azure-cloudpak-nicptest.com」という名前で作成しました。事前にレジストラからドメイン名を購入せずに作成できるかやってみましょう。 【連絡先情報】を入力します。 ドメインのデプロイが完了したら、nslookupやdigコマンドで確認しました。正しく引けたので、無事ドメインが作成できたようです。別途ドメイン名を用意しておかなくてもよかったです。 〈つまづきポイント:その1〉DNSドメインが正しく作成されない 連絡先情報の”州または準州”の箇所に、最初は”Tokyo-to"と入力してドメインを作成たところ、以下のエラー画面となり正常に作成されませんでした。 原因は”Tokyo-to”と入力した箇所でした。一旦既に作成されていたリソースを削除し、再作成の際に”Tokyo"と入力することで無事ドメインが作成できました。以下は再作成で成功した画面です。 〈つまづきポイント:その2〉Azure アカウント制限は拡張する必要がある? 参考にしたマニュアルにはvCPUの「デフォルトの Azure 制限」がリージョン毎に20、説明に”デフォルトのクラスターには 40 の vCPU が必要であるため、アカウントの上限を引き上げる必要があります。”と書いてあったので引き上げないといけないと思い込みサポートに事情を説明しリクエストしました。ところが、サポートからの回答は契約したサブスクリプションではデフォルトの制限は350コアで必要数は最初から超えているとのことでした。 Azure Portal の [サブスクリプション] ページの [使用量 + クォータ] セクションで確認できると教えてもらいましたので、皆さんもAzure上でOpenShift構築を実施する前には一度確認してみてください。   2-4. サービスプリンシパルの作成 そもそもサービスプリンシパルとはなんでしょう?Azure初心者の私もよく分からず、調べた結果、「Azureリソースを管理・操作するアプリケーションのためのアカウント」とのことでした。 今回はAzure Resource Managerでリソースが構築されるので、そのための専用アカウントと理解しました。 以下を実施します。 (1)Azureへのログイン(az login) (2)アクティブなアカウントの詳細を表示して「tenantId」「id」を確認 (3)アカウントのサービスプリンシパルを作成し「appId」「password」を確認 (4)サービスプリンシパルに追加パーミッションを付与 (4-1)User Access Administrator ロールを割り当て (4-2)Azure Active Directory Graph パーミッションを割り当て (5)パーミッション要求を承認   3.OpenShift 導入 3-1. SSH秘密鍵の作成 クラスタの作成後に、ノードにアクセスするためにSSH秘密鍵を作成します。 (1)作業用Linuxマシン上でgenコマンドを実行しSSHキーを作成 (2)ssh-agent プロセスをバックグラウンドタスクとして開始 (3)SSH プライベートキーを ssh-agent に追加   3-2. インストールファイルの作成 (1)install-config.yaml ファイル生成 (2)ARM テンプレートの一般的な変数のエクスポート (3)クラスターの Kubernetes マニフェストを生成 (4)コントロールプレーン、ワーカーノードを定義する Kubernetes マニフェストファイルを削除 (5)Kubernetes マニフェストファイルを変更 (6)変数のエクスポート (7)Ignition 設定ファイルを取得 (8)ファイルの確認   3-3. Azure リソースグループおよびアイデンティティーの作成 OCPクラスタのインストールに必要なリソースグループとアイデンティティーを作成します。 (1)リソースグループを作成 (2)リソースグループの Azure アイデンティティーを作成 (3)Contributor ロールを Azure アイデンティティーに付与 (3-1)ロール割当に必要な変数をエクスポート (3-2)Contributor ロールをアイデンティティーに割り当て   3-4. RHCOS クラスターイメージおよびブートストラップ Ignition 設定ファイルのアップロード (1)Azureストレージアカウントの作成 (2)ストレージアカウントキーを環境変数としてエクスポート (3)VHD の URL を環境変数にエクスポート (4)選択した VHD を blob にコピー (5)blob ストレージコンテナーを作成し、生成されたbootstrap.ignファイルをアップロード   3-5. DNSゾーンの作成 (1)プライベートDNSゾーンを作成   3-6. Azure での VNet の作成 (1)デプロイメントを作成 (2)VNet テンプレートをプライベート DNS ゾーンにリンク   3-7. RHCOS クラスターイメージのデプロイ (1)RHCOS VHD blob URL を変数としてエクスポート (2)クラスターイメージのデプロイ   3-8.ネットワークおよび負荷分散コンポーネントの作成 (1)ネットワークオブジェクトおよびロードバランサーのデプロイ (2)変数のエクスポートとクラスターを既存のパブリックゾーンに追加 以上で、OCPノードを作成する手前まで完了しました。   3-9.ノードの作成 (1)ブートストラップマシンの作成 (2)コントロールプレーンの作成 (3)ワーカーマシンの作成 (4)クラスターへのログイン (5)マシンの証明書署名要求の承認 (6)ブートストラップリソースを削除 (7)クラスターのインストールを完了する (8)ログイン クラスタにログインできたのでインストールは成功です! 長かったですね、最初のディレクトリ作成から数えて計50工程がようやく終わりました。   まとめ いかがでしたでしょうか。やはりUPIは作業工程が多くて大変でした。 記載のとおり、Azureでの確認や設定で何箇所かつまづきましたが、コマンドを実行していくところはマニュアル記載のコマンドでエラーなく進めることができました。 もっと簡単にOCP環境を構築したいのであればIPI(Installer Provisioned Infrastructure)方式もありますが、構成をカスタマイズしたくてUPI方式を選択することもあるかと思いますので、その際にこの記事が参考になればと思います。 ここまでお読みいただきありがとうございました。 次回は構築したこのOpenShift上でのWebSphereをインストールしてみた内容をお伝えいたします。   お問い合わせ この記事に関するご質問は下記までご連絡ください。 エヌアイシー・パートナーズ株式会社 技術支援本部 E-Mail:nicp_support@NIandC.co.jp  

2021年06月04日

【てくさぽBLOG】IBM Power Virtual ServerのAIX環境を日本ロケールにしてみた

こんにちは。 てくさぽBLOGメンバーの村上です。 本ブログは、IBM Power Virtual Server をトライしてみた内容や感想をご紹介するブログです。 シリーズ化していますので、まずインデックスのご紹介をします。 インデックス ・IBM Power Virtual ServerでAIX環境を作ってみた ・IBM Power Virtual ServerのAIX環境にSWを導入してみた  ・IBM Power Virtual ServerのAIX環境を日本ロケールにしてみた ← 本ページ ・IBM Power Virtual ServerのAIX環境をバックアップしてみた(Part.1) ・IBM Power Virtual ServerのAIX環境をバックアップしてみた(Part.2) ・IBM Power Virtual ServerのAIX環境とIBM Cloud x86環境を接続してみた   本ページでは Power Virtual Server のAIX環境を日本ロケールにする手順を以下の1)、2)のセクションに分けてご紹介します。 1)  事前確認 2)  ロケールの変更 利用したクライアント端末(私のPC)は、Windows10 バージョン2004です。   1) 事前確認 現在のロケールを確認します。 # locale LANG=en_US LC_COLLATE="en_US" LC_CTYPE="en_US" LC_MONETARY="en_US"  LC_NUMERIC="en_US" LC_TIME="en_US" LC_MESSAGES="en_US" LC_ALL= 「en_US」になっています。「英語」環境ですね。 「英語」環境を「日本」環境に変更する前に、日本語のパッケージがAIXにインストールされているかを確認します。 # locale -a C POSIX JA_JP.UTF-8 JA_JP Ja_JP.IBM-943 Ja_JP en_US.8859-15 en_US.IBM-858 en_US.ISO8859-1 en_US ja_JP.UTF-8 上記の出力より、おなじみの日本語の文字コード ・JA_JP:UTF-8 ・Ja_JP:IBM-943 がインストールされていることが分かりました。 Power Virtual Server サービスを東京リージョン上に作成したので、標準で日本語がインストールされているんでしょうね。 AIXといえば、IBM-943 の Shift-JIS というイメージがありませんか?! 私が基盤SEをしていた頃は IBM-943 を設定することが多かった気がするのですが、近年は UTF-8 をよく目にするので、 今回は JA_JP:UTF-8 を設定します。 2)ロケールの変更 ロケールの変更は、smit で 実施します。 # smit lang ・「Change/Show Primary Language Environment」で Enter を押します。 ・「Change/Show Cultural Convention, Language, or Keyboard」で Enter を押します。 ・「Primary CULTURAL convention」で F4 を押します。 ・リストから「UTF-8  Japanese [JA_JP]」を選択し、Enter を押します。 ・「Primary LANGUAGE translation」で F4  を押します。 ・リストから「UTF-8  Japanese [JA_JP]」を選択し、Enter を押します。 ・「INPUT device/directory for software」で F4 を押します。 ・リストから「/usr/sys/inst.images」を選択し、Enter を押します。 ・すべての設定を確認して Enter を押します。 数分待つとOKが出ます。これでロケールの変更が完了です。 ・設定を反映させるために、AIX環境を再起動します。 # shutdown -Fr AIX環境が起動しているかは WEBのポータル画面で確認できます。 ・インスタンスの「状況」が「アクティブ」になっていればOSが起動しています。 ・AIX環境にログインし、ロケールが変更できていることを確認します。 # locale LANG=JA_JP LC_COLLATE="JA_JP" LC_CTYPE="JA_JP" LC_MONETARY="JA_JP" LC_NUMERIC="JA_JP" LC_TIME="JA_JP" LC_MESSAGES="JA_JP" LC_ALL= JA_JP:UTF-8に変更できました! smit の出力が日本語になったか確認しておきます。 # smit 日本語で表示されるようになりました! 日本語のsmit。落ち着きます。 ソフトウェアを導入する前に日本語化しておけばよかったです。。 ※ソフトウェアを導入したブログはこちら 【やってみた】IBM Power Virtual Server のAIX環境にSWを導入してみた   次のブログでは、AIXインスタンスのバックアップ手順をご紹介します。 【やってみた】IBM Power Virtual Server のAIX環境をバックアップしてみた Part.1   最後に テレワークが本格的になり、あっという間に1年が経過しました。 1年前は、Power Virtual Server は私にとって全く身近でなく、お客様からの問い合わせも殆どありませんでしたが、今はぐっと身近なクラウドになり、問い合わせ件数は確実に増加しています。 アフターコロナではどんな生活様式が当たり前になっているのか、まだ全く想像できませんが、変化の速い Power Virtual Server の1年後も想像できません。 ただ、Power Virtual Server が AIX や IBM i ユーザの更改先として有力候補になってくる日は近いだろうなと感じます。   お問い合わせ この記事に関するご質問は下記までご連絡ください。 エヌアイシー・パートナーズ株式会社 技術支援本部 E-Mail:nicp_support@NIandC.co.jp  

2021年05月26日

【てくさぽBLOG】IBM Power Virtual ServerのAIX環境にSWを導入してみた

こんにちは。 てくさぽBLOGメンバーの村上です。 本ブログは、IBM Power Virtual Server をトライしてみた内容や感想をご紹介するブログです。   シリーズ化していますので、まずインデックスのご紹介をします。 インデックス ・IBM Power Virtual ServerでAIX環境を作ってみた ・IBM Power Virtual ServerのAIX環境にSWを導入してみた ← 本ページ ・IBM Power Virtual ServerのAIX環境を日本ロケールにしてみた ・IBM Power Virtual ServerのAIX環境をバックアップしてみた(Part.1) ・IBM Power Virtual ServerのAIX環境をバックアップしてみた(Part.2) ・IBM Power Virtual ServerのAIX環境とIBM Cloud x86環境を接続してみた   本ページは Power Virtual Server のAIXインスタンスを作成し終わったところからのご紹介となり、以下の③~⑤のセクションをご紹介します。 1)  Power Virtual Server サービスの作成 2)  AIXインスタンス 作成 3)  AIXインスタンス 接続 4)  ストレージ・ボリュームの反映 5)  ソフトウェア導入 利用したクライアント端末(私のPC)は、Windows10 バージョン2004です。 3) AIXインスタンス接続 「2) AIXインスタンス作成」で作成したインスタンスに接続し、AIX環境にログインします。 <IBM Cloud からログアウトした状態からの説明です> ・IBM Cloud にログインし、画面左上の四本線「ナビゲーションメニュー」をクリックし、下部に表示される「リソース・リスト」をクリックします。      ・「Services」にPower Virtual Server のサービスが表示されますので、サービス名をクリックしてAIXインスタンス一覧の画面に移動します。 ※上記の出力例は、Power Virtual Server と同じタイミングで Watson Studio の検証も行っていたので、Watson Studioも「Services」に表示されています。 ・インスタンス名がリンクになっているので「AIX72-test」をクリックします。 インスタンスの詳細の画面に移動しました。 ・「サーバー詳細」の画面の右上にある「VMアクション」のプルダウンから「コンソールのオープン」を選択します。 ・AIXのコンソールが表示されます。 ・初期状態は、root ユーザでログインできてしまいます。 root ユーザでのログインはセキュリティ的に問題があるため、ログイン可能なAIXユーザを作成しパスワードを設定します。 そして、root ユーザではログインできないように設定変更しておきます。 ※ユーザ作成とroot ユーザの設定変更手順は省きます Power Virtual Server のポータルのコンソールは一定時間利用しないとタイムアウトになって接続が切れてしまいます。また、フォントや画面サイズを変更できないため出力が複数行に分かれてしまい使いにくいです。 そのため、次は、Power Virtual Serverのポータルのコンソールではなく、Tera Termや PuTTY などのターミナル・エミュレータ・ソフトウェアを利用してAIX環境にログインする方法を試します。 外からの接続になるので「外部IP」を利用します。 ・「ネットワーク・インターフェース」の項目に記載がある「外部IP」をコピーします。 以下はTeraTerm を使用した出力例です。 ・「ホスト」にコピーした外部IPをペーストし、プロトコルは「SSH」 を選択して「OK」をクリックします。 ・作成したユーザとユーザに設定したパスワードを入力し「OK」をクリックします。 外部IPを利用してAIX環境へのログインができました。 外部IPからの接続はパブリックネットワーク接続となり、イメージ図で表すと以下の赤線です。 ※上記の画像はIBMCloud柔らか層本(IBMサイト)から一部を抜粋しています。 (Version3.1_20210517 版) 4) ストレージ・ボリュームの反映 さて、この後、AIXインスタンスにソフトウェアを導入するので、ストレージ容量が足りなくなるかもしれません。ストレージ容量を増やしておきます。 「【やってみた】IBM Power Virtual Server でAIX環境を作ってみた」のブログで記載しましたが、AIXインスタンスは初期で20GBがrootvgにアサインされており、初期状態で既に15GB程度がシステムによって使用されているため、空き領域が5GB程度と少なくなっています。 インスタンス作成時に追加したストレージ・ボリューム「stg01」は、まだどの Volume Groupにも属しておらず、すぐに利用できる状態ではありません。 そのため、「stg01」をディスク領域として見えるように設定します。 ・「接続されているボリューム」の「stg01」を「ブート可能」にするため「オフ」の部分をクリックします。 ・確認画面になりますので「はい」をクリックします。 ブート可能設定に成功したメッセージが出力されます。 ・「ブート可能」のステータスが「オン」になっていることを確認します。 ・AIXインスタンスへログインし、物理ボリュームを認識させるコマンドを入力ます。 # cfgmgr ・設定前に現在のrootvg の容量を確認しておきます。 # lsvg rootvg 5,472MBの空きがあり、rootvg の容量は20GB(20,448MB)です。 ・ AIXインスタンスに認識されているPVを確認し、どのVGにも属していないhdisk0 を rootvg に割り当てます。 # lspv # extendvg rootvg hdisk0 ・再度「# lspv」コマンドを入力し、hdisk0がrootvgに追加されたことを確認します。 # lspv ・実際に容量が変更されたか確認します。 # lsvg rootvg 20GBだった rootvgに 10GBの「stg01」を追加したので、容量が30GB(30,656MB) になり、空き容量も15,680MBに増えました。 5) ソフトウェア導入 では、AIXインスタンスにソフトウェアを導入してみます。 簡単に導入できるコンパイラー「XL C/C++ v16.1(IBMサイト)」を入れることにしました。 XL C/C++導入作業前にやっておいたこと ・「システム前提条件」を読んでおきます ・XL C/C++ソフトウェアをダウンロードします。ソフトウェアは「60日間のFreeトライアル版」を利用しました。 ・XL C/C++ソフトウェアをAIX環境へ転送するツールをインストールしておきます。私はWinSCPをダウンロードしました。コマンドプロンプトでSFTP転送を実施してもOKです。 ・AIX環境上にXL C/C++ソフトウェアを展開して保管するためのファイルシステムを作成します(1GBの/work というファイルシステムを作成しました)。 ----------------------------------------------------------------------------------------------------------------------------------------------- ソフトウェア導入前のAIX環境の確認と設定を行います。 ・OSレベルの確認(サポートされているレベルか確認) # oslevel -s 7200-05-01-2038 ・必須ファイルセットの確認(ファイルセットが導入されているか確認) # lslpp -L bos.adt.include bos.adt.lib bos.adt.libm bos.loc.\* bos.rte bos.rte.libc ・導入先「/opt」ファイルシステムの拡張(500MBの空きが必要) # df -m /opt Filesystem    MB blocks      Free %Used    Iused %Iused Mounted on /dev/hd10opt     384.00     41.54   90%    11471    52% /opt # chfs -a size=+500M /opt Filesystem size changed to 1835008 # df -m /opt Filesystem    MB blocks      Free %Used    Iused %Iused Mounted on /dev/hd10opt     896.00    553.46   39%    11471     9% /opt 「/opt」ファイルシステムが41.54MBの空き容量だったので、500MB 拡張しました。 ・ローカルPCにダウンロードしておいたXL C/C++ソフトウェアを、AIX環境にアップロードします。アップロード先は事前に作成したファイルシステム/work です。 ファイル転送はWinSCPを利用して行いました。 ・AIX環境へのファイル転送が完了したら、AIX上で圧縮ファイルを解凍(展開)します。 # cd /work # ls -al total 564784 drwxrwxrwx    3 root     system          256 Jan 25 03:51 . drwxr-xr-x   21 root     system         4096 Jan 11 20:26 .. -rw-r--r--    1 fumi     grp01     289164548 Jan 07 00:05 IBM_XL_C_CPP_V16.1.0.0_AIX_EVAL.tar.Z drwxr-xr-x    2 root     system          256 Jan 25 03:44 lost+found # uncompress IBM_XL_C_CPP_V16.1.0.0_AIX_EVAL.tar.Z  # ls -al | grep XL -rw-r--r--    1 fumi     grp01     307650560 Jan 07 00:05 IBM_XL_C_CPP_V16.1.0.0_AIX_EVAL.tar # tar -xvf IBM_XL_C_CPP_V16.1.0.0_AIX_EVAL.tar これでソフトウェア導入前の事前準備が整いました。 あとはsmitで XL C/C++ を導入するだけです。 # cd /work/XLC_C/usr/sys # smit install_latest License agreement → YES 簡単に導入できました! ストレージ・ボリュームを追加する手順が Power Virtual Server 独自ではありますが、オンプレミスの環境にストレージを追加することを想像したら・・Power Virtual Server の方が遥かにスピーディーで簡単です。   ところで、ソフトウェアを導入している時に気付いてはいたのですが、なんだか smit が使いにくいと思ったら、smit を英語表記のまま利用していました。久しぶりに smit を使ったのでロケールを日本語化することを忘れていました。 次のブログでは、言語環境(ロケール)を日本語にした手順をご紹介します。↓ 【やってみた】IBM Power Virtual Server のAIX環境を日本ロケールにしてみた   最後に Power Virtual Server のポータルWEB画面は使いやすいですが、あくまでも基盤(IaaS)を用意するまでの支援で、細かい設定はAIX環境内で実施しなくてはいけないことが分かりました。 そして、じっくり読んでいただいた方はお気付きかもしれませんが、XL C/C++ はソフトウェア保管先を含めても1.5GB程度の容量があれば導入できるので、ストレージ・ボリュームを拡張する必要がありませんでした・・。 せっかく追加したストレージ・ボリュームで、かつ、月400円程度(10GB)の課金ではありますが、不要なので削除しました。 必要ないリソースをすぐに削除できるのは、検証環境には大変ありがたい機能です。 ストレージ・ボリューム削除の手順は、また後日アップデートしたいなと思っています。   お問い合わせ この記事に関するご質問は下記までご連絡ください。 エヌアイシー・パートナーズ株式会社 技術支援本部 E-Mail:nicp_support@NIandC.co.jp   参考情報 IBM Power Virtual Server (製品情報)  

2021年05月25日

【てくさぽBLOG】「IBM Think 2021」に参加した ~デジタル世紀への本格参入~

こんにちは。てくさぽBLOGメンバーの山田です。 今年も「IBM Think」に参加しました。 昨年同様、IBM 独自の Watson Media を利用したデジタル開催でしたが、今年はアジア地域の時間帯に合わせた配信や機械翻訳に加え日本語同時通訳付きセッションもあり、年々参加しやすくなっています。 6月23日まで Think 2021 オンデマンドでセッションが視聴可能です。 「Think 2021 / Partner Experience at Think (IBMサイト)」(※IBM IDが必要となります)   AIは、驚異的な量のデータの意味を理解できる唯一の方法 昨年4月に CEO に就任後初めて本格的に昨年度の成果や次の方針を伝える場となるクリシュナ氏の基調講演では、昨年から方針は変わらず、キー・テクノロジーであるハイブリッド・クラウドと AI へ更に注力し、より具体的な新しいソリューションとして以下の発表がありました。 IBM Watson Orchestrate AutoSQLのICP4Dへの組み込み Project CodeNet 昨年はバンキング・ヘルス・テレコムなどインダストリー色の強い発表が多くありましたが、今年は製品・サービスでの発表が色濃いとという印象でした。 クリシュナ氏のメッセージは、 "工場や機械に電力が供給されてきたように、あらゆるソフトウェアに AI を活用したインテリジェントが組み込まれていく、そして、依然としてスキルと専門知識の欠如が AI採用の障壁となっている状況に対する解決策を IBM は提供していく" というものでした。   エンドユーザの活動を自動化・省力化するソリューション 「IBM Watson Orchestrate」 IBM Watson Orchestrate は、IBM としては珍しい、エンドユーザの活動を自動化・省力化するインタラクティブな AIソリューションとして発表されました。 IBM が Watson として培った自然言語処理をベースとした AIテクノロジーにより、Salesforce、SAP、Workday などの一般的なビジネスアプリケーションや、チャット、カレンダー、メールなどの標準的なコラボレーションツールと連携可能で、最大50%の時間を取り戻すことができると言います。 会議スケジュール調整や承認などの日常業務で、AI が適切なアラートや分析結果を指示し、提案書作成などまさに個人の生産性を向上させることが具体的にイメージできるソリューションです。 これは、昨年の Think で発表された、汎用的に AI を適用し易い IT運用の自動化にフォーカスしたソリューションであった IBM Watson AIOps に対し、よりオフィスワークへ AI適用範囲を拡大し、営業や人事・オペレーションなど、日常業務のあらゆる自動化へ組み込めるテクノロジーを提供することで、よりパートナー様がイメージできるソリューションであると感じました。 図1:IBM Watson Orchestrate の概念 単なるチャットボットやデジタルアシスタンスとは違うことは、デモ*をみていただいた方がイメージが沸くと思います。 デモページ:「Watson Orchestrate Demo (IBMサイト)」 上記のデモは日本語字幕がありませんが、Thinkオンデマンドのセッションでは日本語字幕もありお勧めです。 Thinkオンデマンド セッション:「Think 2021 (IBMサイト)」 Watson Orchestrate は、OpenShiftベースの IBM Cloud Pak for Business Automation の一部として未だプレビュー中ですが、2021年度中に提供開始予定です。   速度は8倍、コストは半分。 データ管理ソリューション「AutoSQL」 次に、AIベースのソリューション「AutoSQL」の紹介がありました。 AI の採用を拡大する際の課題の1つは、機械学習に必要なデータの管理です。 企業は、貴重な洞察につながる可能性があるデータを大量に保有していますが、パブリッククラウド、プライベートクラウド、オンプレミスなど複数の場所に分散されており、実現には膨大な労力とコストが掛かるのが現実でした。 実際 Cloud Pak for Data においても、日本のお客様からの要望の多くがデータカタログ化にあり、IBM は Information Management領域での知見を惜しみなく IBM Cloud Pak for Data に取り込んでいます。 今回発表された AutoSQL は、自動的にデータカタログを作成する「AutoCatalog」と合わせて活用されることが想定されますが、この実現により複数の場所に保管されているデータウェアハウスやストリーミングデータなど、異なるデータソースを移動させることなく同じクエリーで検索することができる高性能のユニバーサルクエリエンジンとなります。 IBM からの発表によれば、「以前の8倍の速度で、他の比較されたデータウェアハウスのほぼ半分のコスト」の効果があるそうです。 AutoSQL は、IBM Cloud Pak for Data の機能追加として提供される予定です。   OpenShiftが大きな鍵を握る、オープンへのこだわり IBM President であるハースト氏は、"より企業が競争に打ち勝つにはイノベーションが必須であり、オープンであることは戦略的なビジネス上の決定である" と語りました。 オープンとはオープンソースという意味に閉じず、オープンスタンダード、オープン組織、オープンカルチャーなど多岐にわたりますが、多くの場所で実行可能な「オープン」の実現には Red Hat OpenShift のテクノロジーがベースとなると述べています。 これは、IBM のハイブリッド・マルチクラウド戦略や、フォーカス製品である IBM Cloud Paks からも明確にメッセージされていますし、IBM は引続き OpenShift を軸にテクノロジー戦略を推し進める事に何も変わりはなく、ブレのない姿勢を強く印象付けたメッセージだったと感じました。 そのほか、量子コンピューティング IBM Quantum用コンテナ・サービスである Qiskit Runtime のスピード向上や、AI にソースコードを学習させるための大規模データセットである Project CodeNet のリリースなどが発表されました。 特に、Project CodeNet により、コードの別言語への翻訳や異なるコード間の重複と類似性の特定が可能となり、レガシーなコードから最新のコードへの移行などが期待できます。   パートナー・エコシステムへの更なる投資 パートナー・エコシステムへの取り組みについても、大きな発表としてメッセージされました。 IBMテクノロジーをわかりやすくお客様に届けるには、パートナー様との協業・共創が必要で、10憶ドルもの投資を行うとの発表がありました。従来型の販売(再販)に加え、ビルド、サービスといったパートナータイプが追加され、ISV・CSP といったソリューションベンダーへの支援プログラムもより拡大されるようです。 特に、クラウドエンゲージメントファンド (CEF) は、お客様のワークロードをハイブリッドクラウド環境に移行するのに役立つ重要な技術リソースとパートナー向けのクラウドクレジットへの投資です。 Think後の日本IBM の中でもこの発表は強く認識されており、IBMグローバルとして、よりパートナー協業を強く推し進める姿勢であり、支援を強化する動きが活発化していると感じます。   さいごに 今までにない経験であったこの1年で、10年分のデジタル革命が起きたと言われています。 そしてこれからも続くであろうこの進化を、引き続きパートナーの皆様へお届けしていきたいと思います。  

2021年05月20日

【てくさぽBLOG】IBM Power Virtual ServerでAIX環境を作ってみた

こんにちは。 てくさぽBLOGメンバーの村上です。 本ブログは、IBM Power Virtual Server をトライしてみた手順や感想をご紹介するブログです。 IBM Power Virtual Serverの 正式名称は、 IBM Power Virtual Server on IBM Cloud です。 (※2021/7 追記:正式名称に変更があり「on IBM Cloud」の部分が削除されました) 一般的には、PowerVS や Virtual Server と略されているようなのですが、似たような略称が他にもあって混同してしまいそうです・・。 そのため、本ブログではあまり略さずに、Power Virtual Server と記載します。   これから何回かに分けて ブログをアップしていきますので、まずインデックスのご紹介です。 インデックス ・IBM Power Virtual ServerでAIX環境を作ってみた ← 本ページ ・IBM Power Virtual ServerのAIX環境にSWを導入してみた ・IBM Power Virtual ServerのAIX環境を日本ロケールにしてみた ・IBM Power Virtual ServerのAIX環境をバックアップしてみた(Part.1) ・IBM Power Virtual ServerのAIX環境をバックアップしてみた(Part.2) ・IBM Power Virtual ServerのAIX環境とIBM Cloud x86環境を接続してみた   構築手順をご紹介する前に、Power Virtual Server を簡単にご説明します。 Power Virtual Server とは? Power Virtual Server とは、IBM が提供するビジネス向けのクラウド 「IBM Cloud」とともに利用する、IBM の Power Systems を基盤として稼働しているLPAR環境です。 2021年5月現在、IBM Cloud には350個ものサービスがあるそうです。 以下に、 IBM Cloud と Power Virtual Server の歴史を簡単に纏めてみました。 2012年 IBMが買収したIaaS専門クラウド SoftLayer にてIaaSサービスを提供開始 2016年 SoftLayer に PaaS や SaaS のクラウドサービスを統合し、名称をBluemix に変更 2017年 Bluemix にAIの Watson が加わり、IBM Cloud としてブランド統合 2019年 Power Systems を基盤としたLPARサービス Power Virtual Server の提供開始 2020年 11月。東京データセンターにて 日本初、Power Virtual Server オープン IBM Cloud は、ここ10年も経たない間に、SoftLayer から Bluemix に。そして IBM Cloud と着々とパワーアップしています。 同様に、Power Virtual Server も新しい機能がどんどん追加されています。近い将来で、また大きな変化があるかもしれませんね。   それでは、本題に戻ります。 本ページでは、Power Virtual Server のAIX環境を作成するまでの手順を以下の2つのセクションに分けてご紹介します。 1)  Power Virtual Server サービスの作成 2)  AIXインスタンス 作成 利用したクライアント端末(私のPC)は、Windwos10 バージョン2004 です。 ちなみに、私は若かりし頃、基盤SEを数年間やっていましたが、遥か遠い昔のような気がする(本当に遠い昔)・・というくらいのSEスキルです。   1)  Power Virtual Server サービスの作成 まずPower Virtual Server のサービスの作成から取り掛かります。サービスの作成は無償です。 ・IBM Cloud へログインします。IBM Cloud の ID をお持ちでない方は新規登録が必要です。 Blackの背景にWhite文字、IBMっぽいですね。 ・ログイン後、画面のバーにある「カタログ」をクリックします。 ・カタログの画面で Power Virtual Server を選択します。検索バーに「Power」と入力すると「Power Virtual Server」が一番先頭に出てきますので「Power Virtual Server 」を選択します。 自動でサービスの作成画面に変わります。 ・Power Virtual Server で利用する「ロケーション」として「東京04(tok04)」を選択します。 2021年5月現在、Power Virtual Server は13か所のロケーションから選択できます。 私の自宅(テレワーク中です)は東京なので、一番近いロケーション「東京04(tok04)」を選択してみました。 ちなみに、日本には東京以外で大阪にもロケーションがあります。大阪は「Osaka21(osa21) 」として2021年3月にオープンしました。 ・ロケーションの選択ができたら、画面右側の「サマリー」を確認し「作成」をクリックしてサービスを作成します。       以下のメッセージが出力されますが、まだサービスの作成は完了していません。 画面は「リソース・リスト」に自動で変わり、数分待つとリソース・リストの「Services」の欄に「Power Virtual Server 」が追加されました。 サービスの「状況」が「●アクティブ」になったら、いよいよ「インスタンス作成」に移ることができます。 アクティブになったサービスの「名前」の部分はリンク付きになっているのでクリックし、次の作業「AIXインスタンス作成」に進みます。   <参考情報> 「Power Virtual Server サービス」はリージョン(地理環境)毎に作成し、「Power Virtual Server サービス」の中に「Power Virtual Server インスタンス」を作ります。 「インスタンス」とは 「LPAR(区画)」のことです。Power Virtual Server のサービス内には、複数の インスタンス(AIX/IBM i/LinuxどれでもOK)を作成することができます。 異なるリージョンにインスタンスを作成したい場合は、別の Power Virtual Server サービスを作成する必要があります。   2)  AIXインスタンス作成 「1) Power Virtual Server サービスの作成」でできた Power Virtual Server のサービス内にAIXインスタンスを作成します。 ・「インスタンスの作成」をクリックします。 ・「インスタンス名」に任意のインスタンス名を入力します。インスタンス名は「AIX72-test」にしました。作成するインスタンスは1つなので「インスタンスの数」が「1」になっていることを確認します。 「VMピン(IBMサイト)」は「オフ」のままでOKです。 VMピンは、IBM i の場合はオンにするか検討しますが、AIXではシリアルナンバー固定のソフトウェアは滅多にないので(今まで出会ったことがありません)、気にしなくて良さそうです。 ・SSH鍵の設定を行うため、「SSH鍵の作成」をクリックします。 ・Windows標準搭載の「コマンドプロンプト」をPC上で立ち上げ、「ssh-keygen」コマンドを利用してSSHの秘密鍵と公開鍵を作成します。 ※Windwos10の1803バージョンからsshクライアントが組み込まれ、特に設定を行わなくてもすぐsshを利用できるようになったようです。便利になりましたー。 # ssh-keygen -t rsa -b 4096 ・SSH秘密鍵「id_rsa」と公開鍵「id_rsa.pub」が作成できたことを、PC上で確認します。 ・「type」コマンドでSSH公開鍵の中身を表示し、公開鍵の文字列をコピーします。 # type . shh\id_rsa.pub AIXインスタンス作成のWEB画面に戻ります。 ・「鍵名」に任意のSSH鍵名を入力し(「my_ssh_pub」としました)、「公開鍵」には先ほどコピーした公開鍵の文字列をペーストします。 ・「SSH鍵の追加」をクリックします。 SSH鍵の追加ができたら、インスタンス設定WEB画面に戻ります。 ・先ほど追加したSSH鍵「my_ssh_pub」が「SSH鍵(オプション)」リストに追加されたので選択し「SSH鍵の作成」をクリックします。 以下のコメントが出力され、SSH鍵が正常に作成されました。 「ブート・イメージ」を選択します。 ・「オペレーティング・システム」は「AIX」を選択します。 ・「イメージ」は最新の「7200-05-01」を選択します。 ・「層」は「層3」を選択します。 「層」はストレージのタイプのことです。 層1:Tier 1 (NVMe-based flash storage) 層3:Tier 3 (SSD flash storage)                        で提供されています。 価格は、層1>層3 です。今回の検証ではディスク性能を求めませんので層3を選択しました。 Tier1とTier3は同一インスタンス内で同時に利用することはできず、インスタンス作成後にTierタイプを変更することはできません。インスタンス作成時の「層(Tier)」の選択は重要ですね。 「プロファイル」の設定画面です。 ・「マシンタイプ」は「S922」を選択します。 ・「プロセッサー」は3種類のタイプから選択できます。「上限なし共有」を選択します。 「マシンタイプ」は東京では「E980」or「S922」が選択可能です。同じリソースを選択した場合の価格は、E980>S922となります。S922は14コアまで利用できるので、余程の大きな環境でない限り、S922で良さそうです。ただし、IBM i の場合、S922 は 1LPAR 4core までです。 ・「コア」は「0.5」core、「メモリ」は「4」GBとします。 ※​今回のデモ環境構築としてのリソースはこれくらいあれば足りるかな・・と仮置きで決めました。 コアとメモリーはインスタンス作成後、柔軟に変更できます。 「ストレージ・ボリューム」の選択画面です。 ・「新規ストレージ・ボリューム」をクリックします。 AIXでは初期で20GBがrootvgに割り当てられており、ストレージを追加しなくてもインスタンスは作成できますが、後でソフトウェアを導入したいので、インスタンス作成段階で10GBを追加してみました。 ストレージ・ボリュームはインスタンス作成後でも追加できます。 ・「名前」に任意の名前「stg01」を入力します ・「サイズ」は「10GB」で、「数量」は「1」とします ・「作成して接続」をクリックします。 ・作成した「stg01」がリストアップされます。   「ネットワーク・インターフェース」の選択画面です。 ・「パブリック・ネットワーク」を「オン」にします。 既存のプライベート・ネットワークは持っていませんので、インターネット回線を利用したパブリック・ネットワークで検証を行います。 これでインスタンス作成前の全ての選択が完了しました。 ・「使用条件に同意する」に「✓」を入れ「インスタンスの作成」をクリックします。 ※このボタンをクリックすると課金が発生します。 さすがIBM!ストレージの料金が安いですね。 「インスタンスの作成」をクリックした後は自動で「リソース・リスト」の画面に戻ります。 暫く反応がなくてドキドキしますが、3~5分後にメッセージが出力され始めます。 インスタンスの「状況」が「ビルド」→「警告」→「アクティブ」に変わり、「アクティブ」になったらインスタンスの作成が完了です。 ・「名前」の「AIX72_test」の項目がリンクになっているのでクリックし、作成したインスタンスの「詳細」を確認します。 これで、AIXインスタンスの作成は完了です!   続きは、 【やってみた】IBM Power Virtual Server のAIX環境にSWを導入してみた でご紹介しています。 <続きの内容> ③ AIXインスタンス 接続 ④ ストレージ・ボリュームの反映 ⑤ ソフトウェア導入   最後に ここまでの作業は(SE歴が遠い昔)の私にも楽勝でした。 インスタンスが数分で作成できるのは、ちょっとした感動です。 今回の検証は、IBM Partner Package (IBMサイト)で提供されている IBM Cloud クレジットを利用しました。 定められているクレジット内(料金枠内)で Power Virtual Server のみではなく、IBM Cloud の様々なサービスを自由に使うことができます。 自分のIBM ID で Partner Package を利用する際は、企業とIBM IDの紐づけが必要になります。 手順が分からない、という方はご相談ください。   お問い合わせ この記事に関するご質問は下記までご連絡ください。 エヌアイシー・パートナーズ株式会社 技術支援本部 E-Mail:nicp_support@NIandC.co.jp     参考情報 IBM Power Virtual Server (製品情報)  

2020年12月28日

【てくさぽBLOG】Cisco UCSってなんだ?[2020年12月版]

皆さま、こんにちは。てくさぽBLOG メンバーの 岡田です。 エヌアイシー・パートナーズでは2016年からCisco Unified Computing System(以下 UCS)の取り扱いを始めています。 UCSが発表されてから既に10年以上経っておりますが、再びUCSが注目を浴びています。今回は、これからUCSを検討しようとお考えの皆さんに向けて、その特徴やメリットをお伝えします。   1. Cisco UCSとは ずばり、Cisco社製のIA(Intel Architecture)サーバです。 Intel製CPUが搭載されているので、Windows Server/Linux/VMware ESXiなどの、Intel CPU用のサーバOSがUCS上でも稼働します。 では、なぜネットワーク機器のベンダーであるCiscoがIAサーバを出したのでしょうか。 仮想化が一般化した現在のデータセンターでは、サーバ、ネットワーク、ストレージ、アプリケーションといった各構成要素を個別に構築、デザイン、最適化するサイロ型になっています。その結果として、各コンポーネント個別の管理となり、管理者間の連携の煩雑さや環境変更時の検討項目・調整・検証期間工数の増大が大きな課題となっています。 これらの問題を解決するために、UCS は、仮想環境やクラウド環境で利用されることを念頭に置き、すべてのコンポーネントを全体最適化されたアーキテクチャの下に統合することで、複雑さをなくし、リソース管理を容易にし、最適な仮想環境を実現しています。つまり、サーバやネットワークを大きな1つのリソースとして一元管理することにより、管理・運用がしやすくなるということです。 (UCSの全体最適化されたアーキテクチャ)   2. 他社IAサーバとの違い では、UCSは他社IAサーバと比べて、どんなところが違うのでしょうか。UCSが他社IAサーバと異なるところは主に以下の3点になります。   ファブリックインターコネクト ユニファイドポートという1Gbまたは10Gbのイーサネットポート、またはファイバーチャネルポートのどちらにも設定できるスイッチポートを搭載したスイッチです。一般的なIAサーバでは、ネットワークスイッチとファイバーチャネルスイッチそれぞれに接続しますが、UCSサーバは基本的にこのファブリックインターコネクトとのみ接続します。   UCS Manager ファブリックインターコネクトに搭載された統合管理コンソールです。接続されたBladeサーバ、ラックサーバを一元管理します。   サービスプロファイル UCSでは、サーバのハードウェア各種設定情報をサービスプロファイルとして保持し、これを実際のハードウェアに関連付けることでサーバやネットワークの設定を行います。   Intersight Intersightはオンプレミスにある複数のCisco UCSやHCI製品のHyperFlexを統合的に管理するためのSaaSサービスです。地理的に離れた環境にある複数システムを一元管理できます。SaaSサービスなので管理サーバーを用意する必要がなく、管理者はどこからでも管理ダッシュボード画面にアクセスできます。 このような違いを持つUCSを選択すると、どのようなメリットがあるのでしょうか。   3. UCSのメリット シンプルな構成 UCSサーバはファブリックインターコネクトとのみ10Gbイーサネットケーブルで接続します。この10Gbイーサネットケーブルの中に、イーサネットとファイバーチャネルの両方のプロトコルが流れます。 これにより、ラック背面のケーブル本数が激減し、より適切なエアフローと低い消費電力を実現します。この結果として、データセンターのファシリティコスト、配線コスト、配線トラブルを削減できます。   管理ポイントの削減 UCSでは、サーバやBladeシャーシ毎に管理モジュールを持たず、ファブリックインターコネクト上にあるUCS Managerで一元管理されます。これにより、台数が増えても管理ポイントはUCS Manger1箇所のみのままですので、管理対象が増えません。これにより、個々の機器毎に管理する必要がなくなり、管理工数を削減できます。   シンプルな運用 サービスプロファイルを利用することで、構築時や障害発生における機器交換時において時間がかかっていたハードウェア設定作業を大幅に削減することが可能になります。他社IAサーバでは、サーバ導入時にさまざまな設定を個々に実施する必要がありますが、サービスプロファイルを利用するとハードウェアにプロファイルを割り当てるだけでハードウェア設定が完了します。また、機器が届く前にMAC アドレスなどの予約や、BIOS の設定を先にやっておくといったことも可能になります。   ラックマウントサーバの統合 ファブリックインターコネクト配下に接続することで、UCS Managerによる統合管理機能を、サーバ形状を問わずに一元管理可能になります。   このような特徴を持つUCSですが、エヌアイシー・パートナーズでは日本IBM社が取り扱う、IBM保守のUCSをお勧めしています。   4. IBM保守 UCSの特徴 IBM技術員によりオンサイト保守を実施します。 スペシャリストによりリモート問題判別支援をおこないます。 保守時間帯の選択が可能です。 UCSの運用を支援するオプション(交換したハードディスクのお渡しサービスと部品2時間配送サービス)を追加できます。   5. まとめ いかがでしたでしょうか。UCSはサーバメーカーとしては後発であることのメリットを活かして、これまでのIAサーバが抱えていた課題を解決できるソリューションを備えています。これにIBM保守を加えることで、ネットワーク機器からサーバまで保守をまとめてIBM社に一元化することができます。現在のデータセンター運用に課題を抱えたお客様にはぜひUCSをご検討ください。 また、エヌアイシー・パートナーズではUCSとIBMストレージ、ネットワークスイッチ等の複雑な組み合わせでの構成でも対応可能です。ご相談からお見積り依頼まで、遠慮無くお申し付けください。 最後に、弊社サイトのUCSページにてラインナップや支援内容などを記載していますので、こちらももぜひ御覧ください。 https://www.nicpartners.co.jp/products/72456/?from_category=category_all     【変更履歴】 2020/12 Intersight説明を追加。弊社サイトのUCSページへのリンクを修正。   この記事に関する、ご質問は下記までご連絡ください。 エヌアイシー・パートナーズ株式会社 技術支援本部 E-Mail:nicp_support@NIandC.co.jp 商標帰属 ・すべての名称ならびに商標は、それぞれの企業の商標または登録商標です。

2020年12月28日

データを守るということについて

IBM の岡田です。 いよいよシリーズ物、最後のテーマまでやってきました。 ここまでの内容はいかがでしたでしょうか?もう少しで完結しますので、最後までお付き合いいただければと思います。 さて、今回のテーマは「データを守ることについて」ということで、様々な脅威からどうやってデータを守るか、という内容でお届けします。   データを脅かす脅威とは 一昔前までは、データの脅威といえば人為的オペミス、装置の故障・障害、災害などが挙げられてました。しかし、最近はこれに加えサイバー攻撃といったものも加わってきております。 今まではサイバー攻撃というと、ネットワークあるいはサーバーにて対処すべきもの、という考え方が主流だったかと思います。これらはサイバーセキュリティという範疇の対策であり、今までも多くの製品やサービスによって培われてきた技術です。 しかし、昨今のサイバー攻撃はマルウェアが主流となっており、特にランサムウェアと呼ばれる攻撃が世間的にも目立ち始めてます。企業のデータを強制的に暗号化し解除するための身代金を要求するというものです。 確か最近ニュースで、日本での被害のとんでもない状況を目にした覚えがあります。調査対象の半数以上の企業は攻撃を受けた経験を持ち、実際に身代金を払った会社も調査対象の約3分の1あったということ、また、本当に支払われた身代金も平均が億を優に超える金額だったことに筆者も驚きました。 ということで、今回はストレージ技術にできるデータの保全について、従来の物理的な脅威から守ること、今日のサイバー攻撃から守ることの2つに分けてお話していきます。   物理的な脅威からデータを守る 止まらないシステムを構築するために、IT の世界では様々な対策が体系化し今日に至ってます。 全ての ITインフラを成す要素を冗長化するといったものはごく当たり前で、IT技術者なら必ず取っている対策ですね。機器自体も各パーツが冗長化されいつでもホットスワップでパーツ交換できるような仕組みになっているのが現在の IT機器です。 このように、シングルポイントになり得る構成をできる限り排除することで物理的な機器の障害や故障からシステムを守る、というのが今時当たり前のシステム設計なのはご存知の通りです。 データについてはどうでしょう。 システム構成の一部としてデータの通り道も冗長化されているのが昨今の設計ですが、データを貯める場所、つまりストレージについては過去より多くの技術が使われてきております。 パーツとしての HDD 等に用いられる磁気ディスクの盤面に書き込む際のフォーマットについては、ECC(Error Check and Correction)と呼ばれる技術、すなわちデータをビット化けや傷・汚れなどによるディスク上の脱落から計算により正しいデータを導くテクノロジーが用いられております。 さらに上のレイヤーでは、HDD や SSD などデイバイスの故障に対応するために、RAID といった技術が使われていることも多くの IT技術者はご存知でしょう。 最近は大容量下での再構成の長時間化などを改善するため、各社独自の RAID技術を駆使していたり、イレージャーコーディングといった、今まではディスク盤面などミクロな世界で行われていたような ECC をベースとした考え方を、装置・筐体といったレベルまで広げた技術などが使われ始めています。 最近のストレージ装置はユーザーに開放している論理ボリュームに対して、そのコピーを複数個筐体内に取って世代管理することもありますし、筐体間レプリケーションで別の安全な場所にコピーを取るということもできます。 そして、昔からあるオーソドックスな方法としては、ある時点のデータを静的に固めて安全な媒体に書き出して取っておく、所謂、バックアップが一番一般的ではないでしょうか? しかし、実はバックアップ技術も1990年代のような、ただテープ媒体などに静的データを単純にとれば良いという時代はとっくに終わっており、今やバックアップ先データ容量を極限まで抑える技術であったり、転送を効率的に行う技術であったり、いろいろな技術が併用されております。 少し簡単に紹介しましょう。以下にご紹介するのは IBM Spectrum Protect と呼ばれるバックアップソフトで使われている技術です。   1. 永久増分バックアップ 初回バックアップのみフルバックアップを取り、その後のバックアップは増分(差分)のみ。 こうすることでバックアップ先データに必要な容量を格段に節約することができますし、このデータを遠隔にレプリケーションする際もデータ量が少ないため、ネットワークに余計な負担をかけずに済みます。 図1. 永久増分バックアップ   2. 重複排除・圧縮技術 すでに枯れた技術で、ストレージ装置にも使われているものですが、特に重複排除については過去のバックアップデータとの重複もあるので、さらに効果が見込まれます。 また、VM などの仮想環境でも似たディスクイメージを扱うことで、重複排除率は格段に上がります。 図2. 重複排除   3. FASP技術 バックアップデータを DR 目的で遠隔に飛ばす際には、ネットワーク帯域を通常の TCP/IP より効率的に使用できる FASP(Fast Adaptive Secure Protocol)により、高速転送が可能となります。 図3. FASP転送   4. 今時のバックアップ先ストレージ バックアップのとり先といえば、昔はテープ、そしてディスクの時代があり、最近はまたテープが見直されてきています。 理由はもちろんビット単価であったり可搬性であったりが主ですが、後述するサイバー攻撃対策としても最近は注目されています。 最新技術活用という点では、クラウドのオブジェクトストレージにバックアップするというのも出てきています。その基本的な3形態を示したのが次の図です。 図4. バックアップ3形態   悪意のあるサイバー攻撃からデータを守る ここまでは、レガシーな考え方、つまり物理的な脅威への対策としての最新のバックアップ技術です。 ところが昨今はこう言った脅威のみならず、意図的なデータ破壊や改竄への脅威、つまりサイバー攻撃への対策というものが必要になってきています。 そもそも色々な技術の蓄積で現在のサイバーセキュリティ成り立っていますが、攻撃者とのいたちごっこであることは否めません。したがって、突破された際の対策というものも必要になります。 最近のデータによると、実際にハッカーあるいはマルウェア等に侵入されたことが発覚するまでの日数は数百日とも言われており、わかった時にはすでに多くのデータの破壊・改竄・漏洩がなされた後、ということになりかねません。 このうち、破壊・改竄はデータが失われる訳で、データを使った企業活動ができなくなるという致命的な結果になり得ます。ゆえに、破壊・改竄(ランサムウェアによる強制的暗号化も含む)への対策が必要となるわけです。 図5. サイバー攻撃の際、データが役に立たなくなる 多くの場合、ネットワーク越しにサイバー攻撃が行われます。つまり、バックアップがあるから大丈夫と思っていても同じネットワーク内にあれば同様に犯された使えないバックアップデータとなる可能性が出てきます。 そこで、覚えていただきたいキーワードがあります「エアギャップ」と「イミュータブル」。 サイバーレジリエンシーの基本的な考え方です。 図6. エアギャップ・イミュータブル 前者は、ネットワーク的なつながりのない場所・物・仕組みを指し、後者は、改竄できない場所・物・仕組みをさしています。 つまり、バックアップなどの最後の砦となりうるデータは、こういったエアギャップ対応、あるいはイミュータブル対応のなされたメディア・機器・場所・仕組みなどに置くことで、初めてサイバー攻撃からデータを守るということができるわけです。 もちろん RPO がゼロになるわけではないので失うものも若干ありますが、億単位の身代金を支払うことからは救われます。 RPO をゼロに近くするためには当然、検知能力を上げる他ありません。 サイバーセキュリティで 100%検知できればこのような不幸は起こりませんが、万一気づかずネットワーク内に攻撃が入ってしまった場合も、データ側の仕組みで検知することもできるかもしれません。以下に二つの検知技術を紹介します。 図7. IBM Spectrum Protect の検知機能 こちらは、定常状態と大きなデータの変化のあった状態との差からサイバー攻撃の可能性の有無をチェックする機構です。 データが暗号化されたり破壊されたりすると、直前のバックアップデータとは大きく異なるデータとなるため、当然の事ながら重複排除率は極端に低くなります。さらに、圧縮率やファイルの増加数など、定常時とは異なる変化が現れるでしょう。 そういった変化を検知することで、データに何か大きな変化があったこと、すなわち破壊・改竄の可能性をいち早く検知することができるわけです。 次に、例えば IBM の Spectrum Scale には File Audit Logging という機能があります。 これをサイバーセキュリティの仕組みで検知系に繋げてあげれば、いち早くおかしなデータから本番データを守ることができるわけです。 図8. IBM Spectrum ScaleとQradar によるサイバー攻撃の検知   サーバー攻撃と対策のいたちごっこは、これからも続いていくでしょう。 しかし、アンチウィルス系の対策のようにウィルス自体のシグネーチャーやパターンに頼った対策は、必ず後手となります。そういう意味で、定常状態との変化で検知する方法は非常に有効な手段かと思われます。 ぜひ有効な対策を打って、備えを万全にしていきましょう!   約半年にわたってブログを書かせていただきましたが、少しでも IT を担う皆様にお役に立つことができると幸いです。 ありがとうございました!     この記事に関するお問い合わせ エヌアイシー・パートナーズ株式会社 企画本部 事業企画部 この記事に関するお問い合せは以下のボタンよりお願いいたします。 お問い合わせ   参考ページ IBMストレージ製品 (製品情報) 全包囲網。。。最新 IBMストレージ 概要 (ブログ) OpenShiftに代表されるコンテナ環境へのIBMストレージの対応 (ブログ) ハイブリッド/マルチクラウド時代だからこそIBMのストレージ (ブログ) AI導入はどこまで現実的? 5大ハードルとその解決策を解説 (ホワイトペーパー) 普及が進む、機械学習による異常検知。導入の課題はここまで解決している (コラム) データ・ファーストのハイブリッドクラウド基盤を実現するIBMストレージ (IBMサイト) ハイブリッドクラウドにおけるデータ連携の鍵を握るもの (IBMサイト)   .btn_B{ height:25px; } .btn_B a{ display:block; width:100%; height:100%; text-decoration: none; background:#eb6100; text-align:center; border:1px solid #FFFFFF; color:#FFFFFF; font-size:16px; border-radius:50px; -webkit-border-radius:50px; -moz-border-radius:50px; box-shadow:0px 0px 0px 4px #eb6100; transition: all 0.5s ease; } .btn_B a:hover{ background:#f56500; color:#999999; margin-left:0px; margin-top:0px; box-shadow:0px 0px 0px 4px #f56500; } .bigger { font-size: larger; }  

1 5 6 7 8 9 16
back to top